SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.10.2018 11:27:28

W2S
Участник
Зарегистрирован: 18.02.2016
Сообщений: 4

Как сделать безопасный импорт SQL-дампа в MYSQL?

Всем привет!

Хотелось бы совета как правильно реализовать данную задачу:
Через mysqldump был сформирован .sql-пакет (дамп определенных таблиц и их данных) для дальнейшего импорта в новую БД.

Как обезопасить себя что в случае форс-мажора если импорт .sql оборвется сделался бы ROLLBACK в начальное состояние?

Грубо говоря как мне безопасно импортировать в MYSQL .SQL-файл (дамп таблиц) в одну транзакцию? (или еще както?)

Или для этого надо сам .sql файл выгружать утилитой mysqldump с определенными параметрами? (Чтобы он сформировался для дальнейшего импорта прописав в самом файле единую транзакцию импорта?)
Или это как-то иначе делается?

Сейчас я экспортирую так: mysqldump --user=user --password=password --host=host --databases "dbase" --tables table1 table2 --protocol=tcp --port=3306 --skip-triggers > export.sql
импортирую: mysql --user=user --password=password --database=dbase < export.sql

Но если по какой-то причине импорт дампа прервется состояние этих таблиц не восстановится же? Поправьте как это делается правильно.

PS: и еще мелкий вопрос - у меня в файле tables.txt (одна строка = одно имя таблицы) содержится список таблиц для экспорта.
Как мне вместо --tables table1 table2 указать что названия таблиц надо считывать из файла?

Спасибо за внимание!

Неактивен

 

#2 20.10.2018 19:41:23

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6691

Re: Как сделать безопасный импорт SQL-дампа в MYSQL?

К сожалению, MySQL не поддерживает транзакции в DDL, поэтому любые изменения структуры таблиц автоматически сделают этот дамп непригодным для восстановления. Можно попробовать сделать дамп и добавить туда внутри транзакции строки вида DELETE FROM tablename, но это выглядит как минимум рискованно. Кажется, то, что Вы хотите, проще реализовать восстановлением в отдельную базу данных, а потом переключением боевой нагрузки в нее.

Список таблиц можно вычитывать средствами shell операционной системы (например, в bash это будет просто

--tables $(cat tables.txt)
).

Неактивен

 

#3 20.10.2018 23:25:06

W2S
Участник
Зарегистрирован: 18.02.2016
Сообщений: 4

Re: Как сделать безопасный импорт SQL-дампа в MYSQL?

Спасибо вам за наводки!

добавить туда внутри транзакции строки вида DELETE FROM tablename  - вы имеете ввиду (чтобы сохранить единую транзакцию) создать дамп без create и drop и сделав например дамп обернутый в begin и end только с trancate и insert ? (про риск - вы имеете ввиду что теперь контроля соответствия структуры таблиц нет?)

Переключение баз не устроит.. - если вдаваться более подробно, нужно по маске выборочно отобрать таблицы и только их импортировать из старой базы (из pre-production сервера) в активную БД (production), при этом задача поставлена сохранить целостность импорта.

Есть еще вариант федеративных таблиц, только не знаю чем это мне облегчит задачу

Отредактированно W2S (20.10.2018 23:29:09)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson