Мы хотим перейти от использования MySQL к экземпляру EC2 к RDS и настроить репликацию. Кажется, это не проблема, не так ли? Ну, у меня есть 30 000 баз данных для перемещения (не спрашивайте). Хотя настройка тиражирования, похоже, хорошо работает, процесс получения 30 000 баз данных в RDS является королевской болью; это берет навсегда, и что-то почти всегда происходит.
Ночная резервная копия занимает около двух часов. Я получаю файл дампа с несколькими GB файлами. Когда я пытаюсь его восстановить, что-то почти всегда идет не так: экземпляр RDS не был достаточно большим по размеру памяти и разбился, у локального хоста закончилось место подкачки, сетевое соединение стало неустойчивым. Без разницы! Я восстановил его однажды; IIRC потребовалось 23 часа (30 тысяч MySQL DB - это тонна файла IO).
Поэтому сегодня я решил использовать mydumper. Он сгенерировал 30 000 файлов схемы для базы данных примерно через два часа, а затем, внезапно, исходный MySQL перешел в режим бесперебойного сна в соответствии с вершиной, я потерял свои клиентские соединения, strace показал, что он все еще пытается читать файлы, и процесс mydumper разбился. Я перезапустил весь процесс и только что проверил статус; По какой-то причине mysqld перезапустил 2,5 часа.
Итак, вот что я думаю, и я бы хотел, чтобы ваш вход: я пишу два сценария python: firstScript.py запустит mydumper в одной базе данных, обновит таблицу состояния, упакует SQL, поместит ее в очередь AWS SQS, повторяя, пока не будет найдено больше баз данных; secondScript.py читает из очереди, запускает SQL и обновляет таблицу состояния, повторяя, пока не будет найдено больше сообщений.
Я думаю, это может сработать. Вы? Главное, что я не уверен в этом: могу ли я просто запустить несколько secondScript.py с помощью Ctrl-Z-их в фоновом режиме?
Или у кого-то есть лучший способ перемещения 30 000 баз данных?
Я бы не использовал mysqldump или mydumper для создания логического дампа. Загрузка результирующего дампа формата SQL занимает слишком много времени.
Вместо этого используйте Percona XtraBackup для создания физической резервной копии вашего экземпляра EC2 и загрузки резервной копии на S3. Затем восстановите экземпляр RDS с S3, настройте репликацию на экземпляре RDS на экземпляр EC2 и дайте ему догнать.
Функция восстановления физической резервной копии MySQL для RDS была объявлена в ноябре 2017 года.
Смотрите также:
Вы должны попробовать его с меньшим экземпляром, чем ваши 30k-базы данных, чтобы вы могли практиковать эти шаги. См. Шаги в блоге Percona, с которым я связан выше.