一、相关mysql主从复制技术技巧概览
1、登录数据库查看mysql线程同步状态
主库:
mysql> show processlist; +----+------+----------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+----------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ | 6 | rep | 10.0.0.7:35204 | NULL | Binlog Dump | 9189 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL | | 7 | root | localhost | NULL | Sleep | 8978 | | NULL | | 8 | root | localhost | NULL | Sleep | 1962 | | NULL | | 10 | root | localhost | NULL | Query | 0 | NULL | show processlist | +----+------+----------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ 4 rows in set (0.00 sec)
从库:
mysql> show processlist; +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ | 2 | root | localhost | NULL | Sleep | 9054 | | NULL | | 3 | system user | | NULL | Connect | 9279 | Waiting for master to send event | NULL | | 4 | system user | | NULL | Connect | 9070 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | | 5 | root | localhost | NULL | Query | 0 | NULL | show processlist | +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 4 rows in set (0.03 sec)
2、主库线程状态(State)值
以下列表显示了主从复制中主服务器的Binlog Dump线程的State列中可能看到的最常见状态(SHOW PROCESSLIST)。如果Binlog Dump线程在主服务器上看不到,这意味着复制没有运行,也就是说,目前没有连接任何Slave主机。 Sending binlog event to slave 二进制日志由各种事件组成,一个事件通常为一个更新加一些其它信息。线程已经从二进制日志读取了一个事件并且正将它发送到从服务器。 Finished reading one binlog; switching to next binlog 线程已经读完二进制日志文件并且正打开下一个要发送到从服务器的日志文件。 Has sent all binlog to slave; waiting for binlog to be updated 线程已经从二进制日志读取所有主要的更新并已经发送到了从服务器。线程现在正空闲,等待由主服务器上新的更新导致的出现在二进制日志中的新事件。 Waiting to finalize termination 线程停止时发生的一个很简单的状态。
3、从库I/O线程状态(State)值
Connecting to master 线程正试图连接主服务器。 Checking master version 建立同主服务器之间的连接后立即临时出现的状态。 Registering slave on master 建立同主服务器之间的连接后立即临时出现的状态。 Requesting binlog dump 建立同主服务器之间的连接后立即临时出现的状态。线程向主服务器发送一条请求,索取从请求的二进制日志文件名和位置开始的二进制日志的内容。 Waiting to reconnect after a failed binlog dump request 如果二进制日志转储请求失败(由于没有连接),线程进入睡眠状态,然后定期尝试重新连接。可以使用–master-connect-retry选项指定重试之间的间隔。 Reconnecting after a failed binlog dump request 线程正尝试重新连接主服务器。 Waiting for master to send event 线程已经连接上主服务器,正等待二进制日志事件到达。如果主服务器正空闲,会持续较长的时间。如果等待持续slave_read_timeout秒,则发生超时。此时,线程认为连接被中断并企图重新连接。 Queueing master event to the relay log 线程已经读取一个事件,正将它复制到中继日志供SQL线程来处理。 Waiting to reconnect after a failed master event read 读取时(由于没有连接)出现错误,线程企图重新连接前将睡眠master-connect-retry秒。 Reconnecting after a failed master event read 线程正尝试重新连接主服务器,当连接重新建立后,状态变为Waiting for master to send event。 Waiting for the slave SQL thread to free enough relay log space 正使用一个非零relay_log_space_limit值,中继日志已经增长到其组合大小超过该值。I/O线程正等待直到SQL线程处理中继日志内容并删除部分中继日志文件来释放足够的空间。 Waiting for slave mutex on exit 线程停止时发生的一个很简单的状态。
4、从库SQL线程状态(State)值
Reading event from the relay log 线程已经从中继日志读取一个事件,可以对事件进行处理了。 Has read all relay log; waiting for the slave I/O thread to update it 线程已经处理了中继日志文件中的所有事件,现在正等待I/O线程将新事件写入中继日志。 Waiting for slave mutex on exit 线程停止时发生的一个很简单的状态。
5、从库连接线程状态(State)值
这些线程状态发生在复制从库上,但与连接线程相关联,而不与I/O或SQL线程相关联。 Changing master 线程正在处理CHANGE MASTER TO语句。 Killing slave 线程正在处理STOP SLAVE语句。 Opening master dump table 此状态发生在Creating table from master dump之后。 Reading master dump table data 此状态发生在Opening master dump table之后。 Rebuilding the index on master dump table 此状态发生在Reading master dump table data之后。
6、查看mysql线程同步状态的用途
通过mysql线程同步状态查看数据库同步是否完成,用于主库宕机或者人工数据库主从切换迁移等。
主库宕机选择最快的从库提升为主,就需要查看,当然也可以利用mysql的半同步功能选择固定的库提升为主。