【发布时间】:2012-03-19 12:32:29
【问题描述】:
有时我需要将 MySQL 数据库 (db1) 复制到另一个数据库 (db2)。我发现这个命令简洁有效:
mysqldump --opt db1 | mysql db2
它工作正常,但现在它因以下错误而中断:
ERROR 1064 (42000) at line 1586: 你的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册 在'mysqldump:无法执行'SHOW TRIGGERS附近使用正确的语法 LIKE 'some_table_name'': MySQL server ' 在第 1 行
首先想到的是数据库太大(未压缩的 SQL 转储大于 1G,准确地说是 1090526011 字节),无法像这样进行管道传输。当我做mysqldump > file 然后mysql < file 它工作正常,没有错误。错误信息中提到的表(some_table_name)不大也不特殊。
第二个想法来自错误消息可能被截断的印象,并且它说
“...MySQL 服务器已消失”
对此的快速研究表明,可能已达到打开文件的最大数量(对于 MySQL 和/或系统)。所以我尝试将--skip-lock-table 添加到mysqldump 并提高open-files-limit,但没有运气,同样的错误。
明显的解决方案是转储然后导入(因为它工作正常),但管道对我来说似乎更好更干净(如果我错了,请告诉我),而且我很想知道是什么原因造成的问题。我是否达到了影响命令管道的某些限制?
我一直在托管服务器上执行此操作,在 Linux 和我的开发机器上运行 MySQL 5.1.60 - Linux 上的 MySQL 5.1.58。后者给出了一些不同的错误:
mysqldump: 错误 2013: 在查询期间丢失与 MySQL 服务器的连接 在第 7197 行倾倒表
other_table_name时
更新:通过单独转储和导入解决问题,无需管道。尽管我觉得它并不能真正回答我的问题,但 ssmusoke 的建议最中肯,最终得到了接受的答案。
【问题讨论】:
标签: mysql linux pipe mysqldump