##### 使用 mysql-client
# 交互模式
MYSQL_PWD=password \
mysql -h 10.10.10.10\
-u zhangsan \
-P 3306 \
app
##### docker
# 执行一次命令
docker run -it --rm \
-e 'MYSQL_PWD=password' \
mysql mysql -h10.10.10.10 \
-uzhangsan -P3306 \
-e "show databases;"
# 交互模式
docker run -it --rm \
-e 'MYSQL_PWD=password' \
mysql mysql -h10.10.10.10 \
-uzhangsan -P3306
# 直接访问mysql server容器,dump
docker exec \
-e MYSQL_PWD=password \
my-mysql \
/usr/bin/mysqldump \
-u root \
app > data.sql
# 直接访问mysql server容器,dump - 仅表结构
docker exec \
-e MYSQL_PWD=password \
my-mysql \
/usr/bin/mysqldump \
-u root \
--no-data \
app >structure.sql
# 直接访问mysql server容器,dump - 仅表记录(不建表,不包括忽略的表)
docker exec \
-e MYSQL_PWD=password \
my-mysql \
/usr/bin/mysqldump \
-u root \
--no-create-info \
--ignore-table=app.products \
app >data_basic.sql
# 直接访问mysql server容器,restore
cat data.sql | docker exec -i \
-e MYSQL_PWD=password \
my-mysql \
/usr/bin/mysql \
-u root \
app
使用第三方 mysql client docker image:
docker run -it --rm \
-e 'MYSQL_PWD=password' \
arey/mysql-client \
-uapp \
-h10.10.10.10 \
-P3306 \
app
# 查看是否支持表名大小写
# linux - 0, windows - 1, macOS - 2
show variables like 'lower_case_table_names'
# 备份指定表的时间范围记录,导出为 sql
# 在我测试的条件报错 - 没有锁表的权限
WHERE_CLAUSE="(CreateDate >= '2022-12-08 00:00:00')"
docker run -it --rm \
-e 'MYSQL_PWD=password' \
mysql:8.0.31-debian mysqldump -h10.10.10.10 \
-ureadonly -P3339 \
$db_name $table_name --where="${WHERE_CLAUSE}" >data.sql
在 docker 环境下,这样做会抛错,即使使用环境变量(因为也会转为字符串传递给 mysql)
$ docker exec app-mysql /usr/bin/mysqldump -u root --password=password app >./mysql.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
解决办法(mysql v8.x 以后可能不支持):
$ pw=password
$ docker exec -e MYSQL_PWD=$pw app-mysql /usr/bin/mysqldump -u root app >./mysql.sql