将live innodb db从一台服务器移动到另一台服务器

我需要将innodb数据库从一台服务器移到另一台服务器 – 它也是从mysql> mariadb。 我想确保没有任何问题,我将使用mysqldump导出,然后导入到新的服务器上。 新的服务器my.cnf设置是不同的,所以复制文件不是我想要尝试的。 只要能确保没有问题的转储/import,我也不是完全关心停机时间。

因为这是一个实时数据库,我担心由于事务或任何其他在新服务器上导入时导致约束问题/损坏的转储中的错误。

这里最好的程序是什么? 这是我在想…

  1. 无需用户访问,重新启动mysql,所以没有人可以读/写数据库。
  2. mysqldump与mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql
  3. 使用mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql导入

是否有可能重新启动MySQL并locking所有用户? 这将解决任何滞留的交易,并确保数据在导入时是合法的吗? 基本上我想一旦开始备份过程,就会永远closures对数据库的访问,因为一旦它被导入新服务器,永远不需要再次访问,更重要的是,我不希望它在转储/恢复到其他服务器。 当然,我想将数据库保留在原始服务器上,以防出现导入问题。

请注意,如果数据库中有任何encryption的字段,则必须使用--hex-blobmysqldump 。 如果不使用--hex-blob ,导入数据将会变得无用。

在备份之前,请执行带FLUSH TABLES WITH READ LOCKFLUSH TABLES WITH READ LOCK以防止发生任何更改。 您可以通过一步将备份pipe道传输到新服务器,从而节省了复制SQL文件的步骤。

 mysqldump --single-transaction --routines --triggers --events --hex-blob db-name | mysql -h server db-name 

你应该做的第一件事是备份你的数据库,然后将它导入到新的服务器中,如果一切正常,先testing新的服务器,同时检查你创build备份和恢复到新服务器的时间。你知道需要多less时间才能将新服务器投入生产。

当你准备好把所有的东西都传递给新的服务器的时候,最好是停用到你的数据库的所有连接,除非你使用localhost来访问数据库并进行备份,如果所有对数据库的访问都来自你的web服务器, Web服务器的另一种方式是configurationiptables来阻止除localhost之外的mysql端口上的所有stream量。 然后你备份你的数据库,恢复到新的服务器,并设置新的服务器的生活,并确保你所有的连接将去新的服务器。

这一切都取决于如果你的数据库大或小,还取决于你正在运行的服务,但我想必须有一些维护窗口,在周末深夜,closures你的Apache / Nginx的,也可以重新启动您的数据库与禁用networking,防火墙或不同的本地端口。 出口:

 mysqldump -p --single-transaction --routines --triggers --events DATABASE | gzip > backup.sql.gz 

import:

 zcat backup.sql.gz | mysql -f -p DATABASE 

再次检查:

 mysql_upgrade -p -f 

gzipzcat会帮助你更快地做到这一点。