当前位置:首页 > 数据库 > mysql > 正文内容

mysql主从复制

下辈子别做运维2022-09-11 22:49:40mysql


1、原理

mysql主从复制,将数据库中所有数据实时的备份到另一个机器上,防止数据丢失。

过程:

A.当一个事务在主库被提交时, 会产生gtid号, 并记录至主库的binlog日志中

B.从库的IO线程读取主库的log_dump_thread进程所传输的bin_log日志, 并将结果记录至从库的relay log中

C.从库的SQL线程读取relay log记录的gtid号, 然后对比本地的bin_log日志, 存在即代表执行过, 不存在则SQL线程会执行该事务, 并记录到本地的bin_log日志中

 图片1.png

2、环境准备

关闭防火墙、selinux

 

3、部署主从复制

分别在主库、从库的机器上编辑mysql配置文件,添加如下内容:

vim /mysql/conf/mysql.conf

gtid-mode = ON

log-slave-updates = 1

server_id = 1     每台机器的id不能相同,一般主库为1,从库顺延

log-bin = MySQL-bin

enforce_gtid_consistency = 1

log-bin-index = MySQL-bin.index

 

重启数据库:systemctl restart mysqld

 

在主库建立同步用户:

mysql> grant replication slave on *.* to rep@"192.168.88.%" identified by '123Abc..';

建立rep用户,授予192.168.88.0.%网段的机器登录的权限

 

登录从库配置:

mysql> change master to

-> master_host='192.168.88.151', 主库ip地址 

-> master_user='rep', 同步用户账号 

-> master_password='123Abc..', 同步用户账户密码 

-> master_port=3306,    主库mysql端口

-> master_auto_position=1;

 

在从库开启主从复制:

mysql> start slave;

 

4、验证主从复制状态

从库:

mysql> show slave status\G;

如果Slave_IO_Running及Slave_SQL_Running均显示Yes,则表明主从复制配置成功

图片2.png

 

 主库:

mysql> show master status;

图片3.png

 

5、主从复制状态详解

从库执行:

mysql> show slave status\G;

*************************** 1. row ***************************

SHOW PROCESSLIST输出的State字段的拷贝,当前显示状态表示正视图连接主库服务器:

               Slave_IO_State: Waiting for master to send event

  连接的主库服务器ip:

                  Master_Host: 192.168.88.151 

 被用于连接主服务器的当前用户:   

                  Master_User: rep

 连接的主库服务器mysql端口:

                  Master_Port: 13309        

                 Connect_Retry: 60

 I/O线程当前正在读取的主服务器二进制日志文件的名称:

              Master_Log_File: MySQL-bin.000002

 在当前的主服务器二进制日志中,I/O线程已经读取的位置:

              Read_Master_Log_Pos: 224793231

          SQL线程当前正在读取和执行的relay-log日志文件的名称     

Relay_Log_File: db2-test-server-relay-bin.000003

在当前的relay-log日志中,SQL线程已读取和执行的位置:

                      Relay_Log_Pos: 224793444

   由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称:

            Relay_Master_Log_File: MySQL-bin.000002

 

I/O线程是否被启动并成功地连接到主库服务器上,显示Yes表明连接成功,如果显示No或connecting则表示连接异常:

            Slave_IO_Running: Yes

  SQL线程是否运行正常,显示Yes表明SQL线程运行正常,显示No表明SQL线程运行异常:

               Slave_SQL_Running: Yes

               Replicate_Do_DB:

               Replicate_Ignore_DB:

               Replicate_Do_Table:

              Replicate_Ignore_Table:

              Replicate_Wild_Do_Table:

              Replicate_Wild_Ignore_Table:

  Last_Errno、Last_Error分别表示为最近被执行的查询返回的错误数量和错误消息。错误数量为0并且消息为空字符串意味着“没有错误”。如果Last_Error值不是空值,它也会在从属服务器的错误日志中进行记录:

                   Last_Errno: 0

                   Last_Error:

                 Skip_Counter: 0

来自主服务器的二进制日志的由SQL线程执行的上一个时间的位置:

               Exec_Master_Log_Pos: 224793231

所有原有的中继日志结合起来的总大小:

              Relay_Log_Space: 224793661

Until_Condition具有以下值:

None:表示没有指定UNTIL子句,返回值为空

Master:表示如果从库服务器正在读取,直到达到主服务器的二进制日志的给定位置为止前的状态

