从 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
替换
- 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
我使用的是官方 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
替换
- 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