为了减轻DBA的工作,数据库自动备份当然少不了,今天我和大家一起来学习通过crontab实现mysql数据的自动备份
我们在/etc/cron.daily/目录下创建文件backup内容如下
#!/bin/bash
#定义变量name的值,/bin/date日期格式为Y年-m月-d日
name=`/bin/date "+%Y-%m-%d"`
#/usr/bin/mysqldump 备份数据库的命令路径
#-u root 数据库的用户名
#-p password 数据库的密码把password替换成你自己的密码
#--opt database 你要备份的数据库 如果要备份所有的库你可以把--opt database替换成--all-databases前面那个database是你数据库的名字,后面的databases是mysqldump的参数别搞混了
#/home/backup/database$name.sql这个是数据库备份的路径,$符号后面的name就是最前面定义的那个日期,备份的文件将会以你自己定义的文件名加当时的日期来命名
/usr/bin/mysqldump -u root -ppassword --opt test > /home/backup/test$name.sql
#这个就是备份所有数据库的命令,和前面的有点小差别
/usr/bin/mysqldump -u root -ppassword --all-databases | gzip --fast > /home/backup/full$name.gz
不一样的地方就是把--opt改成了--all-databases,再就是后面的压缩参数gzip,这个参数也可以使用到前面的那个单个数据库的备份命令中
保存退出
#修改文件backup为可执行文件
chmod +x /etc/cron.daily/backup
进入crontab的配置文件
# cat /etc/crontab
#每小时执行一次/etc/cron.hourly/目录下的文件
01 * * * * root run-parts /etc/cron.hourly
#每天执行一次/etc/cron.hourly/目录下的文件,执行时间是04点
00 04 * * * root run-parts /etc/cron.daily
#每周执行一次/etc/cron.hourly/目录下的文件,每周的第一天04点22分
22 4 * * 0 root run-parts /etc/cron.weekly
每月执行一次/etc/cron.hourly/目录下的文件,每月的第一天04点42分
42 4 1 * * root run-parts /etc/cron.monthly
刚才我们已经把backup脚本创建到了/etc/cron.daily这个目录下,也就是每天04点都会自动执行脚本做数据库的备份了
#重启crond服务
service crond restart
---------------------------------------------------
1、创建备份文件夹
#cd /www
#makedir backup
2、编写运行脚本
#ee autobackup
写入以下内容:
filename=`date +%Y%m%d`
mysql_bin_dir/mysqldump –opt dataname-u user-ppassword| gzip >/www/mysqlbackup/name$filename.gz
保存退出?
说明:
(1)mysql_bin_dir:mysql的bin路径;
(2)dataname:数据库名;
(3)user:数据库用户名;
(4)password:用户密码;
(5)name:自定义备份文件前缀标识。
如上例,将自动备份mysql数据库,并以gzip压缩方式存储,文件名为name20080101.gz的形式。
3、为脚本添加执行权限
#chmod +x autobackup
4、让crontab来完成定期执行的任务
这一步中,Redhat的方法会不一样,后面专门给出。
编辑crontab:
#vi /etc/crontab
在最后一行中加入:
01 5* * * root /www/autobackup
每天5点运行脚本,也可以修改5为其他指定时间。
Redhat方法:
Redhat的crontab采用按时间调用4个目录(/etc/cron.hourly:每小时;/etc/cron.daily:每天;/etc/cron.weekly:每周;/etc/cron.monthly:每月)中脚本出来运行的方式。
Redhat中只需要将刚才编辑的脚本复制到相应的目录即可。
5、重启crontab
#/etc/rc.d/init.d/crond restart
完成
其实原理很简单,自己制作一个脚本,让Linux系统自动运行。我们还可以再扩展一下,编辑一个自动备份网站文件的脚本,让Linux来完成,每天自动备份整个网站,等等……
我们在/etc/cron.daily/目录下创建文件backup内容如下
#!/bin/bash
#定义变量name的值,/bin/date日期格式为Y年-m月-d日
name=`/bin/date "+%Y-%m-%d"`
#/usr/bin/mysqldump 备份数据库的命令路径
#-u root 数据库的用户名
#-p password 数据库的密码把password替换成你自己的密码
#--opt database 你要备份的数据库 如果要备份所有的库你可以把--opt database替换成--all-databases前面那个database是你数据库的名字,后面的databases是mysqldump的参数别搞混了
#/home/backup/database$name.sql这个是数据库备份的路径,$符号后面的name就是最前面定义的那个日期,备份的文件将会以你自己定义的文件名加当时的日期来命名
/usr/bin/mysqldump -u root -ppassword --opt test > /home/backup/test$name.sql
#这个就是备份所有数据库的命令,和前面的有点小差别
/usr/bin/mysqldump -u root -ppassword --all-databases | gzip --fast > /home/backup/full$name.gz
不一样的地方就是把--opt改成了--all-databases,再就是后面的压缩参数gzip,这个参数也可以使用到前面的那个单个数据库的备份命令中
保存退出
#修改文件backup为可执行文件
chmod +x /etc/cron.daily/backup
进入crontab的配置文件
# cat /etc/crontab
#每小时执行一次/etc/cron.hourly/目录下的文件
01 * * * * root run-parts /etc/cron.hourly
#每天执行一次/etc/cron.hourly/目录下的文件,执行时间是04点
00 04 * * * root run-parts /etc/cron.daily
#每周执行一次/etc/cron.hourly/目录下的文件,每周的第一天04点22分
22 4 * * 0 root run-parts /etc/cron.weekly
每月执行一次/etc/cron.hourly/目录下的文件,每月的第一天04点42分
42 4 1 * * root run-parts /etc/cron.monthly
刚才我们已经把backup脚本创建到了/etc/cron.daily这个目录下,也就是每天04点都会自动执行脚本做数据库的备份了
#重启crond服务
service crond restart
---------------------------------------------------
1、创建备份文件夹
#cd /www
#makedir backup
2、编写运行脚本
#ee autobackup
写入以下内容:
filename=`date +%Y%m%d`
mysql_bin_dir/mysqldump –opt dataname-u user-ppassword| gzip >/www/mysqlbackup/name$filename.gz
保存退出?
说明:
(1)mysql_bin_dir:mysql的bin路径;
(2)dataname:数据库名;
(3)user:数据库用户名;
(4)password:用户密码;
(5)name:自定义备份文件前缀标识。
如上例,将自动备份mysql数据库,并以gzip压缩方式存储,文件名为name20080101.gz的形式。
3、为脚本添加执行权限
#chmod +x autobackup
4、让crontab来完成定期执行的任务
这一步中,Redhat的方法会不一样,后面专门给出。
编辑crontab:
#vi /etc/crontab
在最后一行中加入:
01 5* * * root /www/autobackup
每天5点运行脚本,也可以修改5为其他指定时间。
Redhat方法:
Redhat的crontab采用按时间调用4个目录(/etc/cron.hourly:每小时;/etc/cron.daily:每天;/etc/cron.weekly:每周;/etc/cron.monthly:每月)中脚本出来运行的方式。
Redhat中只需要将刚才编辑的脚本复制到相应的目录即可。
5、重启crontab
#/etc/rc.d/init.d/crond restart
完成
其实原理很简单,自己制作一个脚本,让Linux系统自动运行。我们还可以再扩展一下,编辑一个自动备份网站文件的脚本,让Linux来完成,每天自动备份整个网站,等等……
MySQL 数据库的备份
元旦快乐