Relay:如果从库服务器正在读取,直到达到其relay-log日志的给定位置为止前的状态

              Until_Condition: None

Until_Log_File和Until_Log_Pos分别表示用于指示日志文件名和位置值,日志文件名和位置值定义了SQL线程在哪个点中止执行:

               Until_Log_File:

               Until_Log_Pos: 0

表示被从库服务器用于连接主库服务器的参数:

显示Yes,表示允许对主库服务器进行ssl的连接

显示为No,表示不允许对主库服务器进行ssl的连接

显示为Ignored,表示允许SSL连接,但是从库服务器没有让ssl支持启用      

             Master_SSL_Allowed: No

              Master_SSL_CA_File:

             Master_SSL_CA_Path:

             Master_SSL_Cert:

             Master_SSL_Cipher:

             Master_SSL_Key:

Seconds_Behind_Master表示从库服务器的SQL线程与IO线程产生的延迟时间,单位为秒。如果没有延迟,则表示为0;如果从库IO线程未运行或与主库服务器未连接,则显示为NULL。注意,不能通过此项观察出主库服务器与从库服务器之间的网络延迟时间,即使从库服务器的IO线程落后于主库服务器,只要从库服务器的SQL线程足够快速,那么也是显示为0

                 Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error:

               Last_SQL_Errno: 0

               Last_SQL_Error:

              Replicate_Ignore_Server_Ids:

             Master_Server_Id: 1

               Master_UUID: efb164d3-30ea-11ed-8463-000c29994063

             Master_Info_File: /mysql/data/master.info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

            Master_Retry_Count: 86400

                  Master_Bind:

         Last_IO_Error_Timestamp:

          Last_SQL_Error_Timestamp:

               Master_SSL_Crl:

           Master_SSL_Crlpath:

           Retrieved_Gtid_Set: efb164d3-30ea-11ed-8463-000c29994063:1-1395

            Executed_Gtid_Set: efb164d3-30ea-11ed-8463-000c29994063:1-1395

                Auto_Position: 1

             Replicate_Rewrite_DB:

                 Channel_Name:

           Master_TLS_Version:

1 row in set (0.00 sec)

 

主库执行:

mysql> show master status\G;

*************************** 1. row ***************************

             File: MySQL-bin.000002

         Position: 224793231

由数据库参数binlog_do_db列出的数据库填充   

Binlog_Do_DB:

由数据库参数binlog_ignore_db填充,如果以上任何配置中都不存在值,那么所有数据库中的写入活动都会被列入二进制日志中 

Binlog_Ignore_DB:

显示在主库上执行全局事务标识符

Executed_Gtid_Set: efb164d3-30ea-11ed-8463-000c29994063:1-1395

1 row in set (0.00 sec)

 

监控mysql主从复制状态是否异常,需要关注以下几个参数是否正常:

Slave_IO_Running

Slave_SQL_Running

Last_Errno

Last_Error

Last_SQL_Errno

Last_SQL_Error

Seconds_Behind_Master

 

 附:mysql主从复制部署过程排错

 1、若Slave_IO显示异常时:

mysql >reset slave  
mysql >reset master

2、若SQL_Runing显示异常时:

mysql > stop slave;
mysql >SET GTID_NEXT=' ffd80980-c7cb-11e9-beda-0050569051da:8';     执行发生错误的GTID号,表示跳过这个错误
mysql > begin;commit;
mysql > SET GTID_NEXT="AUTOMATIC";
mysql > start slave;


 注意:selinux、firewalld必须要关闭

          配置文件添加后必须重启mysqld
         若事先未重启mysqld,发现后要及时重启,并重启slave

 

 


扫描二维码推送至手机访问。

版权声明:本文由个人博客发布,如需转载请注明出处。

本文链接:https://opszzfwordpress.club/post/96.html

分享给朋友:
返回列表

没有更早的文章了...

下一篇:mysql部署-源码、rpm

“mysql主从复制” 的相关文章

mysql部署-源码、rpm

mysql部署-源码、rpm

从源码部署1、环境装备1)下载安装包官网:https://downloads.mysql.com/a...

mysql源码安装升级

mysql源码安装升级

本次是小版本升级,从5.7.35升级到5.7.401.准备安装包wget https://...

mysql+keepalived双主搭建

mysql+keepalived双主搭建

基本情况介绍:搭建mysql双主架构,两个mysql节点互为主从,使用keepalived,绑定vi...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。