_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#151019 21:26:05 server id 1 end_log_pos 120 CRC32 0x001e6758 Start: binlog v 4, server v 5.6.25-log created 151019 21:26:05
BINLOG '
//at 4 偏移值
//事件的日期事件,MySQL会使用他们来产生SET TIMESTAMP
//服务器的服务器id
//end_log_pos 下一个事件的偏移字节
//事件类型,这里是Xid,常见的还有其他,例如:Intvar,Query,Stop,Format_desc
//原服务器上执行语句的线程id,用于审计和CONNECTION_ID()
//exec_time对于master端的Binlog来说是执行这个event所花费的时间
//原服务器产生的错误代码
?
?
二进制日志实现稍微有点复杂,可以从更深层次来分析
?
日志导出
[root@localhost binarylog]# mysqlbinlog --start-position="120" --stop-position="332" mysql_bin.000005 | gzip >extra_01.sql.gz
[root@localhost binarylog]# mysqlbinlog --start-position="120" --stop-position="332" /mysql_bin.000005 | mysql -uroot -p
[root@localhost binarylog]# mysqlbinlog --start-datetime="2014-12-15 20:15:23" /mysql_bin.000005 --result-file=extra02.sql
[root@localhost binarylog]# mysqlbinlog --start-position="120" --stop-position="332" mysql_bin.000005 mysql_bin.000006 | more
[root@localhost binarylog]# mysqlbinlog --database=test --set-charset=utf8 mysql_bin.000005 mysql_bin.000006 >test.sql
[root@localhost binarylog]# mysqlbinlog -urobin -p -h192.168.1.116 -P3306 --stop-datetime="2014-12-15 20:30:23" --read-from-remote-server mysql_bin.000005 |more
[root@localhost binarylog]# mysqlbinlog -urobin -p -h192.168.1.177 -P3606 --read-from-remote-server -vv mysql_bin.000005 >row.sql
?
?
日志清除
?
//清除所有日志(不存在主从复制关系)
mysql> RESET MASTER;
//清除指定日志之前的所有日志
mysql> PURGE MASTER LOGS TO 'mysql-bin.000003';
//清除某一时间点前的所有日志
mysql> PURGE MASTER LOGS BEFORE '2015-01-01 00:00:00';
//清除 n 天前的所有日志
mysql> PURGE MASTER LOGS BEFORE CURRENT_DATE - INTERVAL 10 DAY;
五、中继日志
中继日志是一组复制在从服务器复制过程中创建的日志文件。
?
格式和二进制日志相同,其中包含影响数据或结构事件的记录,mysqlbinlog可用于显示其内容。它由一组的中继日志文件和包含所有中继日志文件的列表的索引文件,从主服务器的二进制日志读取然后写入到从服务器。一旦不再需要的旧中继日志文件将自动删除,没有直接的删除中继日志的机制,因为SQL线程可以负责完 成。
?
在下面的条件下创建新的中继日志
?
每次I/O线程启动时创建一个新的中继日志。
?
当日志被刷新时;例如,用FLUSH LOGS或 mysqladmin flush-logs。
?
当当前的中继日志文件变得太大时。“太大”含义的确定方法:
?
max_relay_log_size,如果max_relay_log_size > 0
?
max_binlog_size,如果max_relay_log_size = 0
?
master.info && relay-log.info
从服务器在数据目录中另外创建两个小文件。这些状态文件默认名为主master.info和relay-log.info
?
1、由I/O线程更新master.info文件。文件中的行和SHOW SLAVE STATUS显示的列的对应关系为
?
行
描述
1
文件中的行号
2
Master_Log_File
3
Read_Master_Log_Pos
4
Master_Host
5
Master_User
6
密码(不由SHOW SLAVE STATUS显示)
7
Master_Port
8
Connect_Retry
9
Master_SSL_Allowed
10
Master_SSL_CA_File
11
Master_SSL_CA_Path
12
Master_SSL_Cert
13
Master_SSL_Cipher
14
Master_SSL_Key
?
2、由SQL线程更新relay-log.info文件。文件中的行和SHOW SLAVE STATUS显示的列的对应关系为:
?
行
描述
1
Relay_Log_File
2
Relay_Log_Pos
3
Relay_Master_Log_File
4
Exec_Master_Log_Pos
?
当备份从服务器的数据时,你还应备份这两个小文件以及中继日志文件。它们用来在恢复从服务器的数据后继续进行复制。如果丢失了中继日志但仍然有relay-log.info文 件,你可以通过检查该文件来确定SQL线程已经执行的主服务器中二进制日志的程度。然后可以用Master_Log_File和Master_LOG_POS选 项执行CHANGE MASTER TO来告诉从服务器重新从该点读取二进制日志。当然,要求二进制日志仍然在主服务器上。
?
如果从服务器正复制LOAD DATA INFILE语句,你应也备份该目录内从服务器用于该目的的任何SQL_LOAD-*文件。从 服务器需要这些文件继续复制任何中断的LOAD DATA INFILE操作。用--slave-load-tmpdir选项来指定目录的位置。如果