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 ! @@@@@@@@@@"

Leave a reply