实验设备:
两台ECS服务器
系统:centos8-stream
主节点直接在一台服务器运行,mysql版本8.0.26
备节点一台服务器中使用docker运行,mysql镜像版本mysql:8.0-oracle
在主节点修改/etc/my.cnf配置文件
[mysqld]
# 服务器绑定ip,可以省略
# bind-address = 172.16.0.100
# 节点id,是唯一的,不能重复
server-id = 1
# 日志
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
# 要同步的数据库,可以写多行,同步多个数据库
binlog_do_db = DB_NAME
# 不同步的数据库
# binlog_ignore_db = DB_NAME
# binlog的格式,row具有statement和mixed不具备的优势
binlog_format = row
sync_binlog = 1
# 和sync_binlog 组成双1配置保证数据的完整性
innodb_flush_log_at_trx_commit = 1
重启主节点mysql服务器
systemctl restart mysqld
登入主节点mysql服务器创建同步用的账户和查询二进制日志和偏移量值
# 登录mysql服务器
mysql -uroot -p
# 创建账号,这里的ip是备节点的ip
CREATE USER 'slave1'@'172.16.0.100' IDENTIFIED BY '123456';
# 添加授权
grant replication slave on *.* to 'slave1'@'172.16.0.100';
# 查询主节点的日志和偏移量值
show master status;
# 关闭自动提交事务
set autocommit=0;
登录备节点的docker容器,修改/etc/my.cnf
创建mysql-server容器
docker run --name 容器名称 -e MYSQL_ROOT_PASSWORD=数据库root密码 -p 3306:3306 mysql:8-oracle
# 登入docker服务
docker exec -it 容器ID /bin/bash
# 修改my.cnf文件,备节点只需添加server-id即可,由于容器内没有编辑器,使用sed命令修改,主节点是1,备节点用2
sed -i '5a server-id=2' /etc/my.cnf
[mysqld]
# 节点id,是唯一的,不能重复
server-id = 2
重启备节点的mysql服务器
# 由于是在容器内,只能通过重启容器的方式来重启mysql服务器,使用exit退出容器
docker restart 容器id
登入容器的mysql-server
# 配置备节点的信息,在mysql-cli执行以下语句
CHANGE MASTER TO
MASTER_HOST='主节点ip',
MASTER_USER='slave1',
MASTER_PASSWORD='123456',
# 主节点查询到的file的值
MASTER_LOG_FILE='mysql-bin.000003',
# 在主节点查询到position 值
MASTER_LOG_POS=154;
启动slave线程
# 启动slave线程
start slave;
# 如果要更该配置节点信息,需要先停止slave线程
stop slave;
检查主节点状态
# 在mysql-cli执行以下语句,command的值为Binlog Dump即为正常
show processlist;
检查备节点状态,Slave_IO_Running 和 Slave_SQL_Running 两个值为YES即为正常
# 在mysql-cli执行以下语句
show slave status;