mysql 主从搭建,读写分离

基于日志点复制

最早支持。bug较少

对查询sql没有任何限制

缺点:主节点挂了以后新的日志节点难以获取

在主DB上建立服务账号并授权 ,该账号只能在从服务器登录

#创建用户
CREATE USER 'repl'@'192.168.2.115' IDENTIFIED BY '123123'
#授权
grant REPLICATION SLAVE on *.* to 'repl'@'192.168.2.115';

主节点配置

#开启binlog
log-bin=mysql-bin
#日志id,整个集群必须唯一
server-id=1921682114
#日志格式
binlog_format=mixed
#启动日志事务,防止极端情况下日志与数据不一致情况
innodb_support_xa=NO

从节点配置

#开启binlog
log-bin=mysql-bin
#日志id,整个集群必须唯一
server-id=1921682115
#中继日志名称,数据库Slave服务的I/O线程从主数据库Master服务的二进制日志中读取数据库的更改记录并写入到中继日志中,然后在Slave数据库执行修改操作。这就是中继日志Relay Log。
relay_log=mysql-relay-bin
#是否把中继日志执行的sql记录到二进制日志中
log_slave_updates=on
#是否只读该数据库
read_only=on

初始化数据库,将主数据库数据复制到从数据库中,并且获取日志点

  • mysqldump (会对备份表加锁)

    mysqldump --single-transaction --master-data --triggers --routines --databases  test  >>all.sql -uroot -proot
    
    • –single-transaction 事务隔离保证备份的数据是一直的

      ① 在开始的时候把该 session 的事务隔离级别设置成 repeatable read ;

      ② 然后启动一个事务(执行 begin ),备份结束的时候结束该事务(执行 commit )

    • –master-data

      该参数用于将主库的bin-log信息写入到dump文件中,即当前文件名(filename)和位置(position),用于主从复制的搭建

    • –triggers

      包含表的触发器

    • –routines

      存储过程

  • xtrabackup --slave-info

mysql -uroot -proot < all.sql

从节点 启动服务链路

在mysqldump 导出文件中找到 CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000004’, MASTER_LOG_POS=1091;

#配置链路信息
change master to master_host='master_ip',
master_user='repl',
master_password='root',
master_log_file='mysql-bin.000004',
master_log_pos=1091;
#启动链路
start slave;

通过 show slave status\G; 查看链路信息

基于GTID复制

5.6 版本开始,GTID即全局事务id,create select … 语句无法使用。5.6早期的版本bug较多。建议在5.6后期的版本以及5.7以上的版本中使用

  • 在主DB上建立服务账号并授权 ,该账号只能在从服务器登录

    #创建用户
    CREATE USER 'repl'@'192.168.2.115' IDENTIFIED BY '123123'
    #授权
    grant REPLICATION SLAVE on *.* to 'repl'@'192.168.2.115';
    
  • 主节点配置

    #开启binlog
    log-bin=mysql-bin
    #日志id,整个集群必须唯一
    server-id=1921682114
    #日志格式
    binlog_format=mixed
    #其实日志事务,防止极端情况下日志与数据不一致情况
    innodb_support_xa=NO
    #启用gtid
    gtid_mode=on
    
    enforce-gtid-consistency
    #5.7以下必须使用这个配置
    log-slave-updates=on
    
  • 从库配置

    #日志id,整个集群必须唯一
    server-id=1921682115
    #中继日志名称,数据库Slave服务的I/O线程从主数据库Master服务的二进制日志中读取数据库的更改记录并写入到中继日志中,然后在Slave数据库执行修改操作。这就是中继日志Relay Log。
    relay_log=mysql-relay-bin
    #启用gtid
    gtid_mode=on
    enforce-gtid-consistency
    
    log-slave-updates=on
    #建议,将复制节点信息存储到表中
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
  • 同步主从库数据

    mysqldump --single-transaction --master-data=2 --triggers --routines --databases  test  >>all.sql -uroot -proot
    

    mysql -uroot -proot < all.sql

  • 配置链路

    #配置链路信息
    change master to master_host='192.168.2.114',
    master_user='repl',
    master_password='root',
    master_auto_position=1;
    #启动链路
    start slave;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值