mysql使用mysqldump和crontab定时备份

1,

安装crontab

yum install vixie-cron

yum install crontabs

 

说明:
vixie-cron软件包是cron的主程序;
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
cron 是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

查看crontab服务状态:

service crond status

手动启动crontab服务:

service crond start

查看crontab服务是否已设置为开机启动,执行命令:

ntsysv

加入开机自动启动:

chkconfig --level 35 crond on

 

2,

赋予脚本执行权限

chmod 777 test.sh

添加定时任务

crontab -e

添加这段定时命令

 

*/5 * * * * /home/test.sh

 

说明:

运行crontab –e 编写一条定时任务 */5 * * * * /home/test.sh 在每5分钟执行一次test.sh脚本

查看当前所有定时任务

crontab -l

删除当前定时任务

 

每隔12小时备份一次

1 */12 * * * /usr/local/backup/backupMysql.sh  

每天凌晨1点删除一个月之前的备份

1 1 * * * /usr/local/backup/delBackupMysql.sh

 

 

备份脚本

ADDRESS="120.120.120.120"
PORT="3306"
USER="root" PASSWORD="数据库密码" DATABASE1="jxt" #DATABASE2=zabbix BACKUP_DIR="/usr/local/backup/mysql" #备份数据库文件的路径 LOGFILE="/usr/local/backup/mysql/data_backup.log" #备份数据库脚本的日志文件 DATE=`date +%Y%m%d-%H%M -d -3minute` #获取当前系统时间-3分钟 DUMPFILE1="$DATE-jxt.sql" #需要备份的数据库名称 #DUMPFILE2=$DATE-zabbix.sql ARCHIVE1="$DUMPFILE1.gz" #备份的数据库压缩后的名称 #ARCHIVE2=$DUMPFILE2-tar.gz #cat /usr/local/backup #!/bin/bash #Shell Command For Backup MySQL Database Everyday Automatically By Crontab #time 2015-5-20 if [ ! -d $BACKUP_DIR ]; #判断备份路径是否存在,若不存在则创建该路径 then mkdir -p "$BACKUP_DIR" fi echo -e "\n" >> $LOGFILE echo "------------------------------------" >> $LOGFILE echo "BACKUP DATE:$DATE">> $LOGFILE echo "------------------------------------" >> $LOGFILE cd $BACKUP_DIR #跳到备份路径下 /usr/local/mysql/bin/mysqldump -h$ADDRESS -P$PORT -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1 #使用mysqldump备份数据库 if [[ $? == 0 ]]; then tar czvf $ARCHIVE1 $DUMPFILE1 >> $LOGFILE 2>&1 #判断是否备份成功,若备份成功,则压缩备份数据库,否则将错误日志写入日志文件中去。 echo "$ARCHIVE1 BACKUP SUCCESSFUL!" >> $LOGFILE rm -f $DUMPFILE1 else echo “$ARCHIVE1 Backup Fail!” >> $LOGFILE fi # /usr/local/mysql/bin/mysqldump -u$USER -p$PASSWORD $DATABASE2 > $DUMPFILE2 # if [[ $? == 0 ]]; then # tar czvf $ARCHIVE2 $DUMPFILE2 >> $LOGFILE 2>&1 # echo "$ARCHIVE2 BACKUP SUCCESSFUL!" >> $LOGFILE # rm -f $DUMPFILE2 # else # echo “$ARCHIVE2 Backup Fail!” >> $LOGFILE # fi

注意:mysqldump 在备份的时候会锁表,如果在生产环境,会造成业务奔溃。那如何解决呢

方案一:有主从数据库,binlog主从同步数据后,在从库使用mysqldump 去备份数据

方案二:加一个参数:--single-transaction,仅对支持事务的表有效,比如InnoDB,对非事务型的表比如MyISAM`则没有效果。

/usr/local/mysql/bin/mysqldump  --single-transaction -h$ADDRESS -P$PORT -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1

 

 

删除脚本

BACKUPDIR="/usr/local/backup/mysql/"                            #定义备份文件路径 
KEEPTIME=30                                                           #定义需要删除的文件距离当前的天数 
DELFILE=`find $BACKUPDIR -type f -mtime +$KEEPTIME -exec ls {} \;`     #找到天数大于KEEPTIME天的文件 
for delfile in ${DELFILE}                                              #循环删除满足天数大于七天的文件 
do 
rm -f $delfile 
done

 

posted @ 2019-09-19 16:26  suruozhong  阅读(1521)  评论(0编辑  收藏  举报