千家信息网

mysql数据库增量数据恢复的方法是什么

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇内容介绍了"mysql数据库增量数据恢复的方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2025年01月23日mysql数据库增量数据恢复的方法是什么

本篇内容介绍了"mysql数据库增量数据恢复的方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、工作场景

(1)MySQL数据库每晚12:00自动完全备份。

(2)某天早上上班,9点的时候,一同事犯晕drop了一个数据库!

(3)需要紧急恢复!可利用备份的数据文件以及增量的binlog文件进行数据恢复。

二、数据恢复思路

(1)利用全备的sql文件中记录的CHANGE MASTER语句,binlog文件及其位置点信息,找出binlog文件中增量的那部分。

(2)用mysqlbinlog命令将上述的binlog文件导出为sql文件,并剔除其中的drop语句。

(3)通过全备文件和增量binlog文件的导出sql文件,就可以恢复到完整的数据。

三、实例说明

----------------------------------------

首先,要确保mysql开启了binlog日志功能

在/etc/my.cnf文件里的[mysqld]区块添加:

log-bin=mysql-bin

然后重启mysql服务

----------------------------------------

(1)在ops库下创建一张表customers

mysql> use ops;

mysql> create table customers(

-> id int not null auto_increment,

-> name char(20) not null,

-> age int not null,

-> primary key(id)

-> )engine=InnoDB;

Query OK, 0 rows affected (0.09 sec)

mysql> show tables;

+---------------+

| Tables_in_ops |

+---------------+

| customers |

+---------------+

1 row in set (0.00 sec)

mysql> desc customers;

+-------+----------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+----------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| name | char(20) | NO | | NULL | |

| age | int(11) | NO | | NULL | |

+-------+----------+------+-----+---------+----------------+

3 rows in set (0.02 sec)

mysql> customers values(1,"wangbo","24");

Query OK, 1 row affected (0.06 sec)

mysql> customers values(2,"guohui","22");

Query OK, 1 row affected (0.06 sec)

mysql> customers values(3,"zhangheng","27");

Query OK, 1 row affected (0.09 sec)

mysql> select * from customers;

+----+-----------+-----+

| id | name | age |

+----+-----------+-----+

| 1 | wangbo | 24 |

| 2 | guohui | 22 |

| 3 | zhangheng | 27 |

+----+-----------+-----+

3 rows in set (0.00 sec)

(2)现在进行全备份

[root@vm-002 ~]# mysqldump -uroot -p -B -F -R -x --master-data=2 ops|gzip >/opt/backup/ops_$(date +%F).sql.gz

Enter password:

[root@vm-002 ~]# ls /opt/backup/

ops_2016-09-25.sql.gz

-----------------

参数说明:

-B:指定数据库

-F:刷新日志

-R:备份存储过程等

-x:锁表

--master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息

-----------------

(3)再次插入数据

mysql> customers values(4,"liupeng","21");

Query OK, 1 row affected (0.06 sec)

mysql> customers values(5,"xiaoda","31");

Query OK, 1 row affected (0.07 sec)

mysql> customers values(6,"fuaiai","26");

Query OK, 1 row affected (0.06 sec)

mysql> select * from customers;

+----+-----------+-----+

| id | name | age |

+----+-----------+-----+

| 1 | wangbo | 24 |

| 2 | guohui | 22 |

| 3 | zhangheng | 27 |

| 4 | liupeng | 21 |

| 5 | xiaoda | 31 |

| 6 | fuaiai | 26 |

+----+-----------+-----+

6 rows in set (0.00 sec)

(4)此时误操作,删除了test数据库

mysql> drop database ops;

Query OK, 1 row affected (0.04 sec)

此时,全备之后到误操作时刻之间,用户写入的数据在binlog中,需要恢复出来!

(5)查看全备之后新增的binlog文件

[root@vm-002 ~]# cd /opt/backup/

[root@vm-002 backup]# ls

ops_2016-09-25.sql.gz

