Mysql双主热备架构搭建

背景知识:

  1. 在mysql主从架构篇我详细介绍了主从架构的搭建,传送门。主从架构的原理就是主节点将所有的修改事件记录到binlog中,然后从节点将主节点binlog中的事件拷贝到自己的中继日志(relay log)中,从节点再重做中继日志将修改反映成自己的数据。
  2. 主从架构数据是单向的,即数据从主节点流向从节点。但是双主架构则不是,它的数据流向是双向的,因为两个mysql服务器互为主从。
  3. 有人可能会问了为什么是双主而不是三主,四主呢?这是因为mysql虽然支持一主多从但是并不允许一个从节点有多个主节点,其实也很好理解为什么会有这个限制,因为一个从节点如果有多个主节点的话,数据的区分将会很麻烦。

1.首先我们准备如下目录结构:

2.我们将mysql-3306和mysql-3307设置为互为主从关系,然后mysql-3308是mysql-3306的从节点,mysql-3309是mysql-3307的从节点。在config目录下新建3306.conf,3307.conf,3308.conf,3309.conf。其中3306和3307的配置如下:

[mysqld]
user=root
character-set-server=utf8
port=3306
socket=/root/mysql/sockets/3306.sock
basedir=/root/mysql/mysql-3306
datadir=/root/mysql/data/3306
server-id=1
log-bin=master-bin
binlog_format=ROW
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
relay-log=relay-log-bin
#其他参数是什么意思我就不介绍啦( 我在主从架构这篇文章中有详细介绍 )
#双主热备的关键参数。默认情况下从节点从主节点中同步过来的修改事件是不会写入到自己的binlog中,只有开启如下配置才会写入。
log_slave_updates=1 
[mysqld_safe]
log-error=/root/mysql/logs/3306.log

#3307的配置就是将上面的3306改成3307即可(注意server-id要不一样)

分别进入mysql-3306和mysql-3307目录,执行如下命令运行服务器3306和3307:

#初始化
./bin/mysqld --defaults-file=/root/mysql/config/mysql-3306 --initialize-insecure
#启动服务
./bin/mysqld --defaults-file=/root/mysql/config/mysql-3306


#初始化
./bin/mysqld --defaults-file=/root/mysql/config/mysql-3307 --initialize-insecure
#启动服务
./bin/mysqld --defaults-file=/root/mysql/config/mysql-3307

3.进入mysql-3306目录,执行如下命令连接终端:

./bin/mysql -uroot --socket=/root/mysql/sockets/3306.sock

接下来我们创建一个叫做salve的用户,并分配相应的权限:

create user 'slave' identified by '666666';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';

#具体语句的格式与意思,请移步我的另一篇文章主从架构的搭建

接着运行如下命令查看节点状态,并进行重置:

show master status;
reset master;

4.进入mysql-3307目录,操作步骤和第三步一致。注意记录我在第三步中红框框起的两个值。

5.然后我们再执行如下命令来指定主节点:

扫描二维码关注公众号,回复: 4161063 查看本文章
#在3307的客户端执行如下代码,设置3307为3306的从节点
stop slave;
change master to 
master_host='127.0.0.1',
master_port=3306,
master_user='slave',
master_password='666666',
master_log_file='master-bin.000001', #3306客户端执行show master status时红框框起的值
master_log_pos=154;
start slave;


#在3306的客户端执行如下代码,设置3306为3307的从节点
stop slave;
change master to 
master_host='127.0.0.1',
master_port=3307,
master_user='slave',
master_password='666666',
master_log_file='master-bin.000001', #3307客户端执行show master status时红框框起的值
master_log_pos=154;
start slave;

6.以上我们就将3306和3307配置成了互为主从的关系,至此我们的双主热备就算配置完成了。感兴趣的小伙伴可以将3308配置为3306的从节点,3309配置为3307的从节点(不会配置主从的,参考这篇文章)。

总结:

  1. 一般主从架构从节点是不需要开启binlog日志的,首先因为从节点是只读的开启binlog日志也没用,因为binlog日志记录的是修改事件,其次从节点从relay-log中读取主节点的修改事件时也不会将修改事件同步到自己的binlog中。因此从节点开启binlog是没有用。
  2. 双主热备的关键参数就是:log_salve_updates
  3. 双主热备其实就是两台mysql服务器互为主从关系。为了实现高可用,可以在两台互为主从关系的服务器下面再配置若干个从节点。
  4. 关于reset master 和 reset slave语句的区别和注意事项:传送门

猜你喜欢

转载自blog.csdn.net/wx145/article/details/84144186