我们计划将一个大型 MySQL 数据库从一台服务器移动到另一台服务器 - 从 32 位移动到 64 位,因此复制数据库文件似乎不是一个选择。
这里的“大”是指大约 30 个表,文件系统上有 60Gb 的空间。遇到了一些问题(难以置信速度很慢),之前转储的数据库大小只有这个的十分之一:
有人能提供一些关于如何在服务器之间进行最佳传输的提示吗?(有什么比 mysqldump “更好”的吗?有什么特定的命令行开关应该打开吗?从文件转储/重新加载,或直接通过管道传输到另一个数据库,进行 gzip 压缩等。)
答案1
首先,从 32 位升级到 64 位应该与文件系统没有任何关联,因此直接复制数据库文件应该不是问题。转储大型数据库可能会很慢,因此复制原始文件可能是最佳选择。您使用的是 MyISAM,还是所有表都在 InnoDB 中?如果您使用的是 InnoDB,您可以尝试使用 Percona 的 xtrabackup 对数据库进行“实时”备份,而无需停机:
https://launchpad.net/percona-xtrabackup
如果您使用的是 MyISAM 并且担心停机时间,您可以做的是rsync
在服务器运行时直接对数据文件执行。连续运行多次,直到“更改”的表很少并且 rsync 很快完成。然后,您可以快速关闭 MySQL,最后一次运行rsync
以获取一致状态的文件并再次启动 MySQL。然后,您可以将它们复制到新服务器,启动 MySQL 并从那里开始。
希望这可以帮助!
答案2
mysqldump
具有生成文本数据的无价优势,例如,可以使用脚本进行处理或重新排列,而不像依赖于结构/程序的二进制格式。
我会花额外的时间进行mysqldump
文本备份。但是,有两件事需要考虑
mysqldump
早期版本中存在导致性能缓慢的错误- 添加
--opt
选项mysqldump
,它是新版本中的默认选项(确实如此--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
),并使该过程更快(它还添加了加速加载的说明(见MySQL 页面评估哪个选项适合您的需求)。