共计 4264 个字符,预计需要花费 11 分钟才能阅读完成。
如果每天都会生成大量的二进制日志,这些日志长时间不清理的话,将会对磁盘空间带来很大的浪费,所以定期清理日志是 DBA 维护 MySQL 的一个重要工作
1)RESET MASTER
在上面查看日志存放的文件夹中,二进制日志命名的格式是以 mysql-bin.*,* 代表日志的序号, 序号是递增的, 其中还有 mysql-bin.index 是日志的索引文件, 记录了日志的最大序号
我们执行 RESET MASTER 命名删除全部日志
查看删除后的日志
可以看到, 以前的日志全部被清空, 新的日志从 00001 开始
2)PURGE MASTER LOGS TO & PURGE MASTER LOGS BEFORE
执行 PURGE MASTER LOGS TO ‘mysql-bin.******’ 命令,是将 ’******’ 编号之前的所有日志进行删除
执行 PURGE MASTER LOGS BEFORE ‘yyyy-mm-dd hh:mm:ss’ 命令,是将在 ’yyyy-mm-dd hh:mm:ss’ 时间之前的所有日志进行删除
3)-EXPIRE_LOGS_DAYS
此参数是设置日志的过期天数,过期的日志将会被自动删除,这有利于减少我们管理日志的工作量,需要修改 my.cnf
这里我们设定保存日志为 3 天,3 天之后过期的日志将被自动删除
恢复
bin-log 是记录着 mysql 所有事件的操作,当 mysql 发生灾难性错误时,可以通过 bin-log 做完整恢复,基于时间点的恢复,和基于位置的恢复
完整恢复,假定我们每天凌晨 2 点都会使用 mysqldump 备份数据库,但在第二天早上 9 点由于数据库出现了故障,数据无法访问,需要恢复数据,先使用昨天凌晨备份的文件进行恢复到凌晨 2 点的状态,在使用 mysqlbinlog 恢复自 mysqldump 备份以来的 binlog
mysql localhost mysql-bin.000001 | mysql -uroot -p
这样数据库就可以完全的恢复到崩溃前的完全状态
基于时间点的恢复,由于误操作,比如说删除了一张表,这时使用上面讲的完全恢复是没有用的,因为日志里面还存在误操作的语句,,我们需要的是恢复到误操作前的状态,然后跳过误操作的语句,再恢复后面操作的语句,假定我们删除了一张表的误操作发生在 10:00 这个时间点,我们可以使用下面的语句用备份和 binlog 将数据恢复到故障前
mysqlbinlog –stop-date=’2010-09-04 9:59:59′ /var/log/mysql-bin.000001 | mysql -uroot -p
然后跳过误操作的时间点,继续执行后面的 binlog
mysqlbinlog –start-date=’2010-09-04 10:01:00′ /var/log/mysql-bin.000001 | mysql -uroot -p
其中 –stop-date=’2010-09-04 9:59:59′ 和 –start-date=’2010-09-04 10:01:00′ 其中的时间是你误操作的时间点,当然了,这个时间点你需要你自己计算的,而且这个时间点还可以涉及到的不只是误操作,还可以有正确的操作也被跳过去了。
基于位置恢复,由于上面提到的,使用基于时间点的恢复可能出现,在一个时间点里面可能存在误操作和其他正确的操作,所以我们需要一种更为精确的恢复方式
使用 mysqlbinlog 查看二进制,可看到
其中 drop tables test1 这个误操作的 end_log_pos 为 8879917,几下这个 id, 得出它前后操作的 id 分别为 8879916,8879918
我们将进行位置恢复操作
mysqlbinlog –stop-position=’8879916′ /var/log/mysql-bin.000001 | mysql -uroot -p
mysqlbinlog –start-position=’8879918′ /var/log/mysql-bin.000001 | mysql -uroot -p
服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用 mysqlbinlog 实用工具。
应这样调用 mysqlbinlog:
shell> mysqlbinlog [options] log-files…例如,要想显示二进制日志 binlog.000003 的内容,使用下面的命令:
shell> mysqlbinlog binlog.0000003 输出包括在 binlog.000003 中包含的所有语句,以及其它信息例如每个语句花费的时间、客户发出的线程 ID、发出线程时的时间戳等等。
通常情况,可以使用 mysqlbinlog 直接读取二进制日志文件并将它们用于本地 MySQL 服务器。也可以使用–read-from-remote-server 选项从远程服务器读取二进制日志。
当读取远程二进制日志时,可以通过连接参数选项来指示如何连接服务器,但它们经常被忽略掉,除非你还指定了–read-from-remote-server 选项。这些选项是–host、–password、–port、–protocol、–socket 和–user。
还可以使用 mysqlbinlog 来读取在复制过程中从服务器所写的中继日志文件。中继日志格式与二进制日志文件相同。
mysqlbinlog 支持下面的选项:
·
—help,-?
显示帮助消息并退出。
·
—database=db_name,-d db_name
只列出该数据库的条目 (只用本地日志)。
·
–force-read,-f
使用该选项,如果 mysqlbinlog 读它不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,如果 mysqlbinlog 读到此类事件则停止。
·
–hexdump,-H
在注释中显示日志的十六进制转储。该输出可以帮助复制过程中的调试。在 MySQL 5.1.2 中添加了该选项。
·
–host=host_name,-h host_name
获取给定主机上的 MySQL 服务器的二进制日志。
·
–local-load=path,-l pat
为指定目录中的 LOAD DATA INFILE 预处理本地临时文件。
·
–offset=N,-o N
跳过前 N 个条目。
·
–password[=password],-p
此处含有隐藏内容,需要正确输入密码后可见!
当连接服务器时使用的密码。如果使用短选项形式 (-p),选项和 密码之间不能有空格。如果在命令行中–password 或 - p 选项后面没有 密码值,则提示输入一个密码。
·
–port=port_num,-P port_num
用于连接远程服务器的 TCP/IP 端口号。
·
–position=N,-j N
不赞成使用,应使用–start-position。
·
–protocol={TCP | SOCKET | PIPE | -position
使用的连接协议。
·
–read-from-remote-server,-R
从 MySQL 服务器读二进制日志。如果未给出该选项,任何连接参数选项将被忽略。这些选项是–host、–password、–port、–protocol、–socket 和–user。
·
–result-file=name, -r name
将输出指向给定的文件。
·
–short-form,-s
只显示日志中包含的语句,不显示其它信息。
·
–socket=path,-S path
用于连接的套接字文件。
·
–start-datetime=datetime
从二进制日志中第 1 个日期时间等于或晚于 datetime 参量的事件开始读取。datetime 值相对于运行 mysqlbinlog 的机器上的本地时区。该值格式应符合 DATETIME 或 TIMESTAMP 数据类型。例如:
shell> mysqlbinlog –start-datetime=”2004-12-25 11:25:56″ binlog.000003 该选项可以帮助点对点恢复。
·
–stop-datetime=datetime
从二进制日志中第 1 个日期时间等于或晚于 datetime 参量的事件起停止读。关于 datetime 值的描述参见–start-datetime 选项。该选项可以帮助及时恢复。
·
–start-position=N
从二进制日志中第 1 个位置等于 N 参量时的事件开始读。
·
–stop-position=N
从二进制日志中第 1 个位置等于和大于 N 参量时的事件起停止读。
·
–to-last-logs,-t
在 MySQL 服务器中请求的二进制日志的结尾处不停止,而是继续打印直到最后一个二进制日志的结尾。如果将输出发送给同一台 MySQL 服务器,会导致无限循环。该选项要求–read-from-remote-server。
·
–disable-logs-bin,-D
禁用二进制日志。如果使用–to-last-logs 选项将输出发送给同一台 MySQL 服务器,可以避免无限循环。该选项在崩溃恢复时也很有用,可以避免复制已经记录的语句。注释:该选项要求有 SUPER 权限。
·
–user=user_name,-u user_name
连接远程服务器时使用的 MySQL 用户名。
·
–version,-V
显示版本信息并退出。
MySQL 5.6.12 切换 binlog 二进制日志路径 http://www.linuxidc.com/Linux/2016-01/126979.htm
关于使用 MySQL binlog 对数据进行恢复的实战 http://www.linuxidc.com/Linux/2016-01/127808.htm
MySQL 5.6.12 切换 binlog 二进制日志路径 http://www.linuxidc.com/Linux/2016-01/126979.htm
mysqlbinlog 解析 binlog 乱码问题解密 http://www.linuxidc.com/Linux/2016-01/126978.htm
MySQL 通过 binlog 来恢复数据 http://www.linuxidc.com/Linux/2015-12/126897.htm
MySQL binlog 组提交与 XA(两阶段提交) http://www.linuxidc.com/Linux/2015-11/124942.htm
MySQL 使用备份和 binlog 进行数据恢复 http://www.linuxidc.com/Linux/2014-12/110875.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132466.htm