mysql - 将大型 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 个小时,那将是非常糟糕的......
解决方案
推荐阅读
- tensorflow - Tensorflow 2.0 中 TFRecordCompressionType.GZIP 接收错误
- android - Android Kotlin 回收站视图中点击事件的新意图
- flutter - 列表在末尾重复/类似轮播
- java - 如何在 Eclipse 中从 github 运行应用程序
- eclipse - Eclipse RCP 动态 MenuContribution 使用 CoreExpression 隐藏和取消隐藏
- python - 从 href python '#' 中删除元素
- javascript - 切片数组并从 RTL / LTR 转换
- java - 解释为什么这可以找到两个等于小数点后三位的数字
- java - 如何在片段中添加另一个屏幕?
- php - 有没有办法在 MySQLi 中获取多行