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';
当然了,也能够在运行时动态修正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.二进制日志不准确的处理默认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的语句丢失。
要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。
即使sync_binlog设置为1,出现崩溃时,也有可能表内容和二进制日志内容之间存在不一致性。
如果崩溃恢复时MySQL服务器发现二进制日志变短了(即至少缺少一个成功提交的InnoDB事务),
如果sync_binlog =1并且硬盘/文件系统的确能根据需要进行同步(有些不需要)则不会发生,则输出错误消息 (“二进制日志<名>比期望的要小”)。
在这种情况下,二进制日志不准确,复制应从主服务器的数据快照开始。
为了您的安全,请只打开来源可靠的网址