SQL
Mysqldump копирование баз
Dumping from a remote database
mysqldump -u -h -p db_name table_name > table_name.sql
Restore
mysql -u -p db_name mysql > source /table_name.sql
or in one line:
mysql -u username -p db_name < /path/to/table_name.sql
Dump and restore a single table from a compressed (.sql.gz) format
Dump
mysqldump db_name table_name | gzip > table_name.sql.gz
Restore
gunzip < table_name.sql.gz | mysql -u username -p db_name
Ниже представлен bash-скрипт для копирования таблицы из сервера-1 на сервер-2. Реквизиты подключения подтягиваются командой source из файла .env (laravel).
#!/usr/bin/env bash
trap err_handler ERR
err_handler() {
echo "Catched global error , exiting..."
exit 2
}
DB_DEST_DATABASE=my_test
echo $DB_DEST_DATABASE # <-- (!) это имя БД второго сервера куда мы будем мигрировать таблицу из первого сервера (!)
#Загрузим все переменные в буфер линукса, нас интересуют конкретно реквизиты подключения к базам данных
source ../.env
echo ""
echo "####################### Source connection data: #############" #Выведем их на экран для проверки:
echo "DB_MIGRATE_HOST is $DB_MIGRATE_HOST"
echo "DB_MIGRATE_DATABASE is $DB_MIGRATE_DATABASE"
echo "DB_MIGRATE_USERNAME is $DB_MIGRATE_USERNAME"
echo "DB_MIGRATE_PASSWORD is $DB_MIGRATE_PASSWORD"
echo "DB_MIGRATE_TABLE is $DB_MIGRATE_TABLE" # <-- (!) это таблица которую мы и будем мигрировать к себе на микросервис (!)
echo ""
if test -z "$DB_MIGRATE_TABLE"; then # If the length of STRING is zero, variable ($var) is empty.
echo "ERROR: variable db_table_for_migration is empty"
exit
fi
# А вот это реквизиты таблицы назначения mysql дампа:
echo "####################### Destination connection: #####################"
echo "DB_HOST is $DB_HOST"
echo "DB_PORT is $DB_PORT"
echo "DB_DATABASE is $DB_DATABASE"
echo "DB_USERNAME is $DB_USERNAME"
echo "DB_PASSWORD is $DB_PASSWORD"
echo ""
#Проверим как работает вообще соединение, выведем список баз
# (чтоб работало на windows Добавьте в path C:\OSpanel\modules\database\MySQL-8.0-x64\bin)
# или C:\OSpanel\modules\database\MySQL-5.7-x64\bin
#mysql -h $DB_MIGRATE_HOST -u $DB_MIGRATE_USERNAME -p$DB_MIGRATE_PASSWORD -e "show databases;"
RESULT=$(mysql -u $DB_USERNAME --password="$DB_PASSWORD" -e "SHOW DATABASES LIKE '$DB_DEST_DATABASE'")
if test -z "$RESULT"; then # If the length of STRING is zero, variable ($var) is empty.
echo "ERROR:$DB_DEST_DATABASE are not exists!"
exit
fi
#Сделаем дамп одной таблицы в сжатом формате .sql.qz:
echo "@@@@@@@@ Start creating dump from remote table: @@@@@@@@@@"
mysqldump --single-transaction -h$DB_MIGRATE_HOST -u$DB_MIGRATE_USERNAME -p$DB_MIGRATE_PASSWORD $DB_MIGRATE_DATABASE $DB_MIGRATE_TABLE | gzip >$DB_MIGRATE_TABLE.sql.gz
echo "@@@@@@@@ dump created! @@@@@@@@@@"
echo ""
# разархивируем и Восстановим дамп созданный предыдущей командой:
echo "@@@@@@@@ Start import table from dump: @@@@@@@@@@"
gunzip $DB_MIGRATE_TABLE.sql.gz
echo "@@@@@@@@ archive extracted @@@@@@@@@@"
mysql -u $DB_USERNAME --password="$DB_PASSWORD" $DB_DEST_DATABASE <$DB_MIGRATE_TABLE.sql
echo "@@@@@@@@ Import completed! @@@@@@@@@@"
echo "@@@@@@@@ Well done ! @@@@@@@@@@"
Афоризм дня:
Лучше думать перед тем, как действовать, чем после. (591)
By den
On February 17, 2020