mysqlbinlog
###############################
增量恢复:mysqlbinlog mysql-bin.000001 | mysql -uroot -p your_database_name
mysqlbinlog 常用参数:
(1)-d:指定特定数据库的binlog;
(2)-r:相当于重定向到指定文件,与>、<作用相同;
(3)--start-position和--stop-position:按照指定位置解析binlog日志(精确),如不接--stop-positiion则一直到binlog日志结尾;
(4)--start-datetime和--stop-datetime:按照指定时间解析binlog日志(模糊,不准确),如不接--stop-datetime则一直到binlog日志结尾;
(5)-D --disable-log-bin:禁止恢复过程产生日志。指定-D时使用mysqlbinlog解析binlog时,会看到sql_log_bin=0。也可以再把binlog解析到普通SQL文件,在mysql命令行下执行SQL文件前,手工设定set sql_log_bin=0,执行恢复SQL的过程就不会产生日志,恢复后再恢复set sql_log_bin=1。sql_log_bin 是一个动态变量,修改该变量时,可以只对当前会话生效(Session);
(6)-v :显示SQL语句,在行事件中重构伪SQL语句,将自动生成带注释的SQL语句,这个并非原始SQL语句(Reconstruct pseudo-SQL statements out of row events);
(7)-vv:显示的SQL语句之后会加上字段属性注释,另外,若配置了参数binlog_rows_query_log_events,则会显示原始SQL语句;
(8)--base64-output=decode-rows:不显示BINLOG内容部分,注意:做恢复操作时不能加该参数,否则不能增量恢复;
1、查看远程服务器上的二进制日志文件:这里
mysqlbinlog -R -h192.168.1.101 -uroot -p123456 mysql-bin.000036 > igoodful.sql
2、指定位置点。start <= pos < end
3、指定时间。
4、mysqlbinlog --base64-output=DECODE-ROWS -v -v mysql-bin.000776|less
# 那么能否看到原始SQL语句呢?答案是可以,但是必须设置系统变量binlog_rows_query_log_events
mysql> show variables like 'binlog_rows_query_log_events'; +------------------------------+-------+ | Variable_name | Value | +------------------------------+-------+ | binlog_rows_query_log_events | OFF | +------------------------------+-------+ 1 row in set (0.00 sec) mysql> set binlog_rows_query_log_events=1; Query OK, 0 rows affected (0.00 sec) mysql> flush logs; Query OK, 0 rows affected (0.01 sec) mysql> show master status; +----------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------------------+----------+--------------+------------------+-------------------+ | DB-Server-bin.000026 | 120 | | | | +----------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) mysql>
#########################
###############################