Как скопировать таблицу из одной базы MySQL в другую

Последнее обновление 11.09.2018

Есть сервер №1, на котором крутится MySQL. И есть второй сервер №2 с MySQL. Задача стояла такая: из БД сервера №1 брать таблицу и копировать из неё данные в таблицу с другим именем на сервере №2 раз в сутки. Реализация простая.

Пилим скрипт backup_tables.sh со следующим содержимым:

#!/bin/bash
cd <путь до upload директории сайта> \
/usr/bin/mysqldump -h server1 -u user -ppassword \
--single-transaction --set-gtid-purged=OFF \
database b_directions b_taskgroups b_tasks_hpsm b_services | \
/bin/gzip | \
/bin/dd of=<путь до upload директории сайта>/database_tables_`date\
 +%Y_%m_%d`.sql.gz
/bin/rm -f `ls -1 database_tables* | /usr/bin/head -n -10`

В нём осуществляется переход в директорию, где будут лежат дампы. Далее создается сам дамп и его дальнейшее местоположение (открытая папка upload) с указанием имени + дата до числа, дополнительно указываются ключи для БД, чтобы всё дампилось корректно. Последние 10 копий удаляются. Скрипт добавляется в крон.

После идем на сервер №2 и там пилим второй скрипт wget_database_tables.sh:

#!/bin/bash
cd /tmp
/usr/bin/wget https://<url сервера №1>/upload/tables /database_tables_`date +%Y_%m_%d`.sql.gz
/usr/bin/zcat database_tables_`date +%Y_%m_%d`.sql.gz | \
/usr/bin/sed 's/b_directions/b_directions_hpsm/g' > database_tables_`date +%Y_%m_%d`.sql
/usr/bin/cat database_tables_`date +%Y_%m_%d`.sql | mysql database 
sleep 20
/usr/bin/rm -f database_tables_`date +%Y_%m_%d`.*

Во временной директории wget`ится дамп таблиц с сервера №1. Далее в файле заменяются все вхождения b_directions на b_directions_hpsm, т.к.необходимо с сервера №1 брать одну таблицу (b_directions) и сливать с неё данные в БД сервера №2 в таблицу b_directions_hpsm. После этого данные удаляются.

Ваш комментарий будет первым

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *