如何从主机恢复MySQL转储到Docker容器

我确定这是一个重复的话题,但我根本无法完成:我喜欢在运行时将我的数据库转储恢复到MySQL容器,而无需修改docker-compose.yml文件。

Dockerfile

FROM php:5.4.45-apache RUN apt-get update RUN docker-php-ext-install mysql mysqli 

泊坞窗,compose.yml

 version: '2' services: php_service: container_name: my_php # Use Dockerfile in this dir to build the image build: . # Stop containers always after exiting. restart: always ports: # 'localhost' does not works from the host, but the IP of docker itself # (192.168.99.100 for example - shown on the top of the console) - "80:80" - "443:443" environment: # Pass variables - API_TOKEN=xxxx volumes: # The current directory will be mounted to '/var/www/html' # WORKS ONLY IN USER'S DIR ON WINDOWS (~/Downloads for example) - .:/var/www/html # See https://hub.docker.com/_/mysql/ for additional information. # To open up console, run `docker exec -it my_mysql bash`. # To restore a dump `docker exec -i my_mysql /usr/bin/mysql -u root # --password=test_pass DATABASE < DUMP.sql` should work, but it never did. mysql_service: container_name: my_mysql # Use an existing image image: mysql:5.6 restart: always ports: # Let it accessible for other apps (mysql on host, IDE, etc.) - "3306:3306" environment: MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this MYSQL_USER: 'test' MYSQL_PASS: 'pass' volumes: # Named volumes (my-datavolume) has to be listed in the "volumes" # section - I don't know how it works or what is it doing at all... # (-_-') - my-datavolume:/var/lib/mysql volumes: my-datavolume: 

重现步骤:

  • 在Windows 7主机上启动Docker Toolbox
  • docker-compose up
  • 打开一个新的Docker Toolboxterminal
  • docker exec my_msql /usr/bin/mysql -u root --password=test_pass -e 'CREATE DATABASE testdb;'
  • docker exec -i my_mysql /usr/bin/mysql -u root --password=test_pass testdb < dump_on_host.sql
  • docker exec -it my_mysql /usr/bin/mysql -u root --password=test_pass testdb
  • mysql> SHOW TABLES;

数据库是空的。 它似乎什么都不做,因为terminal反应太快。 我通过在主机上安装MySQL来试用转储,它可以被恢复。

尝试下面的命令对我来说工作正常。

从docker主机运行它。

备用

docker exec CONTAINER / usr / bin / mysqldump -u root –password = root DATABASE> backup.sql

恢复
cat backup.sql | docker exec -i CONTAINER / usr / bin / mysql -u root –password = root DATABASE

请让我知道如果有任何问题。

您正在使用卷,这意味着在您还原转储后,数据将保留。

您还将端口3306中的数据库公开,因此解决scheme可能是通过客户端连接到数据库。 您可以使用像MySql Workbench这样的graphics客户端连接到mysql,并从那里恢复数据库。

或者如果你已经在你的命令行中安装了mysql

 $ mysql --host=127.0.0.1 --port=3306 -u test -p testdb < dump_on_host.sql