Linux 上通过binlog文件恢复MySQL数据库详细步骤

  服务器的二进制日志记录着该数据库的所有增删改的操作日志(前提是要在自己的服务器上开启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后,检查开启binlog

mysql> 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.sql Enter 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: 3 Duplicates: 0 Warnings: 0 mysql> 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)

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/498d7cac46db00892cfd9286ececc5a7.html