主从同步模式

主从同步结构

  • 一主一从
  • 一主多从
  • 链式复制(主<–从<–从)
  • 互为主从

一主多从

一主一从的基础上直接新增slave服务器即可.

链式复制

这里为配置新服务器,不是新服务器需要同步数据:

[root@master ~] mysqldump -uroot -pPASSWORD --master-data 数据库名 > /allbak.sql   #--master-data记录当前备份数据对应的日志信息
[root@master ~] scp /allbak.sql root@'从服务器':

[root@slave ~] mysql -uroot -pPASSWORD 数据库名 < /allbak.sql
[root@slave ~] grep binlog日志文件名 /allbak.sql
CHANGE MASTER TO MASTER_LOG_FILE='master51.000001', MASTER_LOG_POS=441;   #指定主服务器需要的信息:binlog日志名和偏移量

1.配置master服务器

[root@master] vim /etc/my.cnf
[mysqld]
server_id=53
log_bin=master53
[root@master] systemctl restart mysqld
[root@master] mysql -uroot -pPASSWORD
mysql> grant replication slave on *.* to USER@'%' identified by 'PASSWORD';  #为slave1授权一个用户

2.配置slave1(同时作为另一台slave的master)

[root@slave1] vim /etc/my.cnf
[mysqld]
server_id=54   #注意不能与别的服务器相同
log_bin=master54  #设置binlog日志文件名
log_slave_updates  #启用级联复制

[root@slave1] system restart mysqld
[root@salve1] 同步数据操作   #选做
[root@slave1] mysql -uroot -pPASSWORD
mysql> grant replication slave on *.* to USER@'%' identified by 'PASSWORD';   #为salve2授权一个用户
mysql> change master to 
 -> master_host="IP",    #master的ip地址
 -> master_user="USER",     #master授权用户
 -> master_password="PASSWORD",   #master授权用户密码
 -> master_log_file="MASTER_LOG_FILE",   #master正在使用的binlog日志
 -> master_log_pos=MASTER_LOG_POS;   #master的binlog日志偏移量
mysql> start slave;
mysql> show slave status\G;

3.配置slave2

[root@slave2] vim /etc/my.cnf
[mysqld]
server_id=55

[root@slave2] systemctl restart mysqld
[root@salve2] 同步数据操作   #选做
[root@slave2] mysql -uroot -pPASSWORD
mysql> change master to 
 -> master_host="IP",    #slave1的ip地址
 -> master_user="USER",     #slave1授权用户
 -> master_password="PASSWORD",   #slave1授权用户密码
 -> master_log_file="MASTER_LOG_FILE",   #slave1正在使用的binlog日志
 -> master_log_pos=MASTER_LOG_POS;  #slave1的binlog日志偏移量
mysql> start slave;
mysql> show slave status\G;

互为主从

一主一从反着来一遍

复制模式

  1. 异步复制(默认)
  • 主服务器执行完一次事务后,立即将结果返回到客户端,不关心从服务器是否已经同步数据
  1. 全同步复制
  • 当主服务器执行完一次事务后,且所有从服务器都同步完数据后才将结果返回给客户端
  1. 半同步复制
  • 介于异步复制和全同步复制之间
  • 主服务器在执行完一次事务后,等待至少一台从服务器同步完成,才将结果返回给客户端

配置半同步模式

1)配置master

  1. 加载模块
  2. 查看模块是否加载
  3. 启用模块
  4. 查看模块是否启用
  5. 写入配置文件
mysql> show variables like 'have_dynamic_loading';  #查看是否支持动态加载模块,默认为YES.
mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';  #加载模块,SONAME必须大写
mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';  #查看模块是否加载
mysql> set global rpl_semi_sync_master_enabled=1; #启用模块
mysql> show variables like 'rpl_semi_sync_%_enabled'; #查看模块是否启用

[root@master] vim /etc/my.cnf   #写入配置文件
[mysqld]
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1

2)配置slave

  1. 加载模块
  2. 查看模块是否加载
  3. 启用模块
  4. 查看模块是否启用
  5. 写入配置文件
mysql> show variables like 'have_dynamic_loading';  #查看是否支持动态加载模块,默认为YES.
mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';  #加载模块,SONAME必须大写
mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';  #查看模块是否加载
mysql> set global rpl_semi_sync_slave_enabled=1; #启用模块
mysql> show variables like 'rpl_semi_sync_%_enabled'; #查看模块是否启用

[root@slave] vim /etc/my.cnf   #写入配置文件
[mysqld]
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1

附:一台服务器同时担任主从时

以上主从模块都加载启用

[root@host] vim /etc/my.cnf
[mysqld]
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
发布了81 篇原创文章 · 获赞 7 · 访问量 1201

猜你喜欢

转载自blog.csdn.net/weixin_45157506/article/details/103892997
今日推荐