从 MySQL docker 容器导出数据

Exporting data from MySQL docker container

我使用的是官方 MySQL docker 图像,我很难从实例中正确导出数据。我 运行 我的出口是这样的:

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 客户端的这个警告吗?

要消除此确切警告,您可以在 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

我意识到这是一个老问题,但对于那些偶然发现它的人,现在我整理了一个 post 关于从 mysql docker 容器导出和导入的问题:https://medium.com/@tomsowerby/mysql-backup-and-restore-in-docker-fcc07137c757 它涵盖了 "Using a password on the command line interface..." 警告以及如何绕过它。

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

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

以下是我如何解决这个问题,将 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

记得用你自己的数据替换上面的CONSTANTS。

运行 在终端上执行命令

docker exec CONTAINER_id /usr/bin/mysqldump -uusername --password=yourpassword databasename> backup.sql

替换

  1. CONTAINER_id。用户名,密码

具体到您的配置。

获取容器ID:

docker container ls

我总是在我的存储库根目录中创建 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