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 ! @@@@@@@@@@"
Афоризм дня:
Люди в древности не любили много говорить. Они считали позором для себя не поспевать за собственными словами. (569)
Leave a reply