一、为什么要进行数据库备份

在生产环境中数据库可能会遭遇各种各样的不测从而导致数据丢失,所以, 为了在数据丢失之后能够恢复数据, 我们就需要定期的备份数据。

二、 实现功能描述

把MySql数据库存放目录/var/lib/mysql下面的test数据库备份到/media/hsu/DA18EBFA09C1B27D/test_db_backup里面(这里数据库备份是放到了另外一个硬盘下面),并且保存为mysqldata_bak_year_month_day.tar.gz的压缩文件格式(2012_04_11是指备份执行时当天的日期),最后只保留最近14天的备份。

三、MySQL数据库备份的原理

MySQL中数据备份使用的命令是mysqldump命令, 该命令将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。mysqldump命令的工作原理很简单。它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。然后,将表中的所有记录转换成一条INSERT语句。然后通过这些语句,就能够创建表并插入数据。

四、具体操作步骤

  1. 先根据个人需求创建存储数据库备份文件的目录:mkdir /media/hsu/DA18EBFA09C1B27D/shaogang_db_backup
  2. 创建备份脚本文件: gedit /opt/mysql_databak.sh, 这里我为了避免误删这个文件,我把它放到了/opt目录下,然后输入如下内容:
#!/bin/sh
DUMP=/usr/bin/mysqldump #mysqldump备份程序执行路径
OUT_DIR=/media/hsu/DA18EBFA09C1B27D/shaogang_db_backup #备份文件存放路径
LINUX_USER=root #系统用户名
DB_NAME=test #要备份的数据库名字
DB_USER=root #数据库账号 注意:非root用户要用备份参数 --skip-lock-tables,否则可能会报错
DB_PASS=123456 #数据库密码
DAYS=14 #DAYS=14代表删除14天前的备份,即只保留最近14天的备份
cd $OUT_DIR #进入备份存放目录
DATE=`date +%Y_%m_%d` #获取当前系统时间
OUT_SQL="$DATE.sql" #备份数据库的文件名
TAR_SQL="mysqldata_bak_$DATE.tar.gz" #最终保存的数据库备份文件名
$DUMP -u$DB_USER -p$DB_PASS $DB_NAME --default-character-set=utf8 --opt -Q -R --skip-lock-tables> $OUT_SQL #备份
tar -czf $TAR_SQL ./$OUT_SQL #压缩为.tar.gz格式
rm $OUT_SQL #删除.sql格式的备份文件
chown $LINUX_USER:$LINUX_USER $OUT_DIR/$TAR_SQL #更改备份数据库文件的所有者
find $OUT_DIR -name "mysqldata_bak*" -type f -mtime +$DAYS -exec rm {} \; #删除14天前的备份文件(注意:{} \;中间有空格)

保存,退出!
3. 修改文件属性,使其可执行:chmod +x /opt/mysql_databak.sh
4. 修改/etc/crontab

sudo cp /etc/crontab{,.bak} #先备份以防不测
	gedit /etc/crontab #编辑文件,在下面添加
	45 22 * * * root /opt/mysql_databak.sh #表示每天22点45分执行备份

5 . 重新启动crond使设置生效

service cron stop #停止
	service cron start #启动
	/etc/init.d/cron restart #重启

6 . 数据恢复
每天你在/media/hsu/DA18EBFA09C1B27D/shaogang_db_backup 目录下面可以看到类似mysqldata_bak_2012_04_11.tar.gz 这样的压缩文件,如果需要恢复文件的时候,只需要把这个文件解压:tar -zxvf mysqldata_bak_2012_04_11.tar.gz,然后导入到数据库中即可。