翼度科技»论坛 编程开发 mysql 查看内容

MySQL主从复制基于binlog与GTID详解

10

主题

10

帖子

30

积分

新手上路

Rank: 1

积分
30
一、基于binlog的主从复制搭建


1、准备环境

提前准备三台搭建了MySQL以及关闭防火墙的linux,并保证三台MySQL起始数据一致
实战中最好是新的mysql,方便操作
如果无法新建需使用数据备份方式将数据库数据恢复一致

2、数据库中创建并授权有主从复制权限账户
  1. mysql> grant replication  slave,reload,super on *.*  to 'testslave'@'%' identified by '123456';
  2. mysql> flush privileges;
  3. #注意:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成具体的ip
  4. #注意:该用户理论上只需要主库存在,从库不需要创建,但在实战中,由于各种突发情况从库随时有可能升级为主库,所以所有从库也要创建

  5. replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
  6. super权限:允许用户使用修改全局变量的SET语句以及CHANGE  MASTER语句
  7. reload权限:必须拥有reload权限,才可以执行flush  [tables | logs | privileges]
复制代码
3、主库的配置
  1. 修改数据库配置文件  /etc/my.cnf
  2. 保证主库以下两点
  3. 1.binlog日志功能打开
  4. 2.拥有server-id,并且在该主从复制集群中唯一
  5. log-bin=/opt/xiaolu/log/a.log  (自己写目录)
  6. server-id=153  (要保持唯一)

  7. 重启数据库
复制代码
  1. #进入主库查看当前主库状态
  2. mysql> show master status\G
  3. # 注意:此次查询关注file和position两条信息,从库配置时使用
复制代码

4、从库的配置
  1. 修改数据库配置文件  /etc/my.cnf
  2. 保证从库有唯一的server-id

  3. 重启数据库
复制代码
  1. 进入从库

  2. #查看从库当前监听主库状态
  3. mysql> show slave status\G   
  4. Empty set (0.00 sec)          #默认未开启监听


  5. # 执行如下命令
  6. mysql> CHANGE MASTER TO
  7.      MASTER_HOST='192.168.37.153',   #主库ip
  8.      MASTER_USER='testslave',         #主库用户名(第二步创建的)
  9.      MASTER_PASSWORD='123456',        #主库密码(第二步创建的)
  10.      MASTER_LOG_FILE='a.000002',    #主库配置文件(第三步主库配置时截图的参数)
  11.      MASTER_LOG_POS=154;              #主库日志偏移量(第三步主库配置时截图的参数)

  12. # 开启监听   
  13. mysql> start slave;  

  14. #查看从库当前监听主库状态
  15. mysql> show slave status\G   
  16. 如果报UUID错误信息就去/opt/xiaolu/data/mysql/auto.cnf文件去改UUID
复制代码
提示:重置从库的复制配置命令:RESET SLAVE ALL;


5、修改UUID
  1. # vim /opt/xiaolu/data/mysql/auto.cnf

  2. [auto]
  3. server-uuid=e2ee6d4c-80c9-11ef-9bac-000c297e2bf5
  4. 随便改个数字就可以

  5. [root@localhost mysql]# service mysqld stop
  6. Shutting down MySQL.. SUCCESS!
  7. [root@localhost mysql]# service mysqld start
  8. Starting MySQL. SUCCESS!
  9. 重启数据库
复制代码



6、查看从库当前监听主库状态
  1. mysql> show slave status\G
复制代码


7、其余从库配置与以上相同

配置完成后查看主从复制是否实现
  1. # 查看线程
  2. mysql> SHOW PROCESSLIST\G
复制代码


  • 第 1 行 - 表示当前有一个由
    1. root
    复制代码
    用户在本地(
    1. localhost
    复制代码
    )执行的
    1. SHOW PROCESSLIST
    复制代码
    查询,状态为 starting,说明该命令刚刚开始执行,花费的时间为 0。
  • 第 2 行第 3 行 - 这两行显示的是来自用户
    1. testslave
    复制代码
    的两个
    1. Binlog Dump
    复制代码
    进程,其主机分别为
    1. 192.168.37.154
    复制代码
    1. 192.168.37.155
    复制代码
    。它们的状态均为 Master has sent all binlog to slave; waiting for more updates,这意味着从库正在等待来自主库的新更新。

二、基于GTID的主从复制搭建


1、准备三台mysql机器环境,并且创建mysql并赋予权限,同上
  1. mysql> grant replication  slave,reload,super on *.*  to 'testslave'@'%' identified by '123456';
  2. mysql> flush privileges;
  3. #注意:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成具体的ip
  4. #注意:该用户理论上只需要主库存在,从库不需要创建,但在实战中,由于各种突发情况从库随时有可能升级为主库,所以所有从库也要创建

  5. replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
  6. super权限:允许用户使用修改全局变量的SET语句以及CHANGE  MASTER语句
  7. reload权限:必须拥有reload权限,才可以执行flush  [tables | logs | privileges]
复制代码
2、主库配置
  1. 修改数据库配置文件  /etc/my.cnf
  2. 保证以下四点
  3. log-bin=/opt/xiaolu/log/a.log  #开启binlog日志,master必写
  4. server-id=153    #定义server id master必写 并保持唯一
  5. gtid_mode=ON     #开启gtid
  6. enforce_gtid_consistency=1 #强制gtid  

  7. 重启数据库
复制代码


3、从库配置
  1. 修改数据库配置文件 /etc/my.cnf
  2. server-id=154
  3. gtid_mode=ON
  4. enforce_gtid_consistency=1

  5. 重启数据库
复制代码
  1. #进入从库mysql> stop slave;   #停止数据库监听Query OK, 0 rows affected (0.01 sec)#设置从库监听信息mysql> change master tomaster_host='192.168.37.153',      #主ip 地址  最好用域名master_user='testslave',     #主服务上面创建的用户master_password='111111', master_auto_position=1;Query OK, 0 rows affected, 2 warnings (0.00 sec)# 开启监听mysql> start slave;Query OK, 0 rows affected (0.00 sec)# 查看从库监听状态mysql> show slave status\G
复制代码
4、其余从库做相同配置,查看主从复制状态
  1. # 查看线程
  2. mysql> SHOW PROCESSLIST\G
复制代码
总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/database/328293ysu.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具