web-dev-qa-db-ja.com

data.sql MySQL Dockerコンテナのインポ​​ート

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"
55
Israel Morales

私はこれを最新の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:
26
Hana Alaydrus

後でデータベースをインポートできます。

docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql

97
Lauri

ボリュームマウントを利用して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/ を参照してください。

53
Eugen Mayer

もしあなたがボリュームをマウントしたくないが、あなたのローカルマシンからファイルをダンプしたいのであれば、もう一つのオプションはcat yourdump.sqlをパイプすることです。そのようです:

cat dump.sql | docker exec -i mysql-container mysql -uuser -ppassword db_name

参照してください: https://Gist.github.com/spalladino/6d981f7b33f6e0afe6bb

20

docker-composeを使ってインポートする

cat dump.sql | docker-compose exec -T <mysql_container> mysql -u <db-username> -p<db-password> <db-name>
6
Slipstream

共有ディレクトリ(-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 

カスタムパラメータ:

  • test-mysql(コンテナ名)
  • ホストポートおよびコンテナポート
  • my-root-pswd(MySQLのrootパスワード)
  • / my-Host-dir/shared-dirおよび/ container-dir(コンテナにマウントされるホストディレクトリ、および共有ディレクトリのコンテナの場所)

これが助けになれば幸いです。

0
Caleb Santos