从MySQL Docker容器导出数据

lf5gs5x2  于 2023-02-28  发布在  Mysql
关注(0)|答案(6)|浏览(120)

我使用的是正式的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客户机的此警告吗?

um6iljoc

um6iljoc1#

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

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

5cnsuln72#

我知道这是一个老问题,但对于那些偶然发现它,现在我把一个关于从mysql docker容器导出和导入的帖子放在一起:https://medium.com/@tomsowerby/mysql-backup-and-restore-in-docker-fcc07137c757它涵盖了“在命令行界面上使用密码...”警告以及如何绕过它。

euoag5mw

euoag5mw3#

在终端上运行以下命令

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

更换

  1. CONTAINER_id.用户名,您的密码
    与特定于您的配置。

获取容器ID:

docker container ls
szqfcxe2

szqfcxe24#

要消除此警告,您可以在MYSQL_PWD环境变量中传递password或使用其他连接方法-请参见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
snz8szmq

snz8szmq5#

下面是我如何解决这个问题,将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
记得用你自己的数据替换上面的常量。

im9ewurl

im9ewurl6#

我总是在我的repo根目录下创建bash“工具”,用它可以重复常见的任务,比如数据库转储,使用bash,您还可以加载.env文件,这样您的凭据就不在repo的文件中,而只是在.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

相关问题