Docker 构建 Mysql
mysql单机
拉取镜像
在Docker Hub找到你想要下载的版本,例如我要下载mysql8最新版
docker pull mysql:8
创建配置文件
- 创建配置文件夹
mkdir -p /usr/local/mysql/conf
- 编辑
vi /usr/local/mysql/conf/default.cnf
- 填入下列内容
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
# 设置mysql服务端默认字符集
character-set-server=utf8mb4
# 数据库字符集排序规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
# 开启通用查询日志
general_log=ON
# 通用查询日志存储位置
general_log_file=/var/log/mysql/general.log
# 开启慢查询日志
slow_query_log=ON
# 慢查询日志的阈值(单位是秒),超出此设定值的 SQL 都会被记录
long_query_time=10
# 慢查询日志存储位置
slow_query_log_file=/var/log/mysql/slow_query.log
创建容器
docker run \
-p 3306:3306 \
--restart=always \
--name=mysql \
-v /usr/local/mysql/logs:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
--network=my-network \
--network-alias=mysql-alias \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
- name:创建后的容器名称
- MYSQL_ROOT_PASSWORD:root用户密码
- logs:挂载日志路径
- conf:挂载配置路径
- data:挂载数据路径,如果容器删掉,还能再次挂载数据
- network:非必须,要加入的网络
- network-alias:被必须,在网络中的别名
- TZ:时区
测试连接

mysql集群(一主一从)
创建主节点
拉取镜像
docker pull mysql:8
创建配置文件
- 创建配置文件目录
mkdir -p /usr/local/mysql-master/conf
- 编辑
vi /usr/local/mysql-master/conf/master.cnf
- 填入下列内容
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
# 设置mysql服务端默认字符集
character-set-server=utf8mb4
# 数据库字符集排序规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
# 开启通用查询日志
general_log=ON
# 通用查询日志存储位置
general_log_file=/var/log/mysql/general.log
# 开启慢查询日志
slow_query_log=ON
# 慢查询日志的阈值(单位是秒),超出此设定值的 SQL 都会被记录
long_query_time=10
# 慢查询日志存储位置
slow_query_log_file=/var/log/mysql/slow_query.log
# 同一局域网内的server-id必须具有唯一性
server-id=101
# 指定同步哪些数据库
binlog-do-db=venus
# 禁止同步哪些数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 开启二进制日志功能,并设置日志文件名,文件名可以随便取名(关键)
log-bin=mysql-bin
# 设置binlog日志格式,有row(默认)、statement、mixed
binlog_format=statement
# 设置每隔多少次事务提交操作才会将这些操作写入二进制日志文件
sync_binlog=1
# 默认使用'mysql_native_password'插件认证
default_authentication_plugin=mysql_native_password
创建容器
docker run \
-p 3301:3306 \
--restart=always \
--name=mysql-master \
-v /usr/local/mysql-master/data:/var/lib/mysql \
-v /usr/local/mysql-master/logs:/var/log/mysql \
-v /usr/local/mysql-master/conf:/etc/mysql/conf.d \
--network=my-network \
--network-alias=mysql-master-alias \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
- name:创建后的容器名称
- MYSQL_ROOT_PASSWORD:root用户密码
- logs:挂载日志路径
- conf:挂载配置路径
- data:挂载数据路径,如果容器删掉,还能再次挂载数据
- network:非必须,要加入的网络
- network-alias:被必须,在网络中的别名
- TZ:时区
准备账号
在主节点上创建用来同步数据的账号,需要授予replication slave和replication client权限
create user 'master'@'%' identified by '123456';
grant replication slave, replication client on *.* to 'master'@'%';
查看主节点状态
记住此处的 File 和 Position ,待会要用
show master status;

创建从节点
创建配置文件
- 创建配置文件目录
mkdir -p /usr/local/mysql-slave/conf
- 编辑
vi /usr/local/mysql-slave/conf/slave.cnf
- 填入下列内容
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
# 设置mysql服务端默认字符集
character-set-server=utf8mb4
# 数据库字符集排序规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
# 开启通用查询日志
general_log=ON
# 通用查询日志存储位置
general_log_file=/var/log/mysql/general.log
# 开启慢查询日志
slow_query_log=ON
# 慢查询日志的阈值(单位是秒),超出此设定值的 SQL 都会被记录
long_query_time=10
# 慢查询日志存储位置
slow_query_log_file=/var/log/mysql/slow_query.log
# 同一局域网内的server-id必须具有唯一性
server-id=102
# 开启二进制日志功能,以备slave作为其它slave的master时使用
#log-bin=mysql-slave-bin
# 指定中继日志
relay-log=slave1-relay-bin
# 默认使用'mysql_native_password'插件认证
default_authentication_plugin=mysql_native_password
创建容器
docker run \
-p 3302:3306 \
--restart=always \
--name=mysql-slave \
-v /usr/local/mysql-slave/data:/var/lib/mysql \
-v /usr/local/mysql-slave/logs:/var/log/mysql \
-v /usr/local/mysql-slave/conf:/etc/mysql/conf.d \
--network=my-network \
--network-alias=mysql-slave-alias \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
设置同步信息
- 关闭同步
stop slave;
- 设置同步信息
change master to master_host='172.24.102.95', master_port=3301, master_user='master', master_password='123456', master_log_file='mysql-bin.000006', master_log_pos=2758, master_connect_retry=30;
- master_host: 主库地址
- master_port: 主库端口
- master_user: 用来同步数据的账号,前面已经创建好了
- master_password: 同步数据账号的密码
- master_log_file: 指定slave从哪个日志文件开始同步数据,即上文提到的 File 值
- master_log_pos: 指定从日志文件的哪个位置开始同步数据,即上文提到的 Position 值
- master_connect_retry: 如果连接失败,重试的时间间隔(单位:秒),默认是60秒
- 开启同步
start slave;
查看从节点状态
当Slave_IO_Running和Slave_SQL_Running都是Yes时,主从搭建成功了
show slave status;


浙公网安备 33010602011771号