Мне нужно переместить innodb db с одного сервера на другой - он также идет от mysql> mariadb. Я хочу убедиться, что никаких проблем нет, и поэтому я буду использовать mysqldump для экспорта, а затем импорта на новый сервер. На новом сервере настройки my.cnf отличаются, поэтому я не хочу пробовать копировать файлы. Я не совсем озабочен простоем, если он обеспечивает хороший дамп / импорт без проблем.
Поскольку это live db, меня беспокоят ошибки в дампе из-за транзакции или чего-либо еще, что при импорте на новый сервер может вызвать проблемы / повреждение ограничений.
Какая здесь лучшая процедура? Вот о чем я думал ...
mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql
mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
Можно ли перезапустить mysql и заблокировать всех пользователей? Сможет ли это решить любые затяжные транзакции и гарантировать, что данные при импорте являются законными? По сути, я хочу навсегда закрыть доступ к базе данных, как только я запускаю процесс резервного копирования, поскольку после импорта на новый сервер к нему больше не потребуется доступ, и, что более важно, я не хочу, чтобы к нему обращались во время дампа / восстановить на другой сервер. Конечно, я хотел бы оставить базу данных на исходном сервере на случай, если возникнут проблемы с импортом.
первое, что вам нужно сделать, это сделать резервную копию своей базы данных, а затем импортировать ее на новый сервер и сначала протестировать новый сервер, если все в порядке, также проверьте время, которое вы используете для создания резервной копии и восстановления на новый сервер, чтобы вы знаете, сколько времени у вас уйдет на запуск нового сервера в производство.
когда вы будете готовы передать все на новый сервер, лучше деактивировать все подключения к вашей базе данных, если только localhost не будет, поскольку вы будете использовать mysqldump для доступа к базе данных и сделать резервную копию, если все обращения к базе данных происходят с вашего веб-сервера, вы можете отложить другой способ - настроить iptables для блокировки всего трафика на вашем порту mysql, кроме localhost. затем вы создаете резервную копию своей базы данных, восстанавливаете ее на новом сервере и запускаете новый сервер, а также убедитесь, что все ваши соединения будут идти на новый сервер.
Обратите внимание, что вы должны использовать --hex-blob
с участием mysqldump
если у вас есть зашифрованные поля в базе данных. Если --hex-blob
не используется, данные будут бесполезны при импорте.
Перед резервным копированием выполните FLUSH TABLES WITH READ LOCK
чтобы предотвратить любые изменения. Вы можете направить резервную копию на новый сервер за один шаг, сохранив шаг копирования файла SQL.
mysqldump --single-transaction --routines --triggers --events --hex-blob db-name | mysql -h server db-name
все зависит от того, большая ли ваша база данных или достаточно мала, также зависит от того, какую службу вы используете, но я предполагаю, что должен быть некоторый период обслуживания, в выходные дни поздно вечером, выключите свой apache / nginx, также вы можете перезапустить свою базу данных с отключенной сетью, брандмауэр или другой локальный порт. экспорт:
mysqldump -p --single-transaction --routines --triggers --events DATABASE | gzip > backup.sql.gz
Импортировать:
zcat backup.sql.gz | mysql -f -p DATABASE
перепроверьте:
mysql_upgrade -p -f
gzip и zcat поможет вам сделать это быстрее.