一、
binlog 介绍 服务器的二进制日志记录着该数据库的所有增删改的操作日志(前提是要在自己的服务器上开启binlog),还包括了这些操作的执行时间。为了显示这些二进制内容,我们可以使用mysqlbinlog命令来查看。 用途1:主从同步 用途2:恢复数据库(也是线上出现一次数据库文件丢失后,才对这个有所了解并学习的) mysqlbinlog命令用法:shell> mysqlbinlog [options] log_file ...<!--[if !supportLists]-->1) mysqlbinlog 选项示例常见的选项有以下几个:--start-datetime从二进制日志中读取指定等于时间戳或者晚于本地计算机的时间。取值如:="1470733768" 或者="2016-08-09 5:09:28"示例: [root@hcloud ~]# mysqlbinlog --start-datetime="2016-08-09 5:05:27" /var/lib/mysql/mysql-bin.000001--stop-datetime从二进制日志中读取指定小于时间戳或者等于本地计算机的时间 取值和上述一样--start-position 从二进制日志中读取指定position 事件位置作为开始。取值:="2698"示例:[root@hcloud ~]# mysqlbinlog --start-position="2698" /var/lib/mysql/mysql-bin.000001--stop-position从二进制日志中读取指定position 事件位置作为事件截至。取值:="2698"二、环境准备以及备份恢复 1) 安装好mysql后,检查开启binlogmysql> SHOW BINARY LOGS;ERROR 1381 (HY000): You are not using binary logging
:上面提示说明没有服务器开启binlog 修改/etc/my.cnf 在mysqld选项中添加 一行内容如下: log-bin=mysql-bin 默认如果不给值的话,log-bin 的会以mysqld-bin 为索引,创建mysqld-bin.00001等 重启mysqld即可。 2) 检查下binlog mysql> show binary logs;+------------------+-----------+| Log_name | File_size |+------------------+-----------+| mysql-bin.000001 | 106 |+------------------+-----------+1 row in set (0.00 sec) 3) 先创建一些原始数据。mysql> create database Test_DB;
Query OK, 1 row affected (0.00 sec)
mysql> use Test_DB;
Database changed
mysql> CREATE TABLE OneTb(id INT(10) NOT NULL,name varchar(20),age INT(10));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into OneTb values (1,"user1",18);
mysql> insert into OneTb values (2,"user2",19);
insert into OneTb values (3,"user3",20); 检查下数据: mysql> select * from OneTb;+----+-------+------+| id | name| age|+----+-------+------+|1 | user1 | 18 ||2 | user2 | 19 ||3 | user3 | 20 |+----+-------+------+3 rows in set (0.00 sec) 4) 备份还原 (完整备份以及还原) 这里我们模拟一下做下每天的完整备份数据库任务。[root@hcloud ~]# mysqldump -uroot -p Test_DB > /data/mysqlbackup/Test_DB_0809-16:50.sqlEnter password: 模拟下操作失误,将数据修改错误了。mysql> update OneTb set age = 15;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select * from OneTb;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | user1 | 15 |
| 2 | user2 | 15 |
| 3 | user3 | 15 |
+----+-------+------+
3 rows in set (0.00 sec) 现在我们使用传统的方式来进行恢复还原。[root@hcloud ~]# mysql -uroot -p Test_DB < /data/mysqlbackup/Test_DB_0809-16:50.sql 再次查询一下:mysql> select * from Test_DB.OneTb;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | user1 | 18 |
| 2 | user2 | 19 |
| 3 | user3 | 20 |
+----+-------+------+
3 rows in set (0.00 sec) 可以看到数据都已经还原回来。 5) 利用binlog模拟还原 在原表的基础上在创建几条数据。 mysql> insert into Test_DB.OneTb values(4,"user4",21),(5,"user5",22),(6,"user6",23);Query OK, 3 rows affected (0.00 sec)Records: 3Duplicates: 0Warnings: 0mysql> select * from Test_DB.OneTb;+----+-------+------+| id | name| age|+----+-------+------+|1 | user1 | 18 ||2 | user2 | 19 ||3 | user3 | 20 ||4 | user4 | 21 ||5 | user5 | 22 ||6 | user6 | 23 |+----+-------+------+6 rows in set (0.00 sec) 如果这个时候我们把数据不小心修改了或者把库删除掉了,导致数据全部丢失,这个时候如果再用之前最新的备份文件 Test_DB_0809-16:50.sql,去恢复数据的话,那么将会丢掉备份之后新插入的数据。
注意:如果真的使用最近的一次备份文件去做的话,一定是在万不得已的情况(比如binlog 被删除,整个硬盘挂掉、、、 想想都可怕。。。)。 模拟误操作,批量更改下用户的名字。mysql> update Test_DB.OneTb set name="user10";Query OK, 6 rows affected (0.00 sec)Rows matched: 6Changed: 6Warnings: 0 不行,上一步不够狠,这里再狠一点,把表都给删除 mysql> drop table Test_DB.OneTb;ERROR 2006 (HY000): MySQL server has gone awayNo connection. Trying to reconnect...Connection id:3Current database: *** NONE ***Query OK, 0 rows affected (0.00 sec)
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-08/134162p2.htm
MongoDB基本操作命令Redis集群配置笔记相关资讯 MySQL数据库恢复 binlog文件恢复MySQL数据库
- 在删除ibdata1和ib_logfile的情况 (今 16:20)
- 本地导出的.sql数据库文件如何恢复 (11/19/2012 10:57:53)
| - myloader恢复MySQL数据库示例 (07/09/2015 19:38:02)
|
本文评论 查看全部评论 (0)