主主复制:两个节点都可以更新数据,并且互为主从
容易产生的问题:数据不一致;慎用
优势:相对于一主一从,如果主节点出现故障,无需对从做修改配置,另一个主从直接顶替(需要搭配代理)
主1配置:
1.修改mysql配置文件
[root@centos8 mysql]vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=211 #设置唯一标识的server-idlog-bin #开启二进制日志
auto_increment_offset=1#设置自动增长起始点
auto_increment_increment=2#设置自动增长步长
systemctl restart mariadb-server
2.查看二进制日志文件及位置,用此位置的二进制文件可以不用在从上创建账号
MariaDB [(none)]>show master logs;+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 360 |
+--------------------+-----------+
1 row in set (0.000 sec)
3.创建复制账号
MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.0.%' identified by '123456'; #创建一个用于主从复制的账号
主2配置:
1.修改mysql配置文件
[root@centos8 mysql]vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=212 #设置唯一标识的server-idlog-bin #开启二进制日志
auto_increment_offset=2#设置自动增长起始点
auto_increment_increment=2#设置自动增长步长
systemctl restart mariadb-server
2.查看二进制日志文件及位置
MariaDB [(none)]>show master logs;+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 555 |
| mariadb-bin.000002 | 367 |
| mariadb-bin.000003 | 344 |
+--------------------+-----------+
3 rows in set (0.000 sec)
3.配置关于主1复制的相关信息
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST='10.0.0.211',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=360;
主1配置:
配置关于主1复制的相关信息,实现互相复制
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST='10.0.0.212',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000004',
MASTER_LOG_POS=344;
此处配置slave时发现了一个问题:start slave 后查看show slave status\G;会一直报错
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
敲入一下命令即可解决
stop slave;
reset slave;
start slave;
该模式在早期的时候同时创建数据库时会出现报错,新的mysql已经避免了此问题
该模式因为设置了自动增长,所以在表钟新增记录时也不会出现问题,但如果两侧同时指定主键一样时就不行了