ITPub博客

首页 > Linux操作系统 > Linux操作系统 > mysql repilcation troubleshooting基础知识点

mysql repilcation troubleshooting基础知识点

原创 Linux操作系统 作者:myownstars 时间:2013-04-08 16:29:14 0 删除 编辑

所需进程

Master上需要dump,slave需要IO和SQL线程;

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

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

 

连接参数

Slave-net-timeout

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

Master-connect-retry

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

Master-retry-count

重连次数 ,默认86400

 

为何引入relay log?

类似oracle的standby redo,Mysql  replication采用的是异步机制,slave将event暂时保存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 to让slave从master重新读取相应bin log

 

Show salve status

Read_master_log_pos:I/O进程读取到master的binary log的位置

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

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

 

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

 

 

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

I/O线程错误

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

有几种常见可能

1

主库上的user没有replication slave权限

2

网络无法连接

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

telnet master_host port查看mysql是否启动;

远程连接master,mysql –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线程操作引起的,也有可能master上binlog;

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

 

 

SQL线程错误

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

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

 

Mk-heartbeat

http://www.maatkit.org/doc/mk-heartbeat.html

可用于监控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

监控master到slave2的延迟

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

监控 slave1到slave2的延迟

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

 

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

上一篇: mysql备份工具
请登录后发表评论 登录
全部评论

注册时间:2010-03-18

  • 博文量
    375
  • 访问量
    3321135