У меня большая база данных (почти 1 ГБ), и в ней есть смесь таблиц innodb и myisam. Есть ли у кого-нибудь общие советы по его резервному копированию или, более конкретно, команды, которые я должен отправить в mysqldump. Я вижу, что мне нужно заблокировать таблицы myisam и эти отдельные транзакции для innodb, но что, если у меня есть и то, и другое. Кроме того, что на самом деле происходит, когда я блокирую всю (очень большую) таблицу в производственной базе данных.
Вы можете использовать Percona XtraBackup с innobackupex, он сделает всю работу за вас.
Интересно то, что клиентские инструменты MySQL не могут обрабатывать оба механизма хранения одновременно. Однако не стоит отчаиваться.
На самом деле есть один успешный способ сделать снимок данных с помощью mysqldump:
Шаг 1) mysql -h ... -u ... -p ... -A -e "СБРОСИТЬ ТАБЛИЦЫ С БЛОКИРОВКОЙ ЧТЕНИЯ; ВЫБРАТЬ СОН (86400)" &
В этом сеансе MySQL это блокирует все таблицы, MyISAM, InnoDB и другие. Вся база данных находится в состоянии только для чтения
Шаг 2) Примерно через 20-30 секунд запишите идентификатор процесса, выполнив команду SLEEP следующим образом:
SLEEPID = `mysql -h ... -u ... -p ... -A -e" ПОКАЗАТЬ СПИСОК ПРОЦЕССОВ "| grep "SLEEP (86400)" | awk '{print $ 1}' `
Шаг 3) Выполните mysqldump
mysqldump -h ... -u ... -p ... --single-transaction --routines --triggers --all-databases> MySQLData.sql
Шаг 4) Завершите процесс, выполнив команду SLEEP:
mysql -h ... -u ... -p ... -A -e "УБИТЬ $ {SLEEPID}"
Поверьте, идеальный снимок каждый раз.
Попробуйте !!!
P.S. Честно говоря, есть и другие инструменты, на которые вы можете посмотреть
Инструмент 1) CDP R1Soft (с использованием модуля MySQL)
Инструмент 2) XtraBackup от Percona