大早上起来,发现微信群刷屏了。爬了一下信息,发现二群里一位网友透露,昨天夜里凌晨 3 点接到电话,公司数据库被删除了。他已搞了一晚上了,事故现场还未恢复!

据这位网友透露,宝塔(简单好用的 Linux/Windows 面板)程序本身有漏洞。导致了他这次被删库!

我只截了这一位网友的部分消息,其他网友的消息太多,看不过来,就不截图了!

今天,我们就来演示一个简单的数据库被删除后如何恢复的教程!实际生产环境中,情况肯定比我这个复杂。比如,有的有备份,有的有 binglog,有的连 MySQL 的 Data 目录都被删除了。今天,我们就先简单的来一个有备份,数据库被删除的恢复操作。其他的复杂情况,我们以后抽时间再来讲。

首先,我们登录到数据库。

[root@CentOS ~]# mysql -u root -p   ← 用root登录到MySQL服务器
Enter password:  ← 输入MySQL的root用户密码 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 8 to server version: 4.1.20

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

然后,创建一个测试数据库 xttblog。

mysql> create database xttblog;  ← 建立一个测试用的数据库xttblog
Query OK, 1 row affected (0.00 sec)

mysql> use xttblog  ← 连接到这个数据库 
Database changed

mysql> create table xttblog(num int, name varchar(50));  ← 在数据库中建立一个表 
Query OK, 0 rows affected (0.07 sec)

mysql> insert into xttblog values(1,'Hello,CentOS');  ← 插入一个值到这个表(这里以“Hello,CentOS”为例) 
Query OK, 1 row affected (0.02 sec)

mysql> select * from xttblog;  ← 查看数据库中的内容 
+------+-----------------+ 
| num | name | 
+------+-----------------+ 
|1  | Hello,Centos |  ← 确认刚刚插入到表中的值的存在 
+------+------------------+ 
1 row in set (0.01 sec)

mysql> exit  ← 退出MySQL服务器 
Bye

然后,我们使用 root 身份,对 MySQL 数据库进行备份。

mysqldump -u root -p xttblog xttblog > D:\backup_xttblog_2019-01-30.sql

备份完 xttblog 数据库中的 xttblog 表后,我们执行 drop table 或 drop database 命令,删除数据表或库。

drop table test;  ← 删除数据中的表 
drop database test;  ← 删除测试用数据库test 
show databases; ← 确认测试用的test数据库已不存在、已被删除

然后,我们来进行备份恢复操作。

mysql -u root -p xttblog xttblog < backup_xttblog_2019-01-30.sql

说一下,我的这个操作,演示非常的简单。实际生产中,可能存在主从、集群等情况。备份,除了 SQL 外,还可能有目录。比如,有的使用的是 mysqlhotcopy 命令备份的等。

再比如,有的开启了 binglog,有的 binglog 配置不是 row,有的存储引擎是 MyISAM,有的是 InnoDB。如果是 InnoDB 的话,表的表空间还不能直接复制。

这篇文章就先介绍到这里,我们年后抽时间继续学习数据库备份与删除。练好技术,从来不翻车!