Скрипт миграции MySQL базы на удаленный сервер
Код скопировать в файл, например migrate.sh,
и установить ему права на выполнение: chmod u+x migrate.sh
Запуск: ./migrate.sh
#!/bin/bash
# Настройки локального сервера MySQL
localuser='mysqluser'
localpasswd='mysqlpasswd'
localdbname='DB'
# Настройки сервера Mysql на который заливаем базу
remoteuser='mysqluser'
remotepasswd='mysqlpasswd'
remotedbname='DB'
# удалять старую базу "yes" Будьте внимательны! Убедитесь, что у вас есть резервная копия!
del='no'
# Имя новой базы которая будет добавлена если стоит "no"
newdb='DB'
# ваш удаленный сервер, я рекомендую настроить беспарольный доступ по ключу с помощью ssh-copy-id
sshhost='root@yourhost'
# Копируем на удаленный сервер дамп базы во временную папку (возможно нужно будет поправить путь к mysqldump)
/usr/local/mysql/bin/mysqldump -u $localuser -p$localpasswd $localdbname | gzip | ssh $sshhost 'cat > /tmp/db.sql.gz'
# Если в конфиге указано del значит удаленную базу сначала удаляем. Если в конфиге стоит нет или любое другое значение, то будет создана новая база
if [ $del = 'yes' ]; then
# Удаляем старую базу
ssh $sshhost "mysql -u $remoteuser -p$remotepasswd -e 'DROP DATABASE $remotedbname;'"
# Создаем новую базу с тем же именем
ssh $sshhost "mysql -u $remoteuser -p$remotepasswd -e 'CREATE DATABASE $remotedbname;'"
# Заливаем дамп в базу
ssh $sshhost "zcat /tmp/db.sql.gz | mysql -u $remoteuser -p$remotepasswd $remotedbname"
# Удаляем загруженный дамп из временной папки
ssh $sshhost "rm -f /tmp/db.sql.gz"
else
# Создаем новую базу
ssh $sshhost "mysql -u $remoteuser -p$remotepasswd -e 'CREATE DATABASE $newdb;'"
# Заливаем дамп в новую базу
ssh $sshhost "zcat /tmp/db.sql.gz | mysql -u $remoteuser -p$remotepasswd $newdb"
# Удаляем дамп из временной папки
ssh $sshhost "rm -f /tmp/db.sql.gz"
fi