日常工作中,我们需要经常进行一些监控和管理维护工作,以便能及时发现一些复制中的问题,并尽快解决,以此来保证复制能够正常工作

1、查看从库状态

MySQL [(none)]> show slave status\G
*************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.31.22.29
Master_User: chaofeng
Master_Port:
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos:
Relay_Log_File: ip-----relay-bin.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.
Slave_IO_Running: Yes
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:
Skip_Counter:
Exec_Master_Log_Pos:
Relay_Log_Space:
Until_Condition: None
Until_Log_File:
Until_Log_Pos:
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master:
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno:
Last_IO_Error:
Last_SQL_Errno:
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id:
Master_UUID: ce15f67e-0ccc-11e9-9e0a-0af74ce261dc
Master_Info_File: /data/data_mysql/master.info
SQL_Delay:
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count:
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position:
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
row in set (0.00 sec)

上面所有的信息中,我们只需要关注上面背景为蓝色的两行信息,即“SQL_IO_Running”和"Slave_SQL_Running"这两个状态是否为“YES”,必须两个都是“YES”,说明主从复制没有问题。只要其中有一个不是“YES”,那么主从复制就有问题。

2、主从库同步维护

这个是说主从复制中由于某些原因从库的数据总是滞后于主库,这时候就需要我们手动定期的进行主从库的数据同步了,使得主从数据差距能够减到最小。常用的方法就是:在负载较低时暂时阻塞主数据库的更新,强制主从数据库更新同步。

方法步骤:

1、在主库上执行读锁操作(这是会阻塞主数据库的所有更新操作)

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, rows affected (0.01 sec) mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin. | | | | |
+------------------+----------+--------------+------------------+-------------------+
row in set (0.00 sec)

记住上面的这两个数值,file的二进制文件名字,Position的数值154。这个数值是从库复制的目的坐标。

2、在从库上,执行MASTER_POS_WAIT函数

MySQL [(none)]> select MASTER_POS_WAIT('mysql-bin.000002','');
+-------------------------------------------+
| MASTER_POS_WAIT('mysql-bin.000002','') |
+-------------------------------------------+
| |
+-------------------------------------------+
row in set (0.00 sec)

这个select语句会阻塞直到从库达到指定的日志文件和偏移量后,返回0,如果返回-1,则表示超时退出。

3、最后在主库上,执行解锁操作,使其能够进行读写操作。

mysql> UNLOCK TABLES;
Query OK, rows affected (0.00 sec)

3、从库复制出错的处理

某些情况下,会出现从库更新失败,这时,需要确定一下是否是从库与主库的表的不同造成的。如果不是的话,我们需要研究一下SQL_SLAVE_SKIP_COUNTER这个变量的意义了。

4、从库报错:log event entry exceeded max_allowed_packet的处理

一般主从复制中,主库上的表的含有BLOG列或长字符串的时候,在从库上恢复数据时可能会报上面的这个错误。这是因为含有打文本的记录无法通过网络传输导致,解决的方法就是在主从库上增加max_allowed_packet参数的大小,这个参数默认值为1MB,我们可以根据实际情况来进行设置。

mysql> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | |
+--------------------+----------+
row in set (0.01 sec) mysql> set global max_allowed_packet=;
Query OK, rows affected (0.00 sec)

尽量在my.cnf文件也设置好,下次启动可以及时生效。

5、主主复制时的自增长变量冲突问题。

双主架构多用于运维人员做维护等需要主从切换的场景,通过双主架构避免了重复搭建从库的麻烦。

不过主主复制的缺点就是如果主库的表采用自动增长变量,那么复制到从库的同一张表后很可能会引起主键冲突。因此我们就需要定制auto_increment_increment和auto_increment_offset的设置,保证多主之间不会有重复冲突。我们看一下这两个变量的作用:

mysql> set  @@auto_increment_increment=;
Query OK, rows affected (0.00 sec) mysql> set @@auto_increment_offset=;
Query OK, rows affected (0.00 sec) mysql> show variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | |
| auto_increment_offset | |
+--------------------------+-------+
rows in set (0.00 sec)

接下来我们看看结果:

mysql> create table haha ( id int auto_increment,primary key(id));
Query OK, rows affected (0.02 sec) mysql> insert into haha values (null),(null),(null);
Query OK, rows affected (0.01 sec)
Records: Duplicates: Warnings: mysql> select * from haha;
+----+
| id |
+----+
| |
| |
| |
+----+
rows in set (0.00 sec)

再来设置一个偏移量:

mysql> set @@auto_increment_increment=;
Query OK, rows affected (0.00 sec)
mysql> set @@auto_increment_offset=;
Query OK, rows affected (0.00 sec) mysql> show variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | |
| auto_increment_offset | |
+--------------------------+-------+
rows in set (0.00 sec) mysql> insert into haha values (null),(null);
Query OK, rows affected (0.00 sec)
Records: Duplicates: Warnings: mysql> select * from haha;
+----+
| id |
+----+
| |
| |
| |
| |
| |
+----+
rows in set (0.00 sec)

从上面的例子可以看出来,我们通过这两个参数可以方便地设置不同的主库上的自动增长列的值的范围,这样子在这些数据复制到从库上我们可以有效地避免主键的重复。

