■結論
以下のようにして、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