Mysql的主从复制和主主复制

一、概述

Mysql数据库在单机工作时候存在单点故障,并且数据也存在损坏的可能,此时就需要做双机实时冗余,那就会用到常用的架构主从和主主。本次实践使用mariadb来实现冗余。

二、内容实践

1、主从复制的实现(本次实现主从均是新建系统)

在主节点和从节点上都要安装同一版本的mariadb数据库

 yum install -y mariadb-server

当前仓库中的版本是mariadb 10.3.28。

进入/etc/my.cnf.d目录,修改mariadb-server.cnf

Mysql的主从复制和主主复制

设置开启自启动和立即启动服务

systemctl enable --now mariadb.service

查看当前数据库列表

Mysql的主从复制和主主复制
查看当前日志位置
Mysql的主从复制和主主复制

配置远程服务账号和密码

grant replication slave on *.* to ‘repuser‘@‘192.168.22.%‘ identified by ‘test‘;

Mysql的主从复制和主主复制

#查看主从复制的帮助内容
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(建议)选项

Mysql的主从复制和主主复制
启动服务
Mysql的主从复制和主主复制
配置主从模板到从服务器上
Mysql的主从复制和主主复制
启动slave线程
Mysql的主从复制和主主复制

验证,在主服务器创建数据库db1,在从服务器查看结果

主:
Mysql的主从复制和主主复制

Mysql的主从复制和主主复制
到此主从已经可以正常同步和使用。

2、主主模式的实现

主主模式如果在同时写入时,会存在主键冲突的问题,为了解决这个可以修改自动步进和初始值,同时要确定两台服务器均开启了二进制日志

主服务器:
Mysql的主从复制和主主复制
第二主服务器:
Mysql的主从复制和主主复制

配置第二主服务器,并开启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

Mysql的主从复制和主主复制
Mysql的主从复制和主主复制

验证测试

在主节点创建表插入3行数据

create table test(id int auto_increment primary key,user char(10));
insert test(user) values(‘user11‘),(‘user12‘),(‘user13‘);

Mysql的主从复制和主主复制
在第二主节点向表中插入数据

insert test (user) values(‘user21‘),(‘user22‘),(‘user23‘);

Mysql的主从复制和主主复制
可以看出已经避开了冲突的键值

三、总结

主主复制是通过互为从节点来实现同步,通过增值的规避解决主键冲突,但是如果两个节点同时写入时,仍然会有两个节点同时修改数据的情况,所以此种主主模式一般仅用于快速切换主备,不用来直接同时提供双写入。

上一篇:[极客大挑战 2019]BabySQL


下一篇:Mysql 解决1251 client does not support ...问题