Importar datos.contenedor de Docker sql MySQL


Si tengo un dato.sql, ¿cómo puedo importar la base de datos a mi contenedor de docker mysql? Cómo puedo importar datos de la base de datos. En un mundo dockerizado, esto añade una capa de complejidad. algunos métodos, por favor.

Aquí mi 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"
Author: Jay Blanchard, 2017-05-10

4 answers

Parece que no puedo hacer que esto funcione con la última versión de mysql o mysql:5.7. Así que uso MariaDB en su lugar. Aquí está mi código 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:
 14
Author: Hana Alaydrus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-25 11:06:03

Puede importar la base de datos después:

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

 59
Author: Lauri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-10 08:22:49

Monte su volcado bajo /docker-entrypoint-initdb.d/yourdump.sql usando un montaje de volumen

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

Esto importará el volcado al inicio del contenedor, consulte https://hub.docker.com/_/mysql/ en "Inicializar una nueva instancia"

Pista adicional: Deje de usar docker-compose.yml v1-es horrible:)

 30
Author: Eugen Mayer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-22 04:52:16

Otra opción si no desea montar un volumen, pero desea volcar un archivo desde su máquina local, es canalizar cat yourdump.sql. Así:

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

Véase: https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb

 4
Author: Lon Ilesanmi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-31 22:35:00