mysql利用binlog日志恢复数据库的例子

binlog日志用于记录所有更新了数据或者已经潜在更新了数据的所有语句。语句以“事件”的形式保存,它描述数据更改。当我们因为某种原因导致数据库出现故障时,就可以利用binlog日志来挽回(前提是已经配置好了binlog),接下来我们来配置
一、开启mysql-binlog日志

在mysql配置文件my.cnf加上如下配置

 代码如下 复制代码

[mysqld]
log-bin=mysql-bin

重启mysql

 代码如下 复制代码

 
service mysqld restart

二、备份数据库

1)先查看一下当前数据库情况

 代码如下 复制代码

mysql> select * from t1; +------+ | id | +------+ | 1 | | 2 | +------+ 2 rows in set (0.00 sec)

 
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

2)备份数据到/tmp/test.sql

 代码如下 复制代码

 
[root@localhost ~]# whereis mysqldump
mysqldump: /usr/bin/mysqldump /usr/share/man/man1/mysqldump.1.gz
[root@localhost ~]# /usr/bin/mysqldump -uroot -p123456 test > /tmp/test.sql

三、这时模拟误操作(插入3条数据,删除数据库)

 

 代码如下 复制代码

mysql> insert into t1 values(3);
Query OK, 1 row affected (0.00 sec)
 
mysql> insert into t1 values(4);
Query OK, 1 row affected (0.00 sec)
 
mysql> insert into t1 values(5);
Query OK, 1 row affected (0.00 sec)
 
mysql> flush logs;#关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1。www.111cn.net
Query OK, 0 rows affected (0.05 sec)

 
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      106 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.01 sec)

删除数据

 

 代码如下 复制代码

mysql> truncate t1;
Query OK, 0 rows affected (0.00 sec)
 
mysql> select * from t1;
Empty set (0.01 sec)
 
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

此时突然数据库损坏或者人为删除

 

 代码如下 复制代码

mysql> drop table t1;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show tables;
Empty set (0.00 sec)

四、此时数据库已经被完全破坏

1)用已经备份的/tmp/test.sql来恢复数据

 代码如下 复制代码

 
[root@localhost]# mysql -uroot -p123456 test </tmp/test.sql
[root@localhost]# mysql -uroot -p123456 test

 
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)
 
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

2)还有三条数据没有恢复,怎么办。只能用bin-log来恢复

 代码如下 复制代码

 
[root@localhost]# /usr/bin/mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001 | more
[root@localhost]# /usr/bin/mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001 | /usr/bin/mysql -uroot -p123456 test

 
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+
5 rows in set (0.00 sec)

3)恢复成功

【总结】:mysql备份和bin-log日志

备份数据:

 

 代码如下 复制代码

mysqldump -uroot -p123456 test -l -F '/tmp/test.sql'

-l:读锁(只能读取,不能更新)
-F:即flush logs,可以重新生成新的日志文件,当然包括log-bin日志

查看binlog日志:

 代码如下 复制代码

 
mysql>show master status

导入之前备份数据:

 代码如下 复制代码

 
mysql -uroot -p123456 test -v -f </tmp/test.sql

-v查看导入的详细信息
-f是当中间遇到错误时,可以skip过去,继续执行下面的语句

恢复binlog-file二进制日志文件:

 代码如下 复制代码

 
mysqlbinlog --no-defaults binlog-file | mysql -uroot -p123456

从某一(367)点开始恢复:

 代码如下 复制代码

 
mysqlbinlog --no-defaults --stop-position="367" mysql-bin.000001| mysql -uroot -p123456 test

先查好那一点(用more来查看)

 代码如下 复制代码

 
[root@localhost mysql]# /usr/bin/mysqlbinlog --no-defaults mysql-bin.000002 --start-position="794" --stop-position="1055" | more

然后恢复:

 

 代码如下 复制代码
 
[root@localhost mysql]# /usr/bin/mysqlbinlog --no-defaults mysql-bin.000002 --start-position="794" --stop-position="1055" | /usr/bin/mysql -uroot -p123456 test

重置binlog日志

 

 代码如下 复制代码

mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
 www.111cn.net
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      106 |              |                  |
+------------------+----------+--------------+------------------+

mysql> flush logs;#关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1。

时间: 2024-09-29 05:45:30

mysql利用binlog日志恢复数据库的例子的相关文章

使用bin-log日志还原数据库的例子_Mysql

1.查看是否启用了日志:show variables like 'log_bin'; 2.查看当前日志文件名:show master status; 3.查找当前有哪些二进制日志文件:   mysql> show binary logs; 4.查看mysql日志:mysqlbinlog mysql-bin.000001mysqlbinlog mysql-bin.000006 > /root/bbx.log 5.使用新的binlog日志:(更新数据库日志) 复制代码 代码如下: 方法一:[roo

mysql 利用binlog增量备份,还原实例

mysql 利用binlog增量备份,还原实例 张映 发表于 2010-09-29 分类目录: mysql 一,什么是增量备份 增量备份,就是将新增加的数据进行备份.假如你一个数据库,有10G的数据,每天会增加10M的数据,数据库每天都要备份一次,这么多数据是不是都要备份呢?还是只要备份增加的数据呢,很显然,我只要备份增加的数据.这样减少服务器的负担. 二,启用binlog vi my.cnf log-bin=/var/lib/MySQL/mysql-bin.log,如果是这样的话log-bin

MySQL的binlog日志

binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. 一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版).二进制有两个最重要的使用场景: 其一:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致

mysql5.6 bin-log日志恢复数据

项目第一期上线后,后期的升级需要升级脚本,不能直接导入整个sql.所以这里开启mysql的bin-log,将所有执行的sql都记录到bin-log中. 我的系统是windows,mysql是社区版5.6 . 1. bin-log所在目录 mysql5.6安装完成后,其数据文件和log都保存在C:\Documentsand Settings\All Users\Application Data\MySQL\MySQL Server 5.6\data 这个目录下. 2. 确认bin-log日志是否开

MySQL之Xtrabackup备份恢复数据库

一.Xtrabackup介绍 1.Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具:xtrabackup.innobackupex xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表.innobackupex是参考了InnoDB Hotbackup的innoback脚本修改

SQL Server无日志恢复数据库(2种方法)_MsSql

SQL Server是一个关系数据库管理系统,应用很广泛,在进行SQL Server数据库操作的过程中难免会出现误删或者别的原因引起的日志损坏,又由于SQL Server数据库中数据的重要性,出现了以上的故障之后就必须对数据库中数据进行恢复.下文就为大家介绍一种恢复数据库日志文件的方法. 解决方法一 1.新建一个同名的数据库 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再重启sql server 5.此时打开企业管理器时会出现置疑,先

SQL Server无日志恢复数据库(2种方法)

SQL Server是一个关系数据库管理系统,应用很广泛,在进行SQL Server数据库操作的过程中难免会出现误删或者别的原因引起的日志损坏,又由于SQL Server数据库中数据的重要性,出现了以上的故障之后就必须对数据库中数据进行恢复.下文就为大家介绍一种恢复数据库日志文件的方法. 解决方法一 1.新建一个同名的数据库 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再重启sql server 5.此时打开企业管理器时会出现置疑,先

mysql的binlog日志删除与限制大小

现象:网站访问越来越慢,最后无法访问了,经过检查发现磁盘满了.仔细查询下来确认是由于mysql的binlog太多太大占用了空间. 分析过程及解决方案:通常出现这种问题都应该登录服务器检查磁盘.内存和进程使用的情况,通过top.df –h和free –m来检查,发现磁盘空间满了.再进一步通过du –sh对可以的目录进行检查,发现是mysql的binlog占用空间过大.清理binlog的方法如下: 1) 设置日志保留时长expire_logs_days自动删除 查看当前日志保存天数:  代码如下 复

mysql中bin-log日志操作命令

查看日志是否开启 1).可以通过Mysql配置文件my.cnf来确认(Mysql默认开启二进制日志记录): # Replication Master Server (default) # binary logging is required for replication log-bin=mysql-bin 刷新日志 flush logs; 查看当前日志位置 show master status; 查看当前所有日志 show master logs; 清空所有的bin-log日志 reset m