`
pcajax
  • 浏览: 2174464 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MySQL数据库的自动备份与数据库被破坏后的恢复

阅读更多

一、前言:

当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态,使得数据的损失达到最小。

或者说,仅仅是数据库服务器的建立,只能说明它能做些什么,并不代表它能稳定的做些什么。灾难恢复的效率及全面性,也是系统的稳定性的一个准因素,尤其对于一个服务器系统。

这一节,介绍数据库自动备份以及数据库被破坏后的恢复的方法。在这里,我们使用mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备份,并且,让整个数据自动备份与数据恢复过程都基于Shell。

建立数据库备份所需条件

[1] 建立自动备份脚本

在这里,为了使数据库备份和恢复的符合我们的实际要求,用一段符合要求的Shell脚本来实现整个备份过程的自动化。

[root@CentOS ~]# vi mysql-backup.sh ← 建立数据库自动备份脚本,如下:
#!/bin/bash
PATH=/usr/local/sbin:/usr/bin:/bin
# The Directory of Backup
BACKDIR=/backup/mysql
# The Password of MySQL
ROOTPASS=******** 此处请将星号替换成MySQL的root密码
# Remake the Directory of Backup
rm -rf $BACKDIR
mkdir -p $BACKDIR
# Get the Name of Database
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`
# Backup with Database
for dbname in $DBLIST
do
mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done

[2] 运行数据库自动备份脚本

[root@CentOS ~]# chmod 700 mysql-backup.sh 改变脚本属性,让其只能让root用户执行
[root@CentOS ~]# ./mysql-backup.sh 运行脚本
[root@CentOS ~]# ls -l /backup/mysql/ 确认一下是否备份成功
total 8
drwxr-x--- 2 mysql mysql 4096 Sep 1 16:54 mysql 已成功备份到/backup/mysql目录中

[3] 让数据库备份脚本每天自动运行

[root@sample ~]# crontab -e ← 编辑自动运行规则(然后会出现编辑窗口,操作同vi)
00 03 * * * /root/mysql-backup.sh 添加这一行到文件中,让数据库备份每天凌晨3点进行

 

测试自动备份正常运转与否(备份恢复的方法)

这里,以通过实际操作的过程来介绍问题出现后的恢复方法。

[1] 当数据库被删除后的恢复方法

首先建立一个测试用的数据库。

