Docker部署Mysql
# Docker部署Mysql
# 命令
docker run --name mysql8 \
--restart=always \
--privileged=true \
-v /etc/localtime:/etc/localtime \
-v /opt/dockerAllHere/mysql/log:/var/log/mysql \
-v /opt/dockerAllHere/mysql/data:/var/lib/mysql \
-v /opt/dockerAllHere/mysql/conf:/etc/mysql/conf.d \
-v /opt/dockerAllHere/home:/home \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=QWER1234qwer \
-d mysql:8.0.33 \
--init-connect="SET collation_connection=utf8mb4_0900_ai_ci" \
--init-connect="SET NAMES utf8mb4" \
--skip-character-set-client-handshake \
--lower_case_table_names=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 命令解释
# --privileged=true
使用该参数,container内的root拥有真正的root权限。 否则,container内的root只是外部的一个普通用户权限。
# -e TZ=Asia/Shanghai
设置容器的时区,防止出现内部和外部时间不一致的问题
# --init-connect="SET collation_connection=utf8mb4_0900_ai_ci"
Client初始化连接Server时,将 collation_connection 排序规则的值设置为 utf8mb4_0900_ai_ci 并作为标志传递给 mysqld 。
# --init-connect="SET NAMES utf8mb4"
Client初始化连接Server时,设置系统变量 NAMES 的值为 utf8mb4 并作为标志传递给 mysqld
# --skip-character-set-client-handshake
用来忽略客户端信息并使用默认服务器字符
# --lower_case_table_names=1
lower_case_table_names 是mysql设置大小写是否敏感的一个参数
lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的
# 建立用户远程链接
docker exec -it mysql8 /bin/bash
mysql -u root -pQWER1234qwer
create database test_db;
create user 'test'@'%' identified by 'Test@123';
grant all privileges on *.* to test@'%';
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 备份与恢复数据
- 创建存放备份文件的文件夹
mkdir -p /opt/mysqlbackup
1
- 备份所有数据库
docker exec mysql8 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /opt/mysqlbackup/all.sql
1
- 备份单个数据库
docker exec mysql8 sh -c 'exec mysqldump --databases test_db test_db1 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /opt/mysqlbackup/twoDB.sql
1
- 还原
docker exec -i mysql8 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /opt/mysqlbackup/上面生成的SQL文件
1
编辑 (opens new window)
上次更新: 2023/05/30, 06:56:38