环境
OS: centos7
Mysql 版本: mysql 5.7
Keepalived: keepalived-1.2.20
Mysql-vip:192.168.41.100
Mysql-master1:192.168.41.10
Mysql-master2:192.168.41.11
实验环境关闭防火墙规则firewall-cmd
一、配置两台mysql互为主从
该过程的第一部分就是 master 记录二进制日志。在每个事务更新数据完成之前, master 在
二日志记录这些改变。MySQL 将事务写入二进制日志。在事件写入二进制日志完成后, master
通知存储引擎提交事务。
下一步就是 slave 将 master 的 binary log 拷贝到它自己的中继日志。首先, slave 开始一个工
作线程——I/O 线程。I/O 线程在 master 上打开一个普通的连接,然后开始 binlog dump process。
Binlog dump process 从 master 的二进制日志中读取事件,如果已经同步了 master,它会睡
眠并等待 master 产生新的事件。 I/O 线程将这些事件写入中继日志。
SQL slave thread(SQL 从线程)处理该过程的最后一步。 SQL 线程从中继日志读取事件,并
重放其中的事件而更新 slave 的数据,使其与 master 中的数据一致。 只要该线程与 I/O 线程
保持一致,中继日志通常会位于 OS 的缓存中,所以中继日志的开销很小。主主同步就是两台机器互为主的关系,在任何一台机器上写入都会同步。
1、修改mysql配置文件
两台mysql均要开启binlog日志功能,两台的server-id不能一样:
master1配置如下:
[mysqld]
log-bin = mysql-bin
binlog_format = mixed
server-id = 1
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 1
重启mysqld服务
systemctl restart mysqld
master2配置如下:
log-bin = mysql-bin
binlog_format = mixed
server-id = 2
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 2
重启 mysqld 服务
systemctl restart mysqld
注: master1 和 master2 只有 server-id 不同和 auto-increment-offset 不同。
mysql 中有自增长字段,在做数据库的主主同步时需要设置自增长的两个相关配置:
auto_increment_offset 和 auto_increment_increment。
auto-increment-increment 表示自增长字段每次递增的量,其默认值是 1。 它的值应设为整个
结构中服务器的总数,本案例用到两台服务器,所以值设为 2。
auto-increment-offset 是用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都
设定了一次自动增长值 2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步
时出现主键冲突
2、将 master1 设为 master2 的主服务器
在 master1 主机上创建授权账户,允许在 master2(192.168.41.11)主机上连接