博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql repilcation troubleshooting基础知识点
阅读量:2447 次
发布时间:2019-05-10

本文共 2933 字,大约阅读时间需要 9 分钟。

所需进程

Master上需要dumpslave需要IOSQL线程;

Dump读取master  binlog并发送给slave,每个slave对应1个;

Slave端的IO读取master传来的内容并写入relay logsql线程读取relay log并解析成sql应用于slave

 

连接参数

Slave-net-timeout

如超过此时间无相应则slave认定连接超时 ,默认3600s

Master-connect-retry

两次重连间隔时间,默认60s

Master-retry-count

重连次数 ,默认86400

 

为何引入relay log?

类似oraclestandby redoMysql  replication采用的是异步机制,slaveevent暂时保存relay log,而master 无需等待slave同步执行完就可以发送下一个event

 

何时切换

Master binlog切换一次relay log就随着切换一次;

IO线程重启;

Flush logs

达到max_relay_log_size限制,如果此值为0,则以max_binlog_size为准;

 

relay-log.info && master-log.info

中继日志通过这两个文件来跟踪复制进度;

Master-log.info记录连接master的信息(host/user/password/port)以及master log的读取位置read_master_log_pos

Slave IO启动时会读取该文件内容;

Relay-log.info则由slave sql线程维护,包含relay log的基本信息以及执行位置exec_master_log_pos,由此决定下一个要执行的事件;

这两个文件由relay-log-info-file/master-info-file指定,默认名如上;

只有执行start slave,这两个文件才会被创建,此后的每次slave重启,都会从这两个文件获取复制/执行进度;

 

如果relay log丢失但是relay-log.info还在,便可以查看当前sql线程的进度,通过change master toslavemaster重新读取相应bin log

 

Show salve status

Read_master_log_posI/O进程读取到masterbinary log的位置

Exec_master_log_possql进程执行到的master binary log位置,如果有延迟则会落后于read_master_log_pos

Seconds_behind_master:即使此参数为0,也不一定意味着slave已经同步,比如主备之间的网络断开但IO线程还未察觉,即slave_net_timeout尚未计时;

 

通过比较read_master_log_posexec_master_log_pos,可以确认是否有事件等待执行;

 

 

Slave上与复制有关的线程包括I/O threadsql thread

I/O线程错误

参数log_warnings=1(默认)会记录I/O线程的错误

有几种常见可能

1

主库上的user没有replication slave权限

2

网络无法连接

使用ping命令查看OS是否正常;

telnet master_host port查看mysql是否启动;

远程连接mastermysql h host p port  -uUser p检验密码是否正确,成功后查询select user(), current_user()--避免proxy user或使用其他用户连接,再执行show grants验证权限;

3

频繁断线

使用tcpdump/netstat检查网络

Netstat a| grep port应该能显示与master建立的连接

Tcpdump I en1 host mast_host port 3306

 

如果lag太大,使用tcpdump或通过复制大文件的方式检验网络

Sql thread只有一个,当master负载繁忙时可能会导致复制延时,当排除以上可能后,只能升级硬件或调优参数,要么就使用多线程sql

 

有时sql 线程可能会抱错delay log corrupted,大部分时候是IO线程操作引起的,也有可能masterbinlog

此时应使用mysqlbinlog检查master binlogdelay log,如果前者出错,手工应用slavestart slave until ,然后检查主备库上的表checksum table test

 

 

SQL线程错误

最常见的是master/slave表结构不一致

如果show slave status显示的sql文本不全,则需使用mysqlbinlog查看masterbinlogslave relaylog

 

Mk-heartbeat

可用于监控replication延迟

首先在master上创建一个名为heartbeat的表,结构如下

CREATE TABLE heartbeat (

    ts                    varchar(26) NOT NULL,

    server_id             int unsigned NOT NULL PRIMARY KEY,

    file                  varchar(255) DEFAULT NULL,    -- SHOW MASTER STATUS

    position              bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS

    relay_master_log_file varchar(255) DEFAULT NULL,    -- SHOW SLAVE STATUS

    exec_master_log_pos   bigint unsigned DEFAULT NULL  -- SHOW SLAVE STATUS

  );

然后再slave端开启监控

假定某级联复制master -> slave1 -> slave2

 

mk-heartbeat --daemonize -D test --update -h master

mk-heartbeat --daemonize -D test --update -h slave1

监控masterslave2的延迟

mk-heartbeat -D test --master-server-id 1 --check slave2

监控 slave1slave2的延迟

mk-heartbeat -D test --master-server-id 2 --check slave2

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-757959/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15480802/viewspace-757959/

你可能感兴趣的文章
linux内核打印堆栈信息_如何在Linux内核中输出函数堆栈
查看>>
php 页面重定向_如何在PHP中使用HTTP 301重定向页面
查看>>
iphone 日历 灰色_将iPhone假期日历更改为本地日历
查看>>
如何在JavaScript的新窗口中打开URL?
查看>>
dcm图像实例图像下载_在哪里搜索和下载免费图像?
查看>>
去处hmtl标签_在HMTL HEAD中使用“ META”标签重定向页面
查看>>
如何在Fedora Linux上为Scala安装sbt
查看>>
iptables 端口转发_使用iptables转发端口
查看>>
vs2013 码云_2013年云计算会议
查看>>
yum安装低版本软件包_在Yum中安装软件包的特定旧版本
查看>>
gitolite_如何设置Gitolite Git服务器-十分钟教程
查看>>
手机上将mp4转换成amv_如何在Linux上将所有文本从大写转换为小写?
查看>>
mplayer 视频播放器_如何全屏播放视频并使它与MPlayer循环播放?
查看>>
ssh客户端会话_如何保持Linux SSH会话不断开连接-服务器和客户端修复
查看>>
ssh用户解锁_如何在Linux上通过ctrl-s意外解锁锁定的SSH终端?
查看>>
hdfs datanode_如何找到在HDFS中实际存储文件的DataNode?
查看>>
虚拟机虚拟化cpu性能_如何调整系统以在虚拟化情况下实现高性能?
查看>>
stderr 重定向_如何判断是否将其STDERR重定向到Linux上Bash脚本中的文件?
查看>>
svn标记某些文件不提交_如何使标记列表将具有某些扩展名的特定文件识别为C源文件?...
查看>>
只完全安装ubuntu_如何在Ubuntu上完全安装乳胶
查看>>