- 私は韓国人として、日本語の勉強とコンピュータの勉強を同時に行うために、ここに文章を書きます
- 翻訳機の助けを借りて書かれた文章なので、誤りがあるかもしれません
紹介
最近、Linuxサーバーに問題が発生し、MySQLデータを復元する必要がありました。幸いにも、Dockerボリュームでデータをバックアップしておいたので、それを基にMySQLコンテナを再構成することができました。この記事では、バックアップしたDockerボリュームを使用してMySQLコンテナを再構成し、データをダンプする簡単な手順を共有したいと思います。
- 写真は事件を再現するために撮った写真です。
状況概要
最近、運用中のLinuxサーバーに問題が発生し、MySQLコンテナが起動しない状況でした。Dockerの問題により、MySQLデータを直接ダンプしたり、正常にバックアップを進めることができない状態でした。そのため、Dockerを実行できる環境にMySQLのDockerボリュームを持ち込みました。
残る作業は、このバックアップされたDockerボリュームを利用してMySQLデータを復元し、安全にダンプファイルとして保存することでした。
初めての試み
次のようにパスに直接取り込んだボリュームをマウントし、コンテナを実行するスクリプトを作成し実行しました。
次のようなエラーが発生しました。 要約すると、 サーバーのlower_case_table_namesの値は「2」に設定されています。これはファイルシステムが大文字と小文字を区別しない場合に使用する値です。 データ辞書のlower_case_table_namesの値は「0」に設定されています。これは大文字と小文字を区別するファイルシステムで使用する値です。 つまり、設定値の不一致が原因で、MySQLコンテナが完全に実行されずに終了してしまいます。
理由は何だろうか。
以前、私はUbuntuのファイルシステム内にDockerデーモンがディレクトリを割り当てて管理しており、その中にMySQLデータが入ったDockerボリュームが位置しています。
DockerのボリュームをMacに持ってきて、直接マウントしようとしました(バインドマウント)。しかし、このボリュームがmacOSのAPFSファイルシステムによって管理されることで、Linuxのext4ファイルシステムとの環境の違いが生じました。この違いにより、MySQLの設定で互換性の問題が発生し、エラーが発生しました。
- 公式ドキュメントにもっと詳しい説明がありますので、参考にしてください!
2回目の試み
解決策として、持ってきたDockerボリュームをDockerが自動で割り当てるdockerエリアにコピーしました。
Dockerエリアでは、Dockerがディレクトリを直接管理するため、ファイルシステム間の違いによる環境問題なくボリュームのデータを活用することができました。こんな風にmysqlダンプができて幸せでした。