December 24, 2009 11:12 | by 






建议分库备份(下面的备份脚本是避免数据库IO升高,所以选择内网另机备份):
--------------------------------------------------------------------------------------
#! /bin/sh
BAK_DIR="/data/backup/$(date +'%Y%m%d')"
TIME="$(date +'%Y%m%d%H')"
#Function START
DB_BACKUP () {
USER="backup"
PWD="**********"
DB1="a"
DB2="b"
PORT="3388"
HOST="192.168.0.102"
CMD="/usr/local/mysql/bin"
backup DB1
$CMD/mysqldump -h$HOST -P$PORT -u$USER -p$PWD -n -t -d -R $DB1 > $BAK_DIR/$DB1$TIME.sql
for i in $($CMD/mysql -h$HOST -P$PORT -u$USER -p$PWD $DB1 -e "show tables;"|egrep -v "Tables_in_aaa|xxx_(\w)+log")
do
$CMD/mysqldump -h$HOST -P$PORT -u$USER -p$PWD $DB1 $i >> $BAK_DIR/$DB1$TIME.sql
done
#backup DB2
$CMD/mysqldump -u$USER -p$PWD -n -t -d -R $DB2 > $BAK_DIR/$DB2$TIME.sql
for j in $($CMD/mysql -u$USER -p$PWD $DB2 -e "show tables;"|egrep -v "Tables_in_bbb|yyy_(\w)+log")
do
$CMD/mysqldump -u$USER -p$PWD $DB2 $j >> $BAK_DIR/$DB2$TIME.sql
done
}
#Function END
if [ -d $BAK_DIR ]
then
DB_BACKUP
mkdir -p $BAK_DIR/scripts
mkdir -p $BAK_DIR/config
cp /scripts/* $BAK_DIR/scripts/
cp /etc/my.cnf $BAK_DIR/config/
else
mkdir -p $BAK_DIR/scripts
mkdir -p $BAK_DIR/config
cp /export/scripts/* $BAK_DIR/scripts/
cp /etc/my.cnf $BAK_DIR/config/
DB_BACKUP
fi
#compress Backup Files
#
Today=$(date +'%Y%m%d')
cd /data/backup
tar -czf $Today.tar.gz $Today/
rm -rf $Today/
## delete 5 days ago files
find /data/backup/ -type f -ctime +5 -exec rm -rf {} \;
exit 0
----------------------------------------------------------------------------------
还有建议就是再弄下增量备份,记得flush log ^^