Data.sqlがある場合、どのようにしてデータベースをmysql docker containerにインポートできますか?データベースデータをインポートする方法混乱した世界では、これは複雑さの層を追加します。いくつかの方法をお願いします。
ここで私のdocker-compose.yml:
nginx:
build: ./nginx/
container_name: nginx-container
ports:
- 80:80
links:
- php
volumes_from:
- app-data
php:
build: ./php/
container_name: php-container
expose:
- 9000
links:
- mysql
volumes_from:
- app-data
app-data:
image: php:7.0-fpm
container_name: app-data-container
volumes:
- ./www/html/:/var/www/html/
command: "true"
mysql:
image: mysql:latest
container_name: mysql-container
ports:
- 3306:3306
volumes_from:
- mysql-data
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: name_db
MYSQL_USER: user
MYSQL_PASSWORD: password
mysql-data:
image: mysql:latest
container_name: mysql-data-container
volumes:
- /var/lib/mysql
command: "true"
私はこれを最新のmysqlやmysql:5.7で動作させることはできないようです。だから私は代わりにmariaDBを使います。これが私のdocker-compose.yaml
コードです。
version: '3'
services:
mysql:
image: mariadb:10.3
container_name: mariadb
volumes:
- container-volume:/var/lib/mysql
- ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: name_db
ports:
- "3306:3306"
volumes:
container-volume:
後でデータベースをインポートできます。
docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
ボリュームマウントを利用してsql-dumpを/docker-entrypoint-initdb.d/yourdump.sql
の下にマウントします。
mysql:
image: mysql:latest
container_name: mysql-container
ports:
- 3306:3306
volumes:
- ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: name_db
MYSQL_USER: user
MYSQL_PASSWORD: password
これはコンテナの起動中にsql-dumpのインポートを引き起こします。「新しいインスタンスの初期化」の下の https://hub.docker.com/_/mysql/ を参照してください。
もしあなたがボリュームをマウントしたくないが、あなたのローカルマシンからファイルをダンプしたいのであれば、もう一つのオプションはcat yourdump.sql
をパイプすることです。そのようです:
cat dump.sql | docker exec -i mysql-container mysql -uuser -ppassword db_name
参照してください: https://Gist.github.com/spalladino/6d981f7b33f6e0afe6bb
docker-composeを使ってインポートする
cat dump.sql | docker-compose exec -T <mysql_container> mysql -u <db-username> -p<db-password> <db-name>
共有ディレクトリ(-v volume)を設定してコンテナを実行し、そのコンテナでbashを実行することができます。その後、コンテナの中から対話的にmysql-clientを使って.sqlファイルを実行することができます。 obs:/ my-Host-dir/shared-dirは、ホストシステム内の.sqlの場所です。
docker run --detach --name=test-mysql -p Host-port:container-port --env="MYSQL_ROOT_PASSWORD=my-root-pswd" -v /my-Host-dir/shared-dir:/container-dir mysql:latest
docker exec -it test-mysql bash
コンテナの内側.
mysql -p < /container-dir/file.sql
カスタムパラメータ:
これが助けになれば幸いです。