在多主上,比如这里有两个master,我们可以这样子设置

Master1上:auto_increment_increment = 2,auto_increment_offset = 2;(2,4,6,8,10.....)
Master2上:auto_increment_increment = 2,auto_increment_offset = 1;(1,3,5,7,9......)

大家记住一句:auto_increment_offset表示我们设置的序号是从哪个数值开始的。(这个数值最好不超过auto_increment_increment)。而auto_increment_increment表示我们自动增长的键依次增加的数值

6、查看从库的复制进度。

通过查看从库的复制进度,我们可以判断出来是否需要我们手工进行主从的同步工作等等。

我们主要是获取从库上的time值,这个值记录了从库当前执行的SQL时间戳与系统时间之间的差距,单位是秒。比如下面这个:

*************************** . row ***************************
Id:
User: system user
Host:
db: NULL
Command: Connect
Time:
State: Slave has read all relay log; waiting for more updates
Info: NULL

由于MySQL复制的机制是执行主库传输过来的二进制日志,二进制日志中的每个语句通过设置时间戳来保证执行时间和顺序的正确性,所以每个语句执行之前都会设置时间戳,而通过查询这个进程的time就可以知道最后设置的时间戳和当前时间的差距。

7、

MySQL主从复制日常管理维护篇的更多相关文章

  1. 【0.3】mysql复制的日常管理维护,mysql复制常见问题处理

    [1]复制的日常管理 #复制的日常管理与维护 [1.1]show slave status\G :在从库查看从库线程状态 [1.2]flush tables with read lock;  :主从不 ...

  2. MySql的日常管理

    连接故障恢复 MySQL套接字被误删 在UNIX系统上,本地客户以localhost为主机名建立MySQL连接,该过程是通过一个UNIX套接字文件(比如说,/tmp/mysql.sock文件)实现的. ...

  3. MySQL复制日常维护与管理

    一.复制一些常见设置 1.mysql复制启动时参数: mysql启动时的参数包括:master_host,master_port,master_user,master_password,master_ ...

  4. 5. MGR管理维护 | 深入浅出MGR

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 切换主节点 2. 切换单主/多主模式 3. 添加新节点 4. 删除节点 5. 异常退出的节点重新加回 6. 重 ...

  5. MySQL Cluster 日常维护

    在前面几篇文章已经详细介绍了MySQL Cluster的搭建,配置讲解.而且相信大家都掌握了基本用法.现在我们来看看Cluster的日常维护.熟悉日常维护,将有助于工作中更好的管理和使用Cluster ...

  6. 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离

    实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...

  7. 【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构

    一.业务发展驱动数据发展 随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案 ...

  8. 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  9. 看完这篇还不懂 MySQL 主从复制,可以回家躺平了~

    大家好,我是小羽. 我们在平时工作中,使用最多的数据库就是 MySQL 了,随着业务的增加,如果单单靠一台服务器的话,负载过重,就容易造成宕机. 这样我们保存在 MySQL 数据库的数据就会丢失,那么 ...

随机推荐

  1. 文档对象模型DOM(二)

    练习: 要求:界面上有个登录按钮,点击登录的时候,界面中弹出一个登录的方框,点击登录方框中的×的,登录方框消失. <!DOCTYPE html> <html> <head ...

  2. multimap多重映照容器(常用的方法总结)

    multimap和map的不同之处在于前者允许重复键值的元素出现. /*关于C++STL中mulitmap的学习,与map不同的是,multimap允许插入重复键值的元素*/ #include < ...

  3. UIKit 框架之UIControl

    前面的UIWebView.UIImageView这些都是视图,显示为主,与用户交互较少,最多也就是通过UIResponder与用户交互.但这样会很麻烦,还要判断点击次数等等问题,那问题就来了:OC中怎 ...

  4. winform窗体 小程序【进程】

    进程 一个应用程序就是一个进程,我的理解是,只要是打开应用程序,就会创建进程. 在.NET框架在using.System.Diagnostics名称空间中,有一个类Process,用来创建一个新的进程 ...

  5. Java Switch支持的类型问题

    常见支持类型为int,byte,short,char及枚举类型.以上是JDK1.6以前的版本.JDK1.7时,又增加了String. 参考资料:1.java switch支持的数据类型 2.java中 ...

  6. weex stream 之fetch的get、post获取Json数据

    无论何种平台,网络数据的获取都是十分重要的,最近学习weex,不可避免的要学习weex的数据请求方法了.网址 个人感觉,weex stream相较于其他平台,还算比较简单了,但是由于文档以及官方代码中 ...

  7. Java基础——String类(一)

    一.String 类代表字符串 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串 ...

  8. input不可编辑且颜色不变

    <input name="ly_qq" type="text" tabindex="2" onMouseOver="this ...

  9. luogu P4108 [HEOI2015]公约数数列——solution

    -by luogu 不会啊.... 然后%了一发题解, 关键是 考虑序列{$a_n$}的前缀gcd序列, 它是单调不升的,且最多只会改变$log_2N$次,因为每变一次至少除2 于是,当我们询问x时: ...

  10. Vue.js之组件系统

    vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. Vue.js组件系统 每一个新技 ...