mysqlbinlog 参数

-v 选项

明文显示sql语句

$ mysqlbinlog –base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001

-d 选项

将只显示对test数据库的操作日志
$ mysqlbinlog /var/lib/mysql/mysql-bin.000001 -d test

-o 选项

忽略掉日志中的前n个操作
$ mysqlbinlog –base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001 -d test -o 14 //14个操作代表:日志显示跳过14个at。

-r 选项

将输出的文本格式日志输出到指定文件
$ mysqlbinlog –base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001 -r resultfile //将文件结果输出到文件resultfile中
$ more resultfile

-s 选项

将内容进行简单显示
$ mysqlbinlog –base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001 -s //简单显示后,没有了详细的sql语句。

–start-datetime# 和–stop-datetime=# 显示时间范围内的日志

//显示9:00 ~12:00之间的日志
$ mysqlbinlog –base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001 –start-datetime=’2018/08/30 09:00:00′ –stop-datetime=’2018/08/30 12:00:00′

–start-position=#和–stop-position=#
$ mysqlbinlog –base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001 –start-position=944

常见组合

获取特定数据库条目

默认情况下,mysqlbinlog会显示所有的内容,太过于杂乱。

使用 -d 选项,可以指定一个数据库名称,将只显示在该数据库上所发生的事件。

$ mysqlbinlog -d crm mysqld-bin.000001 > crm-events.txt

也可以使用 –database 命令,效果相同。

$ mysqlbinlog -database crm mysqld-bin.000001 > crm-events.txt在输出中只显示语句

在输出中只显示语句

默认情况下,正如在前面的示例输出中看到的一样,除了SQL语句之外,在mysqlbinlog输出中还会有一些附加信息。如果只想查看常规的SQL语句,而不需要其他内容,那么可以使用 -s 选项,如下所示。

也可以使用 –short-form 选项,效果相同。

$ mysqlbinlog -s mysqld-bin.000001

$ mysqlbinlog –short-form mysqld-bin.000001

下面是上述命令的部分输出。在这里,它将只显示来自给定二进制日志文件的SQL语句。

SET TIMESTAMP=1501096106/*!*/;

insert into employee values(400,’Nisha’,’Marketing’,9500)/*!*/;

SET TIMESTAMP=1501096106/*!*/;

insert into employee values(500,’Randy’,’Technology’,6000)

不会显示像下面这样的条目:

# at 1201

#170726 15:08:26 server id 1 end_log_pos 1329 Query thread_id=3 exec_time=0 error_code=0

查看特定开始时间的条目

下面将只提取从指定时间开始的条目。在此之前的任何条目都将被忽略。

$ mysqlbinlog –start-datetime=”2017-08-16 10:00:00″ mysqld-bin.000001

当你想要从一个二进制文件中提取数据时,这是非常有用的,因为你希望使用它来恢复或重构在某个时间段内发生的某些数据库活动。时间戳的格式可以是MySQL服务器所理解的DATETIME和timestamp中的任何类型。

单表恢复

mysqlbinlog解析后能或得库级的binlog,如果只需要单表恢复,就需要在把binlog转储为普通SQL文件后,利用Linux的grep命令来提取单表的binlog

$ mysqlbinlog /var/lib/mysql/master-log.000001 -d test> ./backup/test.sql
$ grep -B3 -w test_a test.sql |grep -v ‘^–$’ > test_a.sql

参数解释:

-B –before-context=NUM 打印匹配本身以及前面的几个行由NUM控制,可以把时间戳位置点都能找到。

作者 admin

百度广告效果展示