mysql 通过bin-log恢复数据方法详解
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-02 20:18:27 浏览: 评论:0
mysql中bin-log在mysql默认状态下是没有打开的,我们要先打开mysql 开启bin-log功能,然后再通过备份的bin-log进行数据库恢复了.
今天看了同事不小心删除了mysql数据库中的用户表,还好有打开mysql的bin-log记录了日志,这样就可以通过日志来还原之前备份的数据,具体的操作是通过mysqlbinlog这个指令来完成的,代码如下:
- /mysql/bin/mysqlbinlog --database=fox --start-date="2013-01-22 5:00:00" --stop-date="2013-01-22 9:00:00" /mysql/data/mysql-bin.000001 | /mysql/bin/mysql -u root -p123456 -f
具体的参数看下名字就能明白.
database:指定具体的数据库
start-date:开始时间
stop-date:结束时间
/mysql/data/mysql-bin.000001:
指定的日志文件:如果你没有备份数据的话,你就必须通过日志文件一个一个还原,记得顺序不能乱,如果你没有备份数据,日志又被部分删除的话,那么就悲剧了,因此,还原只是一种方法,最重要的还是定期备份数据,只要备份数据在,日志文件在,东西都可以解决.
同时记录一些操作日志的方法.
查看所有日志:show master logs;
当前使用的binlog文件:show binlog events g;
产生一个新的binlog日志文件:flush logs;
删除所有二进制日志,并从新开始记录:flush logs;reset master;
这里突然有一种想法,是否每次备份完数据以后就把之前的日志清理下,这样一旦发生问题,就可以从最近的日志开始还原,这个只是我的一种想法,有什么问题请指正.
同时大家如果希望不在错误操作delete这个可以在mysql启动的时候加入-U这个参数
启动MySQL的时候加上参数 -U.
-U, –safe-updates Only allow UPDATE and DELETE that uses keys.
他的作用是防止执行delete的时候没带有条件语句,如果没加上where则语句不执行.
一次完整的Mysqlbin-log日志恢复过程实例
1).创建一个表,代码如下:
- mysql>usetest;
- mysql>createtable t1(id int);
- mysql>showtables;
2).添加两行数据,代码如下:
- mysql>insertinto t1 values(1);
- mysql>insertinto t1 values(2);
- mysql>select *from t1;
3).备份现有数据(09:30),代码如下:
#mysqldump -uroot-p123456 test -l -F > /tmp/test.sql
4).在备份完后再添加三行数据记录,代码如下:
- mysql>insertinto t1 values(3);
- mysql>insertinto t1 values(4);
- mysql>insertinto t1 values(5);
- --phpfensi.com
5).此时突然数据库损损坏或者认为删除,代码如下:
mysql>droptable t1;
6).用已备份的test.sql来恢复数据库,代码如下:
#mysql -uroot-p123456 test < test.sql
7).从bin-log日志恢复,代码如下:
- #/usr/local/mysql/bin/mysqlbinlog–no-defaults mysql-bin.000006|more//查看bin-log日志,在我的虚力机上bin-log日志从mysql-bin.000005开始
- #/usr/local/mysql/bin/mysqlbinlog--no-defaults --stop-position=”272” mysql-bin.000006 |/usr/local/mysql/bin/mysql -uroot -p123456 //恢复bin-log日志
如果你没有开启bin日志我们可参考正同方法开启.
一、 Mysqlbin-log 日志
1.开启Mysqlbin-log 日志
- #vi/etc/my.cnf
- [client]
- #password =your_password
- port =3306
- socket =/tmp/mysql.sock
- default-character-set-utf8
- .......
- [mysqld]
- port= 3306
- socket= /var/lib/mysql/mysql.sock
- log-slow-queries=mysql-slowlog
- log-error=mysql.err
- log=mysql.log
- log-bin=mysql-bin//删除#符号
2.查看二进制文件(mysql-bin.******),代码如下:
#cd/usr/local/mysql/bin/ && ls
3.查看mysqbinlog日志是否开启,代码如下:
mysql>showvariables like “%log-bin%;
4.与Mysqlbin-log有关的日志操作,代码如下:
- mysql>flushlogs;//此时就会多一个最新的bin-log日志
- mysql>showmaster status;//查看最后一个bin日志
- mysql>resetmaster;//清空所有的bin-log日志
- mysql>mysqlbinlog–no-defaults mysql-bin.******|more//查看bin-log日志
Tags: bin-log mysql恢复数据
- 上一篇:MySQL无法远程访问处理办法
- 下一篇:mysql中文全文搜索之学习笔记
相关文章
- ·mysql中bin-log日志操作命令(2014-09-24)
- ·mysql关闭与删除bin-log日志详解(2014-09-29)
- ·利用MySQL中InnoDB数据文件中的恢复数据(2014-09-28)
- ·mysql恢复数据学习笔记(2014-10-01)
- ·Mysql备份压缩及恢复数据库方法总结(2014-10-04)
- ·mysql日志恢复数据方法介绍(2014-10-08)
- ·mysql恢复数据数据出现Variable sql_mode cant 解决方法(2014-10-10)
- ·MySQL数据库无法启动实现数据恢复的例子(2015-04-20)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)