mysql binlog 常用命令及问题整理


1:开启binlog日志记录

# log-bin
log-bin = E:/log/logbin.log


查看备份的二进制文件
c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001


">": 导入到文件中; ">>": 追加到文件中
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000001 > e:/log/log.sql
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000002 >> e:/log/log.sq

2.2 按指定位置导出:
c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 > e:/log/log3.txt

2.3 按指定时间导出:
c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 > e:/log/log_by_date22.txt


3:从备份恢复数据库
c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001 | mysql -u root -p
mysqlbinlog d:/mysql/data/binlog.000001 | mysql -uroot -pxcg213

3.2 按指定位置恢复:


c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 | mysql -u root -p

3.3 按指定时间恢复:


c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 | mysql -u root -p

3.4 通过导出的脚本文件恢复


c:\mysql\bin\>mysql -e "source e:/log/log.sql"

4.其他常用操作
4.1 查看所有日志文件

Sql代码
复制代码 代码如下:

mysql>show master logs;

4.2 当前使用的binlog文件
>show binlog events;

mysql>show binlog events \g;

4.3 产生一个新的binlog日志文件
Sql代码
复制代码 代码如下:

mysql>flush logs;

4.4 删除所有二进制日志,并从新开始记录(注意:reset master命令会删除所有的二进制日志)


mysql > flush logs;
mysql > reset master;

4.5 快速备份数据到sql文件


c:\mysql\bin>mysqldump -u root -p --opt --quick interactive > e:/log/mysqldump.sql

为了方便查看,把从脚本恢复的命令在写一次

c:\mysql\bin\>mysql -e "source e:/log/mysqldump.sql"
更换策略:
使用索引来循环文件,在以下条件将循环至下一个索引
1。服务器重启
2。服务器被更新
3。日志到达了最大日志长度 max_binlog_size
4。日志被刷新 mysql> flush logs;
-------------------------------------------
2.记录到二进制日志知的内容配置
binlog-do-db=sales 只记录sales库
binlog-ignore-db=sales 除sales库不记录,其他都记录

但是如果在操作数据库之前,不使用use $dbname 那么所有的SQL都不会记录
如果使用了use $dbname,那么判断规则取决于这里的$dbname,而不是SQL中操作的库

----------------------------------------------------------------------------------
ERROR 1665 (HY000) at line 33: Cannot execute statement: impossible to write to
binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage
 engine limited to row-based logging. InnoDB is limited to row-logging when tran
saction isolation level is READ COMMITTED or READ UNCOMMITTED.

解决办法:
mysql> SET SESSION binlog_format = 'ROW';
   mysql> SET GLOBAL binlog_format = 'ROW';

解释参考:http://www.cnblogs.com/sunson/archive/2012/05/28.html
msyql>show variables like 'binlog%';
当然了,也能够在运行时动态修正binlog的款式。例如

mysql> SET SESSION binlog_format = 'STATEMENT';
mysql> SET SESSION binlog_format = 'ROW';
mysql> SET SESSION binlog_format = 'MIXED';

mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';

-------------------------------------------------------------------------------------
3.二进制日志不准确的处理http://www.lampblog.net/2011/01/mysql-binlog%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%97%A5%E5%BF%97%E8%AF%A6%E8%A7%A3/
默认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的语句丢失。
要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。
即使sync_binlog设置为1,出现崩溃时,也有可能表内容和二进制日志内容之间存在不一致性。

如果崩溃恢复时MySQL服务器发现二进制日志变短了(即至少缺少一个成功提交的InnoDB事务),
如果sync_binlog =1并且硬盘/文件系统的确能根据需要进行同步(有些不需要)则不会发生,则输出错误消息 (“二进制日志<名>比期望的要小”)。
在这种情况下,二进制日志不准确,复制应从主服务器的数据快照开始。
为了您的安全,请只打开来源可靠的网址

猜你喜欢

转载自suihr.iteye.com/blog/1936870