一、概述
Mysql数据库在单机工作时候存在单点故障,并且数据也存在损坏的可能,此时就需要做双机实时冗余,那就会用到常用的架构主从和主主。本次实践使用mariadb来实现冗余。
二、内容实践
1、主从复制的实现(本次实现主从均是新建系统)
在主节点和从节点上都要安装同一版本的mariadb数据库
yum install -y mariadb-server
当前仓库中的版本是mariadb 10.3.28。
进入/etc/my.cnf.d目录,修改mariadb-server.cnf
设置开启自启动和立即启动服务
systemctl enable --now mariadb.service
查看当前数据库列表
查看当前日志位置
配置远程服务账号和密码
grant replication slave on *.* to ‘repuser‘@‘192.168.22.%‘ identified by ‘test‘;
#查看主从复制的帮助内容
help change master to;
****
CHANGE MASTER TO
MASTER_HOST=‘master2.mycompany.com‘,
MASTER_USER=‘replication‘,
MASTER_PASSWORD=‘bigs3cret‘,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘master2-bin.001‘,
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;
****
将日志信息填写的change master to模板中
CHANGE MASTER TO
MASTER_HOST=‘192.168.22.28‘,
MASTER_USER=‘repuser‘,
MASTER_PASSWORD=‘test‘,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘testbin.000002‘,
MASTER_LOG_POS=540,
在从节点上配置server-id、log-bin和read-only(建议)选项
启动服务
配置主从模板到从服务器上
启动slave线程
验证,在主服务器创建数据库db1,在从服务器查看结果
主:
从
到此主从已经可以正常同步和使用。
2、主主模式的实现
主主模式如果在同时写入时,会存在主键冲突的问题,为了解决这个可以修改自动步进和初始值,同时要确定两台服务器均开启了二进制日志
主服务器:
第二主服务器:
配置第二主服务器,并开启slave进程。
CHANGE MASTER TO
MASTER_HOST=‘192.168.22.28‘,
MASTER_USER=‘repuser‘,
MASTER_PASSWORD=‘test‘,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘testbin.000002‘,
MASTER_LOG_POS=540,
配置主服务器访问第二主服务器
CHANGE MASTER TO
MASTER_HOST=‘192.168.22.38‘,
MASTER_USER=‘repuser‘,
MASTER_PASSWORD=‘test‘,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘mariadb-bin.000003‘,
MASTER_LOG_POS=344
验证测试
在主节点创建表插入3行数据
create table test(id int auto_increment primary key,user char(10));
insert test(user) values(‘user11‘),(‘user12‘),(‘user13‘);
在第二主节点向表中插入数据
insert test (user) values(‘user21‘),(‘user22‘),(‘user23‘);
可以看出已经避开了冲突的键值
三、总结
主主复制是通过互为从节点来实现同步,通过增值的规避解决主键冲突,但是如果两个节点同时写入时,仍然会有两个节点同时修改数据的情况,所以此种主主模式一般仅用于快速切换主备,不用来直接同时提供双写入。