[root@vm-002 backup]# gzip -d ops_2016-09-25.sql.gz

[root@vm-002 backup]# ls

ops_2016-09-25.sql

[root@vm-002 backup]# grep CHANGE ops_2016-09-25.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=106;

这是全备时刻的binlog文件位置

即mysql-bin.000002的106行,因此在该文件之前的binlog文件中的数据都已经包含在这个全备的sql文件中了

(6)移动binlog文件,并导出为sql文件,剔除其中的drop语句

查看mysql的数据存放目录,有下面可知是在/var/lib/mysql下

[root@vm-002 backup]# ps -ef|grep mysql

root 9272 1 0 01:43 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql

mysql 9377 9272 0 01:43 pts/1 00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

[root@vm-002 backup]# cd /var/lib/mysql/

[root@vm-002 mysql]# ls

ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.index mysql.sock test

[root@vm-002 mysql]# cp mysql-bin.000002 /opt/backup/

将binlog文件导出sql文件,并vim编辑它删除其中的drop语句

[root@vm-002 backup]# mysqlbinlog -d ops mysql-bin.000002 >002bin.sql

[root@vm-002 backup]# ls

002bin.sql mysql-bin.000002 ops_2016-09-25.sql

[root@vm-002 backup]# vim 002bin.sql #删除里面的drop语句

注意:

在恢复全备数据之前必须将该binlog文件移出,否则恢复过程中,会继续写入语句到binlog,最终导致增量恢复数据部分变得比较混乱

(7)恢复数据

[root@vm-002 backup]# mysql -uroot -p < ops_2016-09-25.sql

Enter password:

[root@vm-002 backup]#

查看数据库,看看ops库在不在

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| ops |

| test |

+--------------------+

4 rows in set (0.00 sec)

mysql> use ops;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from customers;

+----+-----------+-----+

| id | name | age |

+----+-----------+-----+

| 1 | wangbo | 0 |

| 2 | guohui | 0 |

| 3 | zhangheng | 0 |

+----+-----------+-----+

3 rows in set (0.00 sec)

此时恢复了全备时刻的数据

接着,使用002bin.sql文件恢复全备时刻到删除数据库之间,新增的数据

[root@vm-002 backup]# mysql -uroot -p ops <002bin.sql

Enter password:

[root@vm-002 backup]#

再次查看数据库,发现全备份到删除数据库之间的那部分数据也恢复了!!

mysql> select * from customers;

+----+-----------+-----+

| id | name | age |

+----+-----------+-----+

| 1 | wangbo | 24 |

| 2 | guohui | 22 |

| 3 | zhangheng | 27 |

| 4 | liupeng | 21 |

| 5 | xiaoda | 31 |

| 6 | fuaiai | 26 |

+----+-----------+-----+

6 rows in set (0.00 sec)

"mysql数据库增量数据恢复的方法是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

数据 文件 数据库 全备 语句 增量 备份 数据恢复 时刻 之间 位置 过程 部分 方法 信息 内容 再次 日志 更多 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何清空阿里云服务器上的数据 最大容量数据库 湛江erp软件开发常见问题 软件开发求职怎么发邮件 支持ip伪装的大流量服务器价格 管理系统软件开发费用账务处理 网络安全执法十大案例 vba复制粘贴数据到数据库 网络安全 安恒 刘博 烟台大学数据库考试答案 文明上网网络安全教育活动简报 拜城县网络安全 网络安全艺术字立体 国泰安数据库行业代码是 民政局网络安全责任制 山西前端软件开发 无人机软件开发公司有哪些 服务器硬盘单个容量最大多大 个人vpn服务器 全国网络安全技术与应用 当前国家大力发展的网络技术 浪潮服务器装系统自动重启 单服务器最多磁盘 安卓怎么在苹果服务器玩明日之后 河南第三方软件开发费用是多少 栖莱(北京)互联网科技 多媒体网络技术和电商哪个好 网络安全防线进一步巩固 身边网络安全的思考与感悟 江苏机电网络技术质量服务
0