欢迎大家关顾我的淘宝店:点击进入
一 mysql的binlog简介:
Mysql会把用户对所有数据库的内容和结构的修改情况记入XXX-bin.n文件,而不会记录SELECT和没有实际更新的UPDATE语句。
1 日志文件的扩展
当停止或重启时,服务器会把日志文件记入下一个日志文件,Mysql会在重启时生成一个新的日志文件,文件序号递增,此外,如果日志文件超过max_binlog_size系统变量配置的上限时,也会生成新的日志文件。
2 日志文件的查看
Mysql提供了mysqlbinlog命令来查看日志文件,如mysqlbinlog xxx-bin.001 | more。在记录每条变更日志的时候,日志文件都会把当前时间给记录下来,以便进行数据库恢复。
3 日志文件的停用
可以使用SET SQL_LOG_BIN=0命令停止使用日志文件,然后可以通过SET SQL_LOG_BIN=1命令来启用。
4 使用日志进行数据库恢复
如果遇到灾难事件,应该用最近一次制作的完整备份恢复数据库,然后使用备份之后的日志文件把数据库恢复到最接近现在的可用状态。
使用日志进行恢复时需要依次进行,即最早生成的日志文件要最先恢复:
mysqlbinlogxxx-bin.00001 | mysql –u root –p
mysqlbinlogxxx-bin.00002 | mysql –u root –p
5备份过程
下边对Mysql的备份过程进行简单描述:
1)、首先备机启动备份,备机创建一个I/O线程,用于连接到主机并请求主机的更新语句。
2)、主机为每个备机创建一个线程用于发送二进制日志内容,该线程可以通过SHOWPROCESSLIST语句来查看,名称为Binlog Dump。
3)、备机I/O线程读取主机发送的更新并将其拷贝到本地文件,称为中继日志(relaylogs)。
4)、备机创建一个SQL线程用于读取中继日志并执行其中的更新语句。
这些线程的执行状态可以通过SHOWPROCESSLIST命令进行查看:
状态 | 描述 |
Sending binlog event to slave | 正在发送二进制事件到备机 |
Finished reading one binlog; switching to next binlog | 已经读完一个文件,正在切换到下个文件 |
Waiting to finalize termination | 等待结束(线程终止) |
其中备机的IO线程状态可以通过SHOWSLAVE STATUS进行查看:
状态 | 描述 |
Connecting to master | 尝试连接到主机 |
Checking master version | 检查主机的版本 |
Registering slave on master | 往主机注册备机 |
Requesting binlog dump | 请求日志文件 |
Waiting to reconnect after a failed request | 在请求失败后等待重新连接 |
Reconnecting after a failed binlog dump request | 正在重连 |
Waiting for master to send event | 等待主机发送数据 |
Queueing master event to the relay log | 正在将数据拷贝到中继日志 |
Waiting to reconnect after a failed master event | read 读取主机失败后等待重连 |
Reconnecting after a failed master event read | 正在重连 |
Waiting for the slave SQL thread to free enough relay log space IO | 正在等待sql线程执行后以便删除一些中继文件 |
Waiting for slave mutex on exit | 等待进程退出 |
查看备机的SQL线程状态:
状态 | 描述 |
Reading event from the relay log | 从relay log中读取日志 |
Has read all relay log; waiting for the slave I/O thread to update it | 已读完中继日志,等待备机IO线程更新 |
Waiting for slave mutex on exit | sql线程已经停止。 |
6 使用binlog进行mysql同步
MySQL使用Binlog进行数据库同步。在启用Binlog功能的MySQL数据库上,每一个操作(insert,update,delete等)都会写入到
binlog文件中。所以只要跟踪Binlog,就可以把对主数据库的操作在从数据库上重新执行。所以要进行MySQL的数据库同步,必须在
主服务器启用Binlog。
保证两台服务器的起点相同,是MySQL同步的关键。因为Binlog记录的数据只是操作,并没有数据本身,明确数据和Binlog的对应关
系,才能在保证数据完整。
MySQL数据库的同步机制限制了同步是一定要区分主/从服务器的,不能够在主/从服务器两台机器上同时执行写操作。因为
任何一个操作都是在主服务器上操作结束后才会通过Binlog发送到从服务器上,所以从服务器不能够执行任何修改数据的操作。
相关文档提到可以使用MySQL的同步机制构造一个同步的环形结构,依次配置主/从关系(极限情况是两台机器互为主/从),实
现所有数据库均可以进行写操作,但此种方式在数据一致性方面没有保证,因为两个数据库互相并不检查写锁定,会有同时更新同
一条记录的情况出现。
比较稳定的结构是一个主数据库负责写操作,根据负载情况配置一个或多个从数据库负责读操作。在负载不大的情况下使用从数据
库做实时的数据库备份也是一个很稳定的结构。
7利用binlog实现主从同步具体步骤:http://hi.baidu.com/useradd/blog/item/6c299726afc478178a82a1dd.html
8 具体mysql配置:http://saplingidea.iteye.com/blog/482060