前提・実現したいこと
現在、EC2上でDB(MySQL)を構築してDBサーバとして運用しています。
これから管理やパフォーマンスをよくするためにEC2からRDSにDBを移行しようと考えていました。
環境としては下のような状態です。
・アプリサーバ:EC2インスタンス
・DBサーバEC2インスタンス
・バッチ処理が定期的に走ってDBにアクセスしにいっています
発生している問題・エラーメッセージ
EC2からRDSへDBを移行するにあたり、
EC2上のDBをdumpしました。
dumpはcronで時間指定して実行するようにしました。
その結果、dumpできませんでした。
ただdumpに失敗しただけならまだしも最も困ったのが、
このときに使用したmysqldumpコマンドのオプションによってDBがロック(?)されたようで、
走っていた特定のバッチ処理とバッティングしてしまいました。
この処理が重く、あとに続く処理も終わらない状態になってプロセスが滞留してしまい、
webサーバからDBにアクセスができなくなって画面が真っ白(503)になってしまいました。
このとき使用したdumpコマンドが下のようになります。
このコマンドのオプションはAWSのDB移行するための公式ドキュメントに記載されているものです。
(参考)
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html
mysqldump --databases [mysql、information_schema、performance_schema以外の全データベース名] --single-transaction --add-drop-table --add-locks --quick --create-options --max_allowed_packet=1G --master-data=2 --order-by-primary -u[ユーザー名] -p[パスワード]
公式ドキュメントに記載されているオプションとしては、
以下の3つです。
--single-transaction --master-data=2 --order-by-primary
上記3つ以外で追加したオプションはいずれも問題ないと思っているのですが...
実際、テスト環境では問題ありませんでしたし、
本番環境でも2回実行したのですが、
そのときはうまくいきました。
そのときは思いバッチ処理が走っていなかったようですが。
なぜ、このdumpが失敗してなおかつDBがロックされてしまったのでしょうか?
そもそもこれはロックされたということも確証を得てません。
一体何が原因でこれが起きたのでしょうか?
・コマンドオプションの組み合わせ?
・DBの容量が大きすぎたのが関係している?
ご教授頂けますと幸いです。
よろしくお願いいたします。
補足情報
・MySQL:5.6.48
・DBの容量は200GBあります(バイナリとかも全部入っているようで、ツッコミどころがありますが)
・dumpにかかる予定時間は16時間となっていました。
あなたの回答
tips
プレビュー