当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态,使得数据的损失达到最小。
或者说,仅仅是数据库服务器的建立,只能说明它能做些什么,并不代表它能稳定的做些什么。灾难恢复的效率及全面性,也是系统的稳定性的一个准因素,尤其对于一个服务器系统。
这一节,介绍数据库自动备份以及数据库被破坏后的恢复的方法。在这里,我们使用mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备份,并且,让整个数据自动备份与数据恢复过程都基于Shell。
建立数据库备份所需条件
[1] 建立自动备份脚本
在这里,为了使数据库备份和恢复的符合我们的实际要求,用一段符合要求的Shell脚本来实现整个备份过程的自动化。
#!/bin/bash # This is a ShellScript For DB Backup # author : mjorcen # date : 2014-10-4 # version : 1.0 # # properties setting # # DB_name=mysql DB_user=root DB_passwd=123123 DB_backPath=/alidata/www/db/bak_data/ DB_logFile=/alidata/www/db/bak.log DB_path=/var/lib/mysql/ backupMethod=mysqldump #backupMethod=mysqlhotcopy #backupMethod=tar #Setting End # newFile="$DB_backPath"db_$(date +%y%m%d).tar.gz dumpFile="$DB_backPath"db_$(date +%y%m%d) oldFile="$DB_backPath"db_$(date +%y%m%d --date=‘7 days ago‘).tar.gz cat >> $DB_logFile << END ########################################################################################################### ### date : $(date +"%y-%m-%d %H:%M:%S") ### ### newFile : $newFile ### ### dumpFile: $dumpFile ### ### oldFile : $oldFile ### ########################################################################################################### END #do delete if [ -f $oldFile ] then rm -f $oldFile >> $DB_logFile 2>&1 echo "[$oldFile] deleted successfully " >> $DB_logFile else echo "[$oldFile] does not exists " >> $DB_logFile fi # verify newFile if [ -f $newFile ] then echo "[$newFile] was exists " & exit 1 fi # doBak case $backupMethod in mysqldump) if [ -f $dumpFile ] then # mkdir -p $dumpFile rm -f $dumpFile fi if [ -z $DB_passwd ] then mysqldump -u$DB_user --opt $DB_name > $dumpFile else mysqldump -u$DB_user -p$DB_passwd --opt $DB_name > $dumpFile fi tar -cvzf $newFile $dumpFile >> $DB_logFile 2>&1 rm -f $dumpFile ;; mysqlhotcopy) if [ -f $dumpFile ] then rm -Rf $dumpFile >> $DB_logFile 2>&1 fi mkdir -p $dumpFile >> $DB_logFile 2>&1 if [ -z $DB_passwd ] then mysqlhotcopy -u$DB_user $DB_name $dumpFile >> $DB_logFile 2>&1 else mysqlhotcopy -u$DB_user -p$DB_passwd $dumpFile >> $DB_logFile 2>&1 fi tar -cvzf $newFile $dumpFile >> $DB_logFile 2>&1 echo "mysqlhotcopy [$newFile] has successfully" >> $DB_logFile rm -Rf $dumpFile >> $DB_logFile 2>&1 ;; *) /etc/init.d/mysqld stop >> $DB_logFile 2>&1 tar -cvzf $newFile $DB_path$DB_name >> $DB_logFile 2>&1 /ect/init.d/mysqld start >> $DB_logFile 2>&1 echo "tar [$newFile] backup successfully" >> $DB_logFile 2>&1 ;; esac echo ... end ... >> $DB_logFile 2>&1
[2] 运行数据库自动备份脚本
[root@CentOS ~]# chmod 700 mysql-backup.sh 改变脚本属性,让其只能让root用户执行 [root@CentOS ~]# ./mysql-backup.sh 运行脚本 [root@CentOS ~]# ll bak_data/ total 168 -rw-r--r-- 1 root root 170529 Oct 4 15:03 db_141004.tar.gz
已成功备份到/backup/mysql目录中
[3] 让数据库备份脚本每天自动运行
[root@sample ~]# crontab -e ← 编辑自动运行规则(然后会出现编辑窗口,操作同vi) 00 03 * * * /root/mysql-backup.sh 添加这一行到文件中,让数据库备份每天凌晨3点进行
测试自动备份正常运转与否(备份恢复的方法)
这里,以通过实际操作的过程来介绍问题出现后的恢复方法。
其他资料: http://wenku.baidu.com/view/46bb56cea1c7aa00b52acbc0.html