Memo

メモ > サーバ > 各論: Docker > データベースのバックアップ

■データベースのバックアップ
■結論 以下のようにして、docker container cp を挟めばバックアップとリストアができた 以下でバックアップ
$ docker container exec -it mysql bash # mysqldump -u dbuser -p eccubedb --default-character-set=binary --no-tablespaces > /tmp/eccubedb_20210804.sql # exit $ docker container cp mysql:/tmp/eccubedb_20210804.sql eccubedb_20210804.sql
以下でリストア
$ docker container cp eccubedb_20210804.sql mysql:/tmp/eccubedb_20210804.sql $ docker container exec -it mysql bash $ mysql -u dbuser -p eccubedb --default-character-set=binary < /tmp/eccubedb_20210804.sql
ただしmysqlコンテナの /tmp の内容は、コンテナの終了によって消えてしまうので注意 ■試行錯誤メモ 一例だが以下のようにすれば、MySQLのコンテナに接続できる
$ docker container exec -it code_mysql_1 bash $ mysql -u dbuser -p secret
ただし以下のように別コンテナ内から接続しようとしても、mysqlコマンドが存在しない可能性がある
$ docker container exec -it code_ec-cube_1 bash # mysql -u dbuser -p bash: mysql: command not found # mysql -h mysql -u dbuser -p bash: mysql: command not found
このような場合、mysqlコマンドの追加インストールなしにデータベースのバックアップとリストアができるか ローカルから直接Dockerのデータベースを操作する - Qiita https://qiita.com/mgmgmogumi/items/119e1e26fe44955c705e 以下でコンテナ外から、直接データベースに接続できた
$ docker container exec -it code_mysql_1 mysql -u dbuser -p secret $ docker container exec -it code_mysql_1 mysqldump -u dbuser -p eccubedb --default-character-set=binary > /home/refirio/docker/myshop/code/eccubedb_20210804.sql secret
ただしこの方法だと、エクスポートはできるがインポートができない 以下の方法は一応インポートできそうだが、今回は「-bash: /usr/bin/docker: Argument list too long」となった catで展開するので、データサイズが大きすぎるのだと思われる
$ docker container exec -it code_mysql_1 mysql -u dbuser -p eccubedb -e"$(cat eccubedb_20210804.sql)"
対策として、docker container cp でSQLファイルをコンテナ内部と外部でやりとりする方法がある 具体的な方法は、前述の「結論」を参照 dockerのmysqlにダンプファイルをインポートする | かぴトラベル https://kapi-travel.com/programing/docker%E3%81%AEmysql%E3%81%AB%E3%83%80%E3%83%B3%E3%83%97%E3%83%95... Dockerでホストとコンテナ間でのファイルコピー - Qiita https://qiita.com/gologo13/items/7e4e404af80377b48fd5

Advertisement