
MySQL 自动备份与数据库被破坏后的恢复方法.docx
10页一、前言: 当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪 些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态, 使得数据的损失达到最小或者说,仅仅是数据库服务器的建立,只能说明它能做些什么,并不代表它能稳定的做些什 么灾难恢复的效率及全面性,也是系统的稳定性的一个准因素,尤其对于一个服务器系统 这一节,介绍数据库自动备份以及数据库被破坏后的恢复的方法在这里,我们使用 mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备份,并且,让整个数据自动 备份与数据恢复过程都基于Shell建立数据库备份所需条件[1] 建立自动备份脚本在这里,为了使数据库备份和恢复的符合我们的实际要求,用一段符合要求的Shell脚本来 实现整个备份过程的自动化[roo t@Cen tOS ~]# vi mysql-backup.sh ■*-建立数据库自动备份脚本,如下:#!/bin/bashPATH二/usr/local/sbin:/usr/bin:/bin# The Directory of BackupBACKDIR二/backup/mysql# The Password of MySQLROOTPASS=******** 此处请将星号替换成MySQL的root密码# Remake the Directory of Backuprm -rf $BACKDIRmkdir -p $BACKDIR# Get the Name of DatabaseDBLIST='ls -p /var/lib/mysql | grep / | tr -d /'# Backup with Databasefor dbname in $DBLISTdomysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy done[2] 运行数据库自动备份脚本[root@CentOS ~]# chmod 700 mysql-backup.sh 改变脚本属性,让其只能让 root 用户执行[roo t@Cen tOS ~]# ./mysql-backup.sh 运行脚本[roo t@Cen tOS ~]# ls -l /backup/mysql/ 确认一下是否备份成功total 8drwxr-x 2 mysql mysql 4096 Sep 1 16:54 mysql 已成功备份到/backup/mysql目录中[3] 让数据库备份脚本每天自动运行[roo t@sample ~]# cron tab -e ・编辑自动运行规则(然后会出现编辑窗口,操作 同vi)00 03 * * * /roo t/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.20Type 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql> crea te dat abase test; ・建立一个测试用的数据库testQuery OK, 1 row affec ted (0.00 sec)mysql> use test ・连接到这个数据库Database changedmysql> crea te t able test(num int, name varchar(50)); ・在数据库中建立一个 表Query OK, 0 rows affected (0.07 sec)mysql> inser tin tot es t values(1,'Hello,Cen tOS'); ・ 插入一个值到这个表(这里以“ Hello,Cen tOS ” 为例)Query OK, 1 row affec ted (0.02 sec)mysql〉select * from test; ・查看数据库中的内容+ + +| num | name |+ + +11 | Hello,Cen tos | ・确认刚刚插入到表中的值的存在+ + +1 row in set (0.01 sec)mysql〉exit ・退出MySQL服务器Bye然后,运行刚才建立的数据库备份脚本,备份刚刚建立的测试用的数据库。
[root@sample ~]# cd・ 回到脚本所在的root用户的根目录[roo t@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.20Type 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql〉use test ・ 连接到测试用的test数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> drop t able t es t; ・删除数据中的表Query OK, 0 rows affected (0.04 sec)mysql> drop database test; ・删除测试用数据库testQuery 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 @Cen tos ~]# /bin/cp -Rf /backup/mysql/test/ /var/lib/mysql/ ・ 复制备 份的数据库test到相应目录[roo t@Cen tos ~]# chown -R mysql:mysql /var/lib/mysql/tes t/ ・ 改变数据库test的归属为mysql[roo t@Cen tos ~]# chmod 700 /var/lib/mysql/tes t/ ・改变数据库目录属性为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.20Type 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql> show dat abases; ・查看当前存在的数据库+ +| Database |+ +I mysql |1 test | -确认刚刚被删除的test数据库已经成功被恢复回来!+ +2 rows in set (0.00 sec)mysql〉use test ・ 连接到test数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql〉show tables; ・ 查看test数据库中存在的表+ +| Tables」n_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以上结果表示,数据库被删除后,用备份后的数据库成功的将数据恢复到了删除前的状态。
当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪 些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态, 使得数据的损失达到最小[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.20Type 'help;' or '\h' for help. Type '\c。
