06、主从复制原理以及如何搭建

1、深入剖析主从复制的底层原理

1-什么是MySQL主从复制? 是指将一个MySQL数据库A的数据变更复制到另外一个MySQL实例B这个A就可以称为主库,B称为从库

2-主从复制的作用: 数据备份和恢复 可以将主库上的数据复制到一个或多个从库上。这个时候,从库可以充当一个灾备的副本。当主库宕机时,可以在从库恢复数据。 高可用 当主库发生故障时,提升一个从库为新的主,保证业务可用。 目前很多高可用架构,就是基于主从来实现的,比如双主+keepalived、MHA、Orchestrator。 负载均衡 可以将读操作在从库执行,从而减轻主库的压力。

3-MySQL主从复制的原理 主库必须开启二进制日志 当主库有写操作时(比insert、update,delete), 会记录到主库的Binlog中 从库通过IO线程读取主库的Binlog里面的内容,传给从库的RelayLog(中继日志) 从库的sql线程负责读取它的relaylog里的信息并应用到数据库中

4-两种复制方法 基于位点的复制

从库根据主库的位点信息进行执行回放。 这些位点信息包括二进制日志文件名(File Name)和事件位置(Position)。 比如我们执行

show master status\G

File就是当前实例最后一个事务写的Binlog文件 Position 就是最后一个事务在Binlog中的位点 Binlog Do DB 表示需要记录Binlog的数据库,可以通过参数配置 Binlog lgnore DB 表示不会记录Binlog的数据库 Executed Gtid Set 表示执行过的GTID(全局事务标识符)集台 基于GTID的复制 GTID是MySQL5.6引入的一种全局事务标识 在基于 GTID 的复制中,主库上,每个事务都会被分配一个唯一的GTID,从库使用这些 GTID 来同步主库的事务。

2、快速搭建主从复制
1、确保binlog开启
show global variables like "log_bin";
查看配置文件中,binlog是否开启,防止重启后未开未开启的情况
vim /data/mysql/conf/my.cnf
搜索 log-bin
修改server_id
或 select @@global.server_id;
​
关闭GTID
gtid_mode=off 
#enforce_gtid_consistency=on
​
创建复制用户
CREATE USER 'repl'@'%' identified  WITH mysql_native_password BY 'Uid_dQc63'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
​
主库导出数据
cd /data/backup/ 
mysqldump -uroot -p --single-transaction --all-databases --master_data=2 --set-gtid-purged=OFF >alldb_bak.sql
​
--single-transaction,开启一个事务进行备份,会把隔离级别设置为RR,在备份时不阻塞应用的情况下也可以保证数据一致性。
--all-databases,备份所有库
--master_data,记录备份的位点
​
传输到从库机器
scp alldb_bak.sql 192.168.152.30:/data/backup
​
从库导入数据
cd /data/backup
mysql -uroot -p <alldb_bak.sql
​
确定备份是的位点
head -n 30 alldb_bak.sql
​
在从库上配置主库信息
CHANGE MASTER TO
MASTER_HOST='192.168.152.70',
MASTER_USER='repl',
MASTER_PASSWORD='Uid_dQc63',
MASTER_LOG_FILE='mysql-bin.000020',
MASTER_LOG_POS=490037;
​
start slave;
​
​
查看复制状态
SHOW SLAVE STATUS\G

复制状态解析

如果Slave_IO_Running和Slave_SQL_Running都是yes,就表示复制已经建立。

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event    //从库IO线程的状态,这个状态表示正在等待主库发送事件
                  Master_Host: 192.168.152.70          //主库的IP地址或主机名
                  Master_User: repl                    //用于从库连接到主库的用户名
                  Master_Port: 3306                    //主库的端口
                Connect_Retry: 60                        //如果从库与主库之间的连接中断,从库尝试重新连接的时间间隔
              Master_Log_File: mysql-bin.000025        //主库当前正在写入的二进制日志文件的名称
          Read_Master_Log_Pos: 534                    //从库复制的主库二进制日志文件的位置
               Relay_Log_File: mysql-relay-bin.000002 //从库正在写入的中继日志文件的名称               
                Relay_Log_Pos: 662                    //从库正在写入中继日志文件的位置
        Relay_Master_Log_File: mysql-bin.000025        //从库复制的主库二进制日志文件的名称
             Slave_IO_Running: Yes                    //从库的I/O线程是否正在运行
            Slave_SQL_Running: Yes                    //从库的SQL线程是否正在运行
              Replicate_Do_DB:                         //需要复制的数据库
          Replicate_Ignore_DB:                         //不需要复制的数据库
           Replicate_Do_Table:                         //需要复制的表
       Replicate_Ignore_Table:                         //不需要复制的表
      Replicate_Wild_Do_Table:                         //需要复制的通配符表名称
  Replicate_Wild_Ignore_Table:                         //需要复制的通配符表名称
                   Last_Errno: 0                        //上一条错误的错误码
                   Last_Error:                         //上一条错误信息
     &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

共勉浩浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值