我需要将innodb数据库从一台服务器移到另一台服务器 – 它也是从mysql> mariadb。 我想确保没有任何问题,我将使用mysqldump导出,然后导入到新的服务器上。 新的服务器my.cnf设置是不同的,所以复制文件不是我想要尝试的。 只要能确保没有问题的转储/import,我也不是完全关心停机时间。
因为这是一个实时数据库,我担心由于事务或任何其他在新服务器上导入时导致约束问题/损坏的转储中的错误。
这里最好的程序是什么? 这是我在想…
mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql导入 是否有可能重新启动MySQL并locking所有用户? 这将解决任何滞留的交易,并确保数据在导入时是合法的吗? 基本上我想一旦开始备份过程,就会永远closures对数据库的访问,因为一旦它被导入新服务器,永远不需要再次访问,更重要的是,我不希望它在转储/恢复到其他服务器。 当然,我想将数据库保留在原始服务器上,以防出现导入问题。
请注意,如果数据库中有任何encryption的字段,则必须使用--hex-blob和mysqldump 。 如果不使用--hex-blob ,导入数据将会变得无用。
在备份之前,请执行带FLUSH TABLES WITH READ LOCK的FLUSH 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
gzip和zcat会帮助你更快地做到这一点。