首页 > 解决方案 > 将大型 MySQL 数据库传输/克隆到另一台服务器的最佳方法

问题描述

我在共享托管环境中运行一个 Web 应用程序,该环境使用一个大约 3GB 大的 MYSQL 数据库。

出于测试目的,我在本地 macOS 机器上设置了 XAMPP 环境。要将在线数据库复制到我mysqldump在服务器上使用的本地计算机,然后直接将转储文件导入到mysql

// Server
$ mysqldump -alv -h127.0.0.3 --default-character-set=utf8 -u dbUser -p'dbPass' --extended-insert dbName > dbDump.sql

// Local machine
$ mysql -h 127.0.0.3 -u dbUser -p'dbPass' dbName < dbDump.sql

这里唯一的优化是使用extended-insert. 但是导入大约需要10 个小时

经过一番搜索,我发现在导入期间禁用外部约束检查应该会加快进程。所以我在转储文件的开头添加了以下行:

// dbDump.sql
SET FOREIGN_KEY_CHECKS=0;
...

然而,这并没有产生任何显着差异......现在导入大约需要 8 小时。更快但仍然很长。

为什么导入数据需要这么长时间?有没有更好/更快的方法来做到这一点?

服务器不是最快的(共享主机...),但只需大约 2 分钟即可导出/转储数据。导出比导入快(没有语法检查,没有解析,只是写......)并不奇怪,但快了 300 倍(10 小时对 2 分钟)?这是一个巨大的差异......

没有其他更快的解决方案吗?例如,复制二进制 DB 文件?任何事情都会比使用文本文件作为传输媒介更好。

这不仅仅是为了测试目的将数据传输到另一台机器。我还创建数据库的每日备份。如果有必要恢复数据库,那么如果站点关闭 10 个小时,那将是非常糟糕的......

标签: mysqlbackup

解决方案


推荐阅读