[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.
mysql> create database test; ← 建立一个测试用的数据库test
Query OK, 1 row affected (0.00 sec)
mysql> use test ← 连接到这个数据库
Database changed
mysql> create table test(num int, name varchar(50)); ← 在数据库中建立一个表
Query OK, 0 rows affected (0.07 sec)
mysql> insert into test values(1,'Hello,CentOS'); ← 插入一个值到这个表(这里以“Hello,CentOS”为例)
Query OK, 1 row affected (0.02 sec)
mysql> select * from test; ← 查看数据库中的内容
+------+-----------------+
| num | name |
+------+-----------------+
|1 | Hello,Centos | ← 确认刚刚插入到表中的值的存在
+------+------------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

然后,运行刚才建立的数据库备份脚本,备份刚刚建立的测试用的数据库。

[root@sample ~]# cd ← 回到脚本所在的root用户的根目录
[root@sample ~]# ./mysql-backup.sh ← 运行脚本进行数据库备份

接下来,我们再次登录到MySQL服务器中,删除刚刚建立的测试用的数据库test,以便于测试数据恢复能否成功。

[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 13 to server version: 4.1.20
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use test ← 连接到测试用的test数据库
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> drop table test; ← 删除数据中的表
Query OK, 0 rows affected (0.04 sec)
mysql> drop database test; ← 删除测试用数据库test
Query OK, 0 rows affected (0.01 sec)
mysql> show databases;
+---------------+
| Database |
+---------------+
| mysql | ← 确认测试用的test数据库已不存在、已被删除
+---------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上,我们就等于模拟了数据库被破坏的过程。接下来,是数据库被“破坏”后,用备份进行恢复的方法。

[root@Centos ~]# /bin/cp -Rf /backup/mysql/test/ /var/lib/mysql/ ← 复制备份的数据库test到相应目录
[root@Centos ~]# chown -R mysql:mysql /var/lib/mysql/test/ ← 改变数据库test的归属为mysql
[root@Centos ~]# chmod 700 /var/lib/mysql/test/ ← 改变数据库目录属性为700
[root@Centos ~]# chmod 660 /var/lib/mysql/test/* ← 改变数据库中数据的属性为660

然后,再次登录到MySQL服务器上,看是否已经成功恢复了数据库。

[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 14 to server version: 4.1.20
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> show databases; ← 查看当前存在的数据库
+-------------+
| Database |
+-------------+
| mysql |
| test | ← 确认刚刚被删除的test数据库已经成功被恢复回来!
+------------+
2 rows in set (0.00 sec)
mysql> use test ← 连接到test数据库
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> show tables; ← 查看test数据库中存在的表
+-------------------+
| Tables_in_test |
+-------------------+
| test |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from test; ← 查看数据库中的内容
+------+---------------------+
| num | name |
+------+---------------------+
| 1 | Hello,CentOS | ← 确认数据表中的内容与删除前定义的“Hello,CentOS”一样!
+------+---------------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上结果表示,数据库被删除后,用备份后的数据库成功的将数据恢复到了删除前的状态

 

2] 当数据库被修改后的恢复方法

数据库被修改,可能存在着多方面的原因,被入侵、以及相应程序存在Bug等等,这里不作详细介绍。这里将只介绍在数据库被修改后,如果恢复到被修改前状态的方法。

具体和上面所述的“数据库被删除后的恢复方法”相类似。这里,测试用数据库接着使用刚刚在前面用过的test。这里为了使刚刚接触数据库的朋友不至于理解混乱,我们再次登录到MySQL服务器上确认一下刚刚建立的测试用的数据库test的相关信息。

[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 14 to server version: 4.1.20
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> show databases; ← 查看当前存在的数据库
+-------------+
| Database |
+-------------+
| mysql |
| test |
+------------+
2 rows in set (0.00 sec)
mysql> use test ← 连接到test数据库
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> show tables; ← 查看test数据库中存在的表
+-------------------+
| Tables_in_test |
+-------------------+
| test |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from test; ← 查看数据库中的内容
+------+--------------------+
| num | name |
+------+--------------------+
| 1 | Hello,CentOS|
+------+--------------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

然后,我们再次运行数据库备份脚本,将当前状态的数据库,再做一次备份。

[root@CentOS ~]# cd ← 回到脚本所在的root用户的根目录
[root@CentOS ~]# ./mysql-backup.sh ← 运行脚本进行数据库备份

接下来,我们再次登录到MySQL服务器中,对测试用的数据库test进行一些修改,以便于测试数据恢复能否成功。

[root@sample ~]# 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 15 to server version: 4.1.20
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use test ← 连接到test数据库
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> update test set name='Shit,Windows'; ← 然后将test中表的值重新定义为“Shit,Windows”(原来为“Hello,CentOS”)
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from test; ← 确认test中的表被定义的值
+------+--------------------+
| num | name |
+------+-------------------+
| 1 | Shit,Windows | ← 确认已经将原test数据库表中的值修改为新的值“Shit,Windows”
+------+-------------------+
1 row in set (0.00 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上,我们就等于模拟了数据库被篡改的过程。接下来,是数据库被“篡改”后,用备份进行恢复的方法。

[root@CentOS ~]# /bin/cp -Rf /backup/mysql/test/ /var/lib/mysql/ ← 复制备份的数据库test到相应目录

然后,再次登录到MySQL服务器上,看数据库是否被恢复到了被“篡改”之前的状态。

[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 16 to server version: 4.1.20
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use test ← 连接到test数据库
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 test; ← 查看数据库中的内容
+------+----------------+
| num | name |
+------+----------------+
| 1| Hello,CentOS | ← 确认数据表中的内容与被修改前定义的“Hello,CentOS”一样!
+------+----------------+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上结果表示,数据库被修改后,用备份后的数据库成功的将数据恢复到了被“篡改”前的状态。

测试后…

测试完成后,将测试用过的遗留信息删除。

[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 19 to server version: 4.1.20
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use test ← 连接到test数据库
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> drop table test; ← 删除test数据库中的表
Query OK, 0 rows affected (0.01 sec)
mysql> drop database test; ← 删除测试用数据库test
Query OK, 0 rows affected (0.00 sec)
mysql> show databases; ← 查看当前存在的数据库
+-------------+
| Database |
+-------------+
| mysql | ← 确认测试用数据库test不存在、已被删除
+-------------+
1 row in set (0.00 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上介绍了用我们自己建立的一段Shell脚本,通过mysqlhotcopy来备份数据库的方法。

对于许多个人爱好者来说,组建服务器可能不是很考虑数据被破坏以及数据被破坏后的恢复工作。但不能不说,对于服务器来说,数据破坏后的恢复效率也是区 别业余和专业的因素之一。所以笔者建议,在您配置好了Web服务器以及MySQL服务器等等的时候,千万不要急于应用它,而要想办法在有限的(硬件、软件)条件下使它“坚不可摧”之后,再考虑应用的问题。

而且,以上介绍的方法中提到的数据库自动备份脚本虽然被设置为每天定时运行,但当您运行某些与MySQL相关联的程序(论坛、社区等等)时,做一些可 能危及数据安全的操作的时候,运行数据库备份脚本即时备份当前状态数据库,也是非常有帮助的,至少可以在出现问题后保证数据库方面的可恢复性。

分享到:
评论

相关推荐

    mysql 数据库自动备份与数据库被破坏后的恢复_mysqlhotcopy

    ### MySQL数据库自动备份与破坏后的恢复 #### 一、引言 在数据库管理中,确保数据的安全性和可恢复性至关重要。一旦发生意外如硬件故障、软件错误或人为失误导致的数据丢失,如果没有有效的备份策略,可能会造成...

    MySQL数据库备份和恢复

    ### MySQL数据库备份与恢复:深度解析与实践指南 在当今数据驱动的世界中,数据库的稳定性和数据的安全性显得尤为重要。MySQL作为全球最流行的开源关系型数据库管理系统之一,其备份和恢复策略是确保数据安全和系统...

    docker环境下的mysql数据库自动备份脚本

    docker环境下的mysql数据库自动备份脚本,配置到系统定时任务中,能够每天自动全库或者指定实例备份数据库,删除七天前的旧备份。

    如何在linux下实现mysql数据库每天自动备份 txt

    在Linux环境下进行MySQL数据库的日常自动备份是一项重要的维护工作,它能够确保数据的安全性与完整性。本文将详细介绍如何通过编写Shell脚本并结合Cron定时任务来实现MySQL数据库的每日自动备份。 #### 一、准备...

    mysql数据库自动定时备份

    MySQL数据库的自动定时备份是数据库管理中的重要环节,它确保了数据的安全性和可恢复性,尤其是在发生意外情况如系统故障、硬件损坏或人为错误时。本教程将详细讲解如何设置MySQL数据库的自动定时备份,包括步骤、所...

    多备份-MySQL数据库自动备份工具 v1.0

    多备份MySQL数据库自动备份工具(windows客户端)是深圳木浪科技开发的一款高效MySQL自动备份和恢复的工具。可以备份网站服务器和本地MySQL数据库,免费授权给大家使用。多备份MySQL数据库自动备份工具的特色1、全面...

    MYSQL数据库的备份与恢复.pdf

    "MYSQL数据库的备份与恢复" MYSQL数据库的备份与恢复是数据库管理系统中非常重要的一环。数据库中的数据是企业的生命线,如果数据丢失将会导致企业的损失。因此,备份和恢复数据是数据库管理系统中非常重要的一环...

    Mysql数据库自动备份

    Mysql数据库自动备份软件,非常好用。

    Mysql数据库备份恢复测试报告-xtrabackup.docx

    MySQL数据库的备份与恢复是确保数据安全性的重要环节。在本测试报告中,主要涉及了全量备份和增量备份的恢复过程,并对恢复后的数据进行了验证。以下是对这些知识点的详细说明: 1. **全量备份**:全量备份是数据库...

    C#实现MySQL数据库的备份、还原和初始化

    在C#编程中,与MySQL数据库的交互是常见的任务,特别是在开发管理系统的应用程序时。本文将详细介绍如何使用C#来实现MySQL数据库的初始化、备份和还原功能。 首先,数据库的初始化通常指的是创建一个新的数据库。在...

    MySQL数据库自动备份、还原bat

    通过上述批处理脚本,我们可以实现MySQL数据库的自动化备份与恢复操作。这不仅大大减轻了数据库管理员的工作负担,还提高了数据安全性。需要注意的是,在实际部署前,应根据自己的环境调整脚本中的参数,例如数据库...

    MySQL数据库自动备份与清理脚本

    1、mysql数据库自动备份与清理2、支持mysql 5.7与mysql 8.03、基于mysql enterprise backup备份4、支持备份数据通过ftp上传或通过rsync上传5、支持自定义备份数据定期清理

    mysql数据库备份与恢复

    本知识点将深入探讨如何在SpringBoot环境下对MySQL数据库进行备份与恢复,以确保数据的安全。 首先,`MysqlBackup.java` 文件很可能是实现备份和恢复功能的核心Java类。在SpringBoot中,我们可以利用JDBC(Java ...

    mysql数据库自动备份脚本

    mysql数据库定期自动备份的shell脚本。如定期每三天自动备份数据库,并只保存20份备份文件,多余的删除。

    mysql_window环境下_数据库备份与恢复

    用命令的形式 备份和恢复 mysql数据库 主要有一些备份和恢复中出现的注意事项!

    window自动备份mysql数据库

    window每天定时备份数据库到硬盘指定目录下,#-uluotao 指定用户名luotao #-p 指定明码 #--databases houtai 指定备份houtai这个数据库,可以指定多个备份的数据库 # > d:/back3.sql 指定备份文件的路径

    mysql 自动备份数据库脚本

    "mysql 自动备份数据库脚本" 提供了一种自动化的方法,通过Windows的定时任务服务(taskschd.msc)来定期执行数据库的备份,避免了手动操作的繁琐和可能的人为错误。 MySQL的自动备份主要涉及以下几个核心知识点: ...

    Mysql数据库定时备份

    "Mysql数据库定时备份" Mysql数据库定时备份是数据库管理中非常...Mysql数据库定时备份是非常重要的操作,通过手动备份、使用定时任务备份和Java代码添加监听备份,可以选择合适的方法来备份数据库,保护数据的安全。

    nbu&mysql备份恢复.docx

    2. 选择mysql数据库备份选项 3. 配置备份参数,例如备份策略、备份路径等 4. 启动备份过程 NBU恢复mysql数据库 使用NBU恢复mysql数据库可以按照以下步骤进行: 1. 启动NBU恢复客户端 2. 选择mysql数据库恢复选项 ...

Global site tag (gtag.js) - Google Analytics