MySQLデータベース(db1)を別のデータベース(db2)にコピーする必要があることがあります。私は、このコマンドは簡潔かつ効果的であることが分かっ:mysqldumpをmysqlにパイプする
mysqldump --opt db1 | mysql db2
それは罰金働いていたが、今では、次のエラーで破る:頭に浮かぶ
ERROR 1064 (42000) at line 1586: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqldump: Couldn't execute 'SHOW TRIGGERS LIKE 'some_table_name'': MySQL server ' at line 1
まず最初は、データベースが大きすぎるということです(圧縮されていないSQLダンプは> 1G、現時点では1090526011バイトです。 mysqldump > file
を実行してからmysql < file
を実行すると、エラーは発生しません。エラーメッセージ(some_table_name)に記載されているテーブルは大きくないか、特別ではありません。
第二のアイデアは、エラーメッセージが切り捨てられる可能性があることを印象から来て、それはその上
"...MySQL server has gone away"
クイック研究は、それが(MySQLおよび/またはシステムのために)開いているファイルの最大数であることも可能だと言うと言うこと到達した。だから--skip-lock-table
をmysqldump
に追加し、open-files-limit
を上げようとしましたが、運と同じエラーはありません。
明白な解決策はダンプしてからインポートすることです(正常に動作します)が、パイピングはより良くなり、私にはよりきれいになります(私が間違っているかどうかを教えてください)この問題。私はコマンド配管に影響するいくつかの限界にぶつかったのですか?
私は、Linux上でMySQL 5.1.60を実行しているサーバーをホストしていて、Linux上の私の開発マシンであるMySQL 5.1.58を実行しています。後者は少し異なるエラーを与える:
はmysqldump: Error 2013: Lost connection to MySQL server during query when dumping table
other_table_name
at row: 7197
UPDATE:問題は、パイプずに、別々のダンプおよびインポートを行うことによって解決されます。私の質問には本当に答えられないと感じていますが、ssmusokeの提案が最も受け入れられています。
私は負荷が接続が低下するほど高いとは思わない。たとえそれがあっても、同じ場所(同じテーブル)でいつも失敗するのは奇妙ですね。とにかく、このプロセスはスクリプト化されましたが、失敗に終わったときには、それを取り出して手で分析しなければなりませんでした。それにもかかわらず、私はそれがこのように失敗する理由を知りたい。提案ありがとう。 – parserr