扫描二维码在手机上浏览

MySQL(Mariadb)数据库实现主主同步(主主复制、双主同步、双向同步)

什么是主要主同步? 首先让我们回顾一下什么是主从同步? 所谓的主从同步是主机,备用机,主机会做任何操作,实时同步到备用机,这是单向同步。 然后主主机同步,即两个或多个主机处于主从关系并且彼此同步。

比如有两台服务器A和B,如果是主从同步的话,那么A作为主机,B作为备用机,A上面的所有操作都会单向同步到B上。

如果是主主同步,则A是B的主机,B同样也是A的主机,A的操作会同步到B,B的操作也会同步到A,两者相互同步。

主从同步的优点是可以读写分离,例如将数据写入主机A并从B读取数据,从而减轻A上的压力。然后主主机同步? 有什么好处? 实际上,很明显,如果主从同步,那么当主机断开时,将备用机器切换到主机需要一定的时间。换句话说,如果是主主同步,通常直接将多台机器作为主机,那么就可以进行负载均衡,将数据写入任何机器并读取数据。 同时,也可以进行数据备份,从而更加保证数据的安全性。

 

安装Mariadb数据库

我的测试环境是Debian 9 + Mariadb数据库,我这里拿2台服务器来做测试
提示:两台服务器的数据库版本要相同

安装Mariadb数据库并设置root密码为123456,两台服务器的安装方法都是一样的

apt install mariadb-server -y
mysql -uroot -e "grant all on *.* to [email protected]'%' identified by '123456';"
mysql -uroot -e "delete from mysql.user where password = '';"
mysql -uroot -e "update mysql.user set Grant_priv = 'Y';"
mysql -uroot -e "flush privileges;"
#设置mariadb接受远程连接
sed -i '1,$s/bind-address\s*=\s*127.0.0.1/bind-address=0.0.0.0/g' /etc/mysql/mariadb.conf.d/50-server.cnf

Mariadb的数据库配置文件是:/etc/mysql/mariadb.conf.d/50-server.cnf

注意:下面所提到的参数全部都是在[mysqld]节点下添加

像主从同步一样,在这个文件的[mysqld]节点下先添加两个参数,两台服务器都要添加,注意server-id不要相同

server-id=1

log-bin=mysql-bin

然后添加最关键的两个参数,也就是解决我们自增ID重复的.首先在A服务器添加以下两个参数

auto_increment_offset = 1
auto_increment_increment = 2

auto_increment_offset,表示该数据库的自增ID从1开始
auto_increment_increment,设置为服务器的总数量,比如我们这里用2台服务器做测试,那么就设置为2。这里设置为2,表示的是每次自增时增长2,即该台数据库的自增ID的顺序为:1,3,4,7,9……

然后在B服务器添加以下两个参数

auto_increment_offset = 2
auto_increment_increment = 2

auto_increment_offset,表示该数据库的自增ID从2开始
auto_increment_increment,设置为服务器的总数量,比如我们这里用2台服务器做测试,那么就设置为2。这里设置为2,表示的是每次自增时增长2,即该台数据库的自增ID的顺序为:2,4,6,8,10……

这样设置,两台服务器的自增ID就完美的错开了,就不会存在重复的问题了。

接着在A、B两台服务器都添加以下这个参数

log-slave-updates = true

修改后的配置文件如下图:

接下来就简单了,跟主从同步的操作基本上一致了,首先是添加用来同步用的账号密码。在A、B两台服务器上添加相同的账号密码

mysql -uroot -p123456
grant replication slave on *.* to [email protected]'%' identified by '123456';
exit

添加完毕账号后,重启数据库服务

systemctl restart mysql

重启完毕后,重新登录两台服务器的数据库,查看日志文件的信息并记录File和Position信息

mysql -uroot -p123456
show master status;

A服务器:

 

B服务器:

 

因为我两个服务器都是全新安装的数据库,所以这些信息都是一样的。接下来在配置同步服务,首先在A服务器配置

change master to master_host='B服务器的IP',master_port=3306,master_user='B服务器的数据库账号repl',master_password='B服务器的数据库密码123456',master_log_file='mysql-bin.000001',master_log_pos=313;

log_file就是主服务器File的值,这里要填写B服务器查询出来的值
master_log_pos就是主服务器Position的值,这里要填写B服务器查询出来的值

然后在B服务器上做相同的设置,注意将以下的信息相应的改成A服务器的信息

change master to master_host='A服务器的IP',master_port=3306,master_user='A服务器的数据库账号repl',master_password='A服务器的数据库密码123456',master_log_file='mysql-bin.000001',master_log_pos=313;

log_file就是主服务器File的值,这里要填写A服务器查询出来的值
master_log_pos就是主服务器Position的值,这里要填写A服务器查询出来的值

执行完毕后,再执行start slave;开启同步

然后在A、B服务器上执行show slave status\G;查看同步状态

 

当看到以下两个参数是YES就说明配置已经生效

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

接下来我们在A服务器上创建数据库test01,看看B服务器是不是同步创建了数据库

 

跟着我们在B服务器的test01数据库上创建表t_01,表里面有三个字段,其中id字段是自增,然后再刷新一下A服务器,看看是不是已经同步了t_01表过去

 

接下来我们在A服务器上插入一条数据到表t_01

insert into t_01(name,age) values(‘张三’,30);

 

接下来我们再继续向A服务器插入一条数据

insert into t_01(name,age) values(‘李四’,55);

 

大家也可以向B服务器里面插入数据试试,看看自增ID是怎么变化的。

至此为止,我们的主主同步操作就已经完成了。后面所有的操作,不管是在A服务器,还是在B服务器,都会相互同步到另一台机器上。

温馨提示:如果同步的时候想指定数据库,或者排除某些数据库不想同步的,可以使用以下两个参数:

binlog-do-db=test
binlog-ignore-db=mysql

binlog-do-db指定是需要同步的数据库,如果不指定的话默认同步全部数据库,如果有多个数据库要设置的话,需要写多行

binlog-ignore-db表示需要忽略,不进行同步的数据库,如果有多个数据库要设置的话,需要写多行。一般情况下为了维持各个服务器的账号等数据,都会设置忽略mysql自带的数据库mysql,test这些。

赞 0 分享
生成分享图片
版权声明
转载注明来源:
文章地址:风为裳 » MySQL(Mariadb)数据库实现主主同步(主主复制、双主同步、双向同步)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
图片正在生成中,请稍后...

周一

04/22

MySQL(Mariadb)数据库实现主主同步(主主复制、双主同步、双向同步)

什么是主要主同步? 首先让我们回顾一下什么是主从同步? 所谓的主从同步是主机,备用机,主机会做任何操作,实时同步到备用机,这是单向...

登录

记住我

注册