Mysql 数据备份与 mysqldump 增量备份
在数据库表丢失或损坏的情况下, 备份你的数据库是很重要的。 如果发生系统崩溃,
你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。本文主要对
MyISAM表做备份恢复。
备份策略一:直接拷贝数据库文件
备份策略二:使用 mysqldump 备份数据库(一个星期全备一次,每天增量备份)
一、 直接拷贝数据文件
直接拷贝数据文件最为直接、快速、方便,但缺点是基本上不能实现增量备份。
为了保证数据的一致性,需要在备份文件前,执行以下 SQL 语句: FLUSH TABLES WI
TH READ LOCK;也就是把内存中的数据都刷新到磁盘中, 同时锁定数据表, 以保证拷贝
过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原
来的数据库目录下即可。
为了方便的拷贝出数据文件,我写了一个脚本让其每天运行一次做备份。在 / 目录
下建一个目录用来放置脚本文件,
#mkdir /scripts
创建一个备份数据库的一个脚本文件
#vi backup_mysql.sh
#!/bin/bash
backup_dir=/backup/databak # 备份文件放置目录
backup_target_dir=/backup/db
backup_logs_dir=/backup/logs # 备份日志目录
db=bcmedia
DATE=$(date +%Y%m%d)
#得到 10 天前的日期
ccDATE=$(date "-d 10 day ago" +%Y%m%d)
echo " 开始复制数据表 " >> $backup_logs_dir/$db$DATE
echo "-----------`date +"%Y-%m-%d %H:%M:%S"`--------------------" >> $bac
kup_logs_dir/$db$DATE
cp -R /data/$db $backup_target_dir/ #mysql 数据库的数据目录为 /data
echo " 开始压缩数据表 " >> $backup_logs_dir/$db$DATE
echo "------------------------" >> $backup_logs_dir/$db$DATE
cd $backup_target_dir
tar -zcvf $backup_dir/db$DATE.tar.gz $db/ >> $backup_logs_dir/$db$DATE
if [ $? -eq 0 ]
then
echo "backup succeed" >> $backup_logs_dir/$db$DATE
else
echo "backup fail" >> $backup_logs_dir/$db$DATE
fi