MySQL-8.0.24主从环境搭建

docker搭建创建MySQL容器

master主库
1
docker run -d -p 3316:3306 -e MYSQL_ROOT_PASSWORD=password -e TZ=Asia/Shanghai --name mysql-8.0.24-master mysql:8.0.24 --lower-case-table-names=1 --default-authentication-plugin=mysql_native_password
slave-1从库
1
docker run -d -p 3318:3306 -e MYSQL_ROOT_PASSWORD=password -e TZ=Asia/Shanghai --name mysql-8.0.24-slave-1 mysql:8.0.24 --lower-case-table-names=1 --default-authentication-plugin=mysql_native_password
slave-2从库
1
docker run -d -p 3320:3306 -e MYSQL_ROOT_PASSWORD=password -e TZ=Asia/Shanghai --name mysql-8.0.24-slave-2 mysql:8.0.24 --lower-case-table-names=1 --default-authentication-plugin=mysql_native_password

主库操作

【/etc/mysql/conf.d/mysql.cnf】修改主库配置文件,修改后需要重启容器才会生效
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[mysql]

# 地址【/etc/mysql/conf.d/mysql.cnf】
[mysqld]
# 服务id,默认值为1
server-id=1

# 设置日志格式,默认值为ROW
binlog_format=STATEMENT

# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
# binlog-do-db=test
# 设置不需要复制的数据库
# bin-log-ignore-db=mysql
# bin-log-ignore-db=test1
主库创建只有远程复制权限的账户slave,密码为password
1
2
3
4
5
6
7
8
9
10
11
-- 创建账户
create user 'slave'@'%';

-- 设置密码
alter user 'slave'@'%' identified with mysql_native_password by 'password';

-- 授予复制权限
grant replication slave on *.* to 'slave'@'%';

--刷新权限
flush privileges;
查看主机binlog,记住这里的【File】和【Position】字段,后面要用
1
SHOW MASTER STATUS;

从库操作

修改主库配置文件,修改后需要重启容器才会生效
1
2
3
4
5
6
7
8
9
10
11
12
[mysql]

# 地址【/etc/mysql/conf.d/mysql.cnf】
[mysqld]
# 服务id,默认值为1,这里的id不能重复
server-id=2

# 中继日志名,默认为xxxxxxx-relay-bin
# relay-log=relay-bin

relay_log=/var/lib/mysql/relay-bin
relay_log_info_file=/var/lib/mysql/relay-log.info
关联主从数据库
1
2
3
change master to master_host='192.168.2.8',
master_user='slave', master_password='password', master_port=3316,
master_log_file='binlog.000002',master_log_pos=1052
  • 【master_host】主库的IP地址
  • 【master_user】主库创建的用户
  • 【master_password】主库创建的用户的密码
  • 【master_port】主库的端口号
  • 【master_log_file】查看主机binlog时的【File】字段的值
  • 【master_log_pos】查看主机binlog时的【Position】字段的值
主从同步
1
2
3
4
5
6
7
8
-- 开启主从同步
START SLAVE;

-- 停止主从同步
STOP SLAVE;

-- 查看主从同步状态
SHOW SLAVE STATUS;

主从库都有的操作

【/etc/mysql/conf.d/docker.cnf】修改配置文件,修改后需要重启容器才生效
1
2
3
4
5
# 位置【/etc/mysql/conf.d/docker.cnf】
[mysqld]
skip-host-cache
skip-name-resolve
default-time-zone=+08:00

评论