Skip to content

Instantly share code, notes, and snippets.

@MarshalW
Last active December 13, 2023 10:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MarshalW/135397079cbd7f5f31ba42ca82d4471b to your computer and use it in GitHub Desktop.
Save MarshalW/135397079cbd7f5f31ba42ca82d4471b to your computer and use it in GitHub Desktop.
Docker 使用 MySQL FAQ

Docker 使用 MySQL FAQ

连接客户端

##### 使用 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

mysql 命令

# 查看是否支持表名大小写
# 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
    
    

mysqldump Warning 密码问题的处理

在 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment