当数据丢失后,除了备份外,就是日志文件了,所在MYSQL日常管理中,若磁盘空间允许,建议开启BINLOG日志
1:开启binlog日志记录
修改mysql配置文件mysql.ini,在[mysqld]节点下添加
# log-bin
log-bin = /usr/local/mysql/logbin.log 《---也可以不指定路径,默认在mysql_base下
expire-logs-days=3 《---保存最近三天
重启数据库后,在指定的路径下便 会生成相关日志。
2、BINLOG日志文件不能直接查看,需导出来才行
导出日志可以根据自己的掌握的信息的需求导出
常见导出的几种方法
全部导出
[root@db1 tmp]# /usr/bin/mysqlbinlog mysqlbinlog.000002 > e.txt
根据时间段导出
[root@db1 tmp]# /usr/bin/mysqlbinlog --start-datetime="2013-01-23 17:00:00" --stop-datetime="2013-01-24 03:05:00" mysqlbinlog.000002 > e.txt
根据位置导出
[root@db1 tmp]# /usr/bin/mysqlbinlog --start-position=5 --stop-position=10 mysqlbinlog.000002 > e.txt
其它参数参考 mysqlbinlog --help
关于数据导入 正常情况下,用命令mysql < e.txt就能恢复了,但是如果 发现提示有很主键重复什么的。就需对导出的文件进行下整理,我的经验如下:
1、用ultredit 打开,使用批量替换功能 将/*!*/; 替换成/*!*/; ^p(也就是加个回车符)
2、将一些DDL语句过滤掉如:
#cat e.txt | grep -v '^#' | grep -v '^SET' | grep -v '^BEGIN' | grep -v ^$ | grep -v '^ROLLBACK' | grep -v '^DELIMITER' | grep -v '^\/\*\!\\C' > test1.txt
3、再用mysql < test1.txt导入即可
BINLOG 其它一些操作
强制轮转日志:mysql>flush logs; (在进行数据库备份后,建议强制轮转一次)
手工清除日志:mysql>show master logs;