一. 概述
在上一篇中,搭建了一主一从的复制架构,这篇通过一些诊断方法来了解复制的运行状态和一些选项参数说明。上次mysql主从服务关机,今天在打开mysql服务,出现了错误信息。
1.首先 启动主从mysql服务
2.在从库上执行START SLAVE, 开始复制。
3.在从库上执行SHOW PROCESSLIST; slave已经连接上master, 并开始接受并执行日志。

4.在从库上执行SHOW SLAVE STATUS,查看复制状态
错误信息: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
5. 解决方法
-- 在主库上执行,记录日志文件号和位置,如下图所示:flush logs; show master status;

-- 在从库上执行CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000072',MASTER_LOG_POS=154; SLAVE START;
从库上再执行SHOW PROCESSLIST,显示了二个复制进程:一个是 I/O线程,连接master,id为7。 一个是SQL线程,id为8。如下图所示:

二 .复制中的各类文件
myql复制中涉及了两类非常重要的日志文件:二进制日志文件(binlog), 中继日志文件(relay log)。 binlog文件会把mysql中所有数据修改操作以二进制形式记录,包括create,drop,insert,update,delete操作等,但不记录查询select操作。对于二进制binlog文件格式,三种支持类型包括:Statement,Row,Mixed ( 在mysql 架构篇第一篇中有讲到)。
2.1 从库relay log 中继日志文件
从库中继日志文件relay log的文件格式,内容和主库二进制日志文件binlog一样,唯一的区别在于从库上的sql线程在执行完当前中继日志文件relay log中的事件之后,sql 线程会自动删除当前中继日志文件realy log,避免从库上的中继日志文件relay log占用过多的磁盘空间。
2.2 从库 master.info和realy-log.info文件
为了保证从库crash重启后,从库的I/O线程仍然能够知道从哪里开始复制,从库上默认还会创建二个日志文件master.info 和realy-log.info 用来保存复制的进度。 这两个文件在磁盘上以文件形式记录,位置在data目录下。I/O线程维护master.info 中主库二进制日志binlog的进度。sql线程维护realy-log.info 应用中继日志relay log 的进度。 总结是: I/O线程关联master.info,sql线程关联realy-log.info。再来看下复制原理图:

2.3 复制状态信息
在从库上通过SHOW SLAVE STATUS,能了解复制的状态, 里面的信息包含了master.info和realy-log.info的信息。
(1) master.info对应的信息如下:
| Master_Host | 172.168.18.201 | 主库IP |
| Master_User | rep1 | 主库上用于复制的账号 |
| Master_Port | 3306 | 主库mysql 端口 |
| Master_Log_File | mysql-bin.000072 | 从库I/O线程当前读取主库binlog的文件名 |
| Read_Master_Log_Pos | 514 | 从库I/O线程读取主库binlog的位置 |
(2) realy-log.info对应的信息如下:
| Relay_Log_File | xuegod64-relay-bin.000005 | SQL线程正在应用的relay log |
|
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率
|

