将数据从MySQL Docker容器中导出

25
我使用官方的MySQL docker镜像,但在导出数据时遇到了错误。我按照以下方式运行导出命令:

I use the official MySQL docker image, and I am having difficulty exporting data from the instance without errors. I run my export like this:


docker run -it --link containername:mysql --rm mysql sh -c 
    'exec mysqldump 
        -h"$MYSQL_PORT_3306_TCP_ADDR" 
        -P"$MYSQL_PORT_3306_TCP_PORT" -uroot 
        -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" 
     dbname'
| gz > output.sql.gz

但是,这会导致警告:

"mysqldump: [Warning] Using a password on the command line interface can be insecure."
作为输出文件的第一行。很明显,这会对消费数据的任何其他 MySQL 进程造成问题。 有没有办法从 mysqldump 客户端抑制此警告?
6个回答

70

回答有点晚了,但这个命令救了我的一天。

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

3
美观、干净且仅使用Docker - tomrlh
2
对我来说,这个方法可行:docker exec CONTAINER mysqldump -u root --password=root DATABASE > backup.sql - bvk

11

7
在终端上运行以下命令。
docker exec CONTAINER_id /usr/bin/mysqldump -uusername --password=yourpassword databasename> backup.sql

替换

  1. CONTAINER_id. 用户名,你的密码

使用特定于您配置的内容进行替换。

获取容器ID:

docker container ls

4

以下是我如何将mysql数据库转储到文件中的解决方案。

我创建了一个名为dump-db.sh的文件,内容如下:

# dump db from docker container
(docker exec -i CONTAINER_ID mysqldump -u DB_USER -pDB_PASS DB_NAME) > FILENAME.sql
  • 要获取CONTAINER_ID列表,请使用以下命令:docker container list

将运行权限添加到脚本中:

chmod o+x dump-db.sh

然后运行它:

./dump-db.sh

记得用自己的数据替换上面的常量。


3
为了消除这个警告,您可以在 MYSQL_PWD 环境变量中传递密码或使用其他连接方法 - 请参见 http://dev.mysql.com/doc/refman/5.7/en/password-security-user.html
docker run -it --link containername:mysql --rm mysql sh -c 
    'export MYSQL_PWD="$MYSQL_ENV_MYSQL_ROOT_PASSWORD"; exec mysqldump 
        -h"$MYSQL_PORT_3306_TCP_ADDR" 
        -P"$MYSQL_PORT_3306_TCP_PORT" -uroot 
     dbname'
| gz > output.sql.gz

使用官方的Docker镜像如何实现这一点? - DMCoding
1
@DanielJames 这与 Docker 本身关系不大——你仍然在处理 shell 脚本,更新了带有示例命令的答案。此外,你可以使用 Docker 的 -e 标志从外部传递环境变量。 - Vasfed

0
我总是在我的仓库根目录下创建bash "工具",通过这些工具我可以重复执行一些常见任务,比如数据库转储。使用bash,你还可以加载你的.env文件,这样你的凭证就不会保存在仓库中的文件中,而是保存在你的.env文件中。
#!/bin/bash

# load .env
set -o allexport; . ./.env; set +o allexport

# setup
TIMESTAMP=$(date +%Y-%m-%d__%H.%M)
BACKUP_DIR="dockerfiles/db"
CONTAINER_NAME="cp-db"

# dump
docker exec $CONTAINER_NAME /usr/bin/mysqldump -u$DB_USER --password=$DB_PASSWORD $DB_NAME> $BACKUP_DIR/dump__$TIMESTAMP.sql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接