我正在尝试将数据库从一个提供商移动到另一个提供商,问题是我在任何一端都没有系统访问权限(即没有 ssh),所以我无法使用 mysqldump。
我已经尝试使用 MySQL Administrator,备份大约需要 45 分钟,但恢复速度却慢如蜗牛,估计需要 12 个小时以上。这是一个实时应用程序,所以我需要将停机时间降至最低。
该数据库由 35 个表组成,混合了 MyISAM 和 InnoDB,总大小约为 4.4GB。源数据库和目标数据库都运行在非常强大的服务器上。
对于任何有关快速完成此操作的建议,我们将不胜感激。
谢谢
答案1
一些用于海量数据加载的老技巧(适用于几乎任何具有事务、UDF 和触发器等高级功能的基于 SQL 的数据库):
- 如果您的加载机制允许,请将您的 InnoDB 表转为包含 1000 条记录的巨型事务。一次发布一条记录会产生很大的事务开销,但一次发布 1,000 条记录会使开销微不足道。
- 如果您有触发器支持,请在加载过程中禁用触发器。
- 在加载前关闭约束,并在加载后应用它们。这包括索引,在数据加载后删除它们并重建索引。在批量数据加载期间维护索引的开销会大大降低速度。
较新版本的 MySQL 允许复制;您可以始终将数据复制到另一台机器,然后当复制完成时,切换应用程序以指向新机器并关闭复制。
答案2
如果可以,请将表格内容放入 CSV 或制表符分隔符中,然后使用'加载数据' 命令——通常很多批量加载数据比单独插入速度更快。
答案3
您是否能够从新数据库对原始数据库运行查询?如果可以,请创建一个脚本(甚至可以是 PHP,以没有输出的网页形式运行)以从原始服务器获取数据并将其推送到新服务器,从而消除中间系统。