Обновился Open Server и появилась задача перенести все базы данных со старой версии в новую.
Я работаю на компьютере с Windows 10
Буду использовать:
- Консоль Windows PowerShell
- Консоль Git Bash
- Текстовый редактор — Vim
Создаём место для хранения
D:/backups/MySQL/ - папка для хранения баз данных. Из этой папки будут исполняться все консольные команды
D:/backups/MySQL/list.txt - список имён баз данных
D:/backups/MySQL/export.sh - команды для экспорта
D:/backups/MySQL/create.sh - команды для создания баз данных
D:/backups/MySQL/import.sh - команды для импорта
Можно создать все нужные файлы командами в Git Bash:
mkdir -p backups/MySQL
cd backups/MySQL
touch list.txt export.sh import.sh create.sh import.sh
Получаем список баз данных
Запускаем консоль администратора Windows PoserShell
Подключаемся к MySQL командой
mysql -u root
Выводим список всех баз данных
show databases;
Копируем текст и вставляем в текстовый редактор Vim.
Заполняем файл list.txt
vim list.txt
Очищаем от ненужных знаков | и пробелов.
%s/|\|+\|-\| //g
В результате получится список с названиями баз данных.
database_1
database_2
...
database_n
Из полученного списка нужно удалить служебные базы данных
information_schema
performance_schema
mysql
sys
g/information_schema\|performance_schema\|mysql\|sys/d
Экспорт баз данных
Открываем файл export.sh
Загружаем в него список баз данных
:read list.txt
С помощью регулярного выражения, превращаем список имён в команды экспорта
%s/\v(^.*$)/mysqldump --column-statistics=0 -u root \1 > \1.sql/g
В результате
mysqldump --column-statistics=0 -u root database_1 > database_1.sql
mysqldump --column-statistics=0 -u root database_2 > database_2.sql
...
mysqldump --column-statistics=0 -u root database_n > database_n.sql
С архивированием
%s/\v(^.*$)/mysqldump --column-statistics=0 -u root \1 | gzip > \1.sql.gz
Запускаем его в Windows PoserShell
C:\> export.sh
Создаём базы данных
Останавливаем сервер и запускаем новую версию.
Открываем файл create.sh и загружаем список имён баз данных
vim create.sh
:read list.txt
С помощью регулярного выражения или вручную приводим список к следующему виду
%s/\v(^.*$)/create database \1;/g
Результат
create database database_1;
create database database_2;
...
create database database_n;
Копируем полученные команды
Подключаемся к MySQL в
mysql -u root
Вставляем скопированные команды.
В результате у нас созданы все необходимые базы данных.
Импорт
Работаем с файлом import.sh
Открываем его в vim и копируем в него список имён баз
vim import.sh
:read list.txt
С помощью регулярного выражения превращаем список баз данных в команды
%s/\v(^.*$)/use \1; source \1.sql;/g
Результат
use database_1; source database_1.sql;
use database_2; source database_2.sql;
...
use database_n; source database_n.sql;
Копируем полученные команды
Подключаемся к MySQL в Windows PoserShell
mysql -u root
Вставляем скопированные команды.
Ждём …
На этом всё!