linux 备份数据库报错,linux下定时备份mysql数据库

应用场景:利用linux定时任务+shell脚本实现数据库冷备

1、创建shell脚本#!/bin/bash

#数据库用户名

DB_USER='root'

#数据库密码

DB_PASSWD='xxxx'

#数据库名,可以定义多个数据库,中间以空格隔开,如:test test1 test2

DB_NAME=(dbname1 dbname2)

#备份时间

CURRENT_BACKUP_TIME=`date +%Y%m%d%H%M%S`

#日志备份路径

LOG_PATH='/data/mysql/backup/backup_log'

#数据备份路径

DATA_PATH='/data/mysql/backup/backup_data'

#日志记录头部

echo ”备份时间为$CURRENT_BACKUP_TIME,备份数据库 $DB_NAME 开始” >> $LOG_PATH/mysql_backup_log.log

#正式备份数据库

for DB in ${DB_NAME[@]};do

source=`mysqldump  -u$DB_USER -p$DB_PASSWD $DB > $DATA_PATH/$DB-$CURRENT_BACKUP_TIME.sql` 2>> $LOG_PATH/mysql_backup_log.log;

#备份成功以下操作

if [ "$?" == 0 ];then

cd $DATA_PATH

#为节约硬盘空间,将数据库压缩

tar zcf $DB-$CURRENT_BACKUP_TIME.tar.gz $DB-$CURRENT_BACKUP_TIME.sql > /dev/null

#删除原始文件,只留压缩后文件

rm -f $DATA_PATH/$DB-$CURRENT_BACKUP_TIME.sql

echo “数据库 $DB 备份成功!!” >> $LOG_PATH/mysql_backup_log.log

#删除90天之前的备份

find $DATA_PATH -name $DB-*.tar.gz -type f -mtime +90 -exec rm -rf {} \; > /dev/null 2>&1echo "数据库 $DB 30天之前的备份数据被删除!!" >> $LOG_PATH/mysql_backup_log.log

else

#备份失败则进行以下操作

echo “数据库 $DB 备份失败!!” >> $LOG_PATH/mysql_backup_log.log

fi

done

注:该shell脚本不会自动创建目录,找不到目录会报错。手动执行一次刚创建的shell脚本,确保脚本没问题,在该脚本目录下执行命令:“./xxx.sh”,如果在windows上创建的脚本放到linux执行不了,可参考

2、利用crontab定时执行

原理很简单,就是利用cron表达式将编写好的脚本放到crontab中定时执行;

centos7可能安装了,执行命令看看有没有cat /etc/crontab文件,如果没安装可以用以下命令安装:yum install vixie-cron

yum install crontabs

执行 "vi /etc/crontab"修改crontab文件,在文件后面将脚本加到定时任务中:[root@iZj6c16ov8zzwm2ai5giarZ ~]# vi /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# For details see man 4 crontabs

# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name  command to be executed

0 12 * * * root /opt/soft/mysql_backup.sh #每天12点执行数据库备份

修改后不用重启,自动生效,crontab会每分钟检查一次配置文件。

3、centos7下crontab常用命令

/bin/systemctl start crond.service #启动

/bin/systemctl stop crond.service #停止

/bin/systemctl restart crond.service #重启

/bin/systemctl reload crond.service #重新加载

要让crontab开机自动启动,编辑/etc/rc.d/rc.local,在文件最后加上/bin/systemctl start crond.service即可

查看执行昌:tail -f /var/log/cron

查看当前用户的crontab,输入 crontab -l;

编辑crontab,输入 crontab -e

删除crontab,输入 crontab -r

添加任务例子crontab -e

0 */1 * * * command

0 */2 * * * command

查询任务是否加了:crontab -l -u root #查看root用户

0 */1 * * * command

0 */2 * * * command

基本格式 :

*  *  *  *  *  command

分 时 日 月 周 命令

第1列表示分钟1~59 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令

4、开启crontab邮件记录

如果定时任务执行了但却没得到应有的结果,可以配置邮件记录查看具体原因

修改配置:

vim  /etc/postfix/main.cf

发现配置为:

inet_interfaces = localhost

inet_protocols = all

改为:

inet_interfaces = all

重启:

centos7

systemctl restart postfix.service

centos6

service postfix restart

等待crontab再次执行任务,然后查看日志:

tail -f /var/spool/mail/root

如果maill 有日志的时候,也会在控制台弹出这样的提示:

您在 /var/spool/mail/root 中有邮件

根据邮件内容的错误修改,就能正常执行crontab的任务了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值