#创作灵感# 

整理一下近年完成的项目,以虚拟环境为基础,更加简洁明了的梳理成技术手册,无论玫瑰,还是余香都是旅途的风景。

1、环境准备

centos9虚拟机最小化安装2CPU 2G内存 20G空间 host文件配置如下

防火墙可以使用firewall-cmd放行,演示环境中已提前关闭。

master1192.168.189.137
master2192.168.189.138
slave1192.168.189.139
slave2192.168.189.140

mysql8.0安装步骤:

注意此处不可使用安装完后克隆主机,mysql内部有固定id,克隆可能造成后续无法正常部署主从集群!!!可使用ansible或shell的群发功能简化步骤。

1、安装mysql镜像源

安装地址:https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm

2、安装该镜像源

使用yum安装即可

3、安装mysql

yum install -y mysql-community-server

4、启动mysqld进程并修改密码

systemctl start mysqld
grep password /var/log/mysqld.log
#复制刚得到的初始密码,执行下方命令修改mysql.root用户密码为Liumuquan@123
mysqladmin -uroot -p'初始密码' password 'Liumuquan@123'

2、my.cnf文件配置

master1配置

使用vim配置my.cnf文件在文件末尾添加需要设定的参数

log-bin=/var/lib/mysql/binlog
#启动二进制日志并声明所在位置
server-id=1
#在这个集群中该mysql服务器编号为1
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#声明忽略主从运行时复制的库,此处忽略了两个mysql默认库
binlog-do-db=mydb2
#声明开启主从复制的库为mydb2
binlog_format=statement
#设置二进制日志格式(记录方式)为statement,此格式为以sql语句为准记录数据库操作
expire_logs_days=7
#日志有效期设置,自动清除7天前的日志
slave_skip_errors=1062
#主从复制中跳过错位代码是1062的错误,这是一条关于从索引冲突的错误,此选项慎用可能会产生完整性影响
log-slave-updates
#作为从服务器时,有写入操作也更新二进制文件(这个设置方便我们进行双主互为主从设置)
auto-increment-increment=2
#二进制日志记录时,记录编号AT XX中XX部分增长幅度为2,结合下一条设置可以避免AT编号重复
auto-increment-offset=1
#二进制日志记录时,从AT 1 开始记录,本机记录为1、3、5、7...以单数作为编号

重启master1的mysql

master2配置

使用vim配置my.cnf文件在文件末尾添加需要设定的参数

master1与master2配置的不同地方在:server-id 和 auto-increment-offset

log-bin=/var/lib/mysql/binlog
server-id=3
#在这个集群中该mysql服务器编号为3
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-do-db=mydb2
binlog_format=statement
expire_logs_days=7
slave_skip_errors=1062
log-slave-updates
auto-increment-increment=2
auto-increment-offset=2
#二进制日志记录时,从AT 2开始记录,本机记录为2、4、6、8...以单数作为编号

重启master2的mysql

slave1配置

使用vim配置my.cnf文件在文件末尾添加需要设定的参数

server-id=2
#在这个集群中该mysql服务器编号为2
relay-log=mysql-relay
#启动中继日志,从库会读取主库发送过来的二进制日志,并将其写入中继日志文件中,中继日志前缀为mysql-relay

重启slave1的mysql

slave2配置

与slave1只有server-id不同

server-id=4
relay-log=mysql-relay

重启slave2的mysql

注:作为从服务器加入集群应该默认开启中继日志,但稳妥起见此处还是需要声明

3、创建同步账号并授权

在master1与master2上操作

创建主主同步账号repl_user

主从同步账号slave_sync_user

create user 'repl_user'@'%' identified with mysql_native_password by 'Liumuquan@123';
create user 'slave_sync_user'@'%' identified with mysql_native_password by 'Liumuquan@123';
#创建两个用户并指定验证密码方式为mysql_native_password
grant replication slave on *.* to 'repl_user'@'%';
grant replication slave on *.* to 'slave_sync_user'@'%';
#赋予从库复制权限,其中%为通配符,表示任何ip,mysql5.7可以直接使用grant创建同时进行赋权

4、配置主从同步

master1(主)------slave1(从)

登录master1的mysql查看查看并记录二进制位置与偏移量,后续会用到。

登录slave1的mysql进行主从配置

mysql> change master to master_host='192.168.189.137',
    -> master_user='slave_sync_user',
    -> master_password='Liumuquan@123',
    -> master_log_file='binlog.000002',
    -> master_log_pos=1215;
Query OK, 0 rows affected, 8 warnings (0.02 sec)
#后两个参数为刚在master1上记录下的
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

使用命令检查主从关系是否配置正常

master2(主)------slave2(从)

登录master2的mysql查看查看并记录二进制位置与偏移量

登录slave2的mysql进行主从配置

mysql> change master to master_host='192.168.189.138',
    -> master_user='slave_sync_user',
    -> master_password='Liumuquan@123',
    -> master_log_file='binlog.000004',
    -> master_log_pos=1215;
Query OK, 0 rows affected, 8 warnings (0.11 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

使用命令检查主从关系是否配置正常(图略)

master1(主)------master2(从)

登录master1的mysql查看查看并记录二进制位置与偏移量

登录master2的mysql进行主从配置

mysql> CHANGE MASTER TO MASTER_HOST='192.168.189.137',
    -> MASTER_USER='repl_user',
    -> MASTER_PASSWORD='Liumuquan@123',
    -> MASTER_LOG_FILE='binlog.000002',
    -> MASTER_LOG_POS=1215;
Query OK, 0 rows affected, 8 warnings (0.08 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

使用命令检查主从关系是否配置正常(图略)

master2(主)------master1(从)

登录master2的mysql查看查看并记录二进制位置与偏移量

登录master1的mysql进行主从配置

mysql> CHANGE MASTER TO MASTER_HOST='192.168.189.137',
    -> MASTER_USER='repl_user',
    -> MASTER_PASSWORD='Liumuquan@123',
    -> MASTER_LOG_FILE='binlog.000004',
    -> MASTER_LOG_POS=1215;
Query OK, 0 rows affected, 8 warnings (0.15 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)

使用命令检查主从关系是否配置正常(图略)

至此主从集群已经配置完成。

5、测试集群同步

在master1的mysql下创建名为mydb2的库,在mydb2中,创建表,插入数据。

观察master2,slave1,slave2是否同步数据。

更多推荐