我正在共享主机环境中运行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个小时,那就太糟糕了……