Linux 自动备份 Mysql 数据库 Shell 脚本

作为一个后端开发人员,备份数据库是一个良好的习惯,虽然说数据库损坏或者数据丢失的概率很低,但是你不得不防,要不然出现问题了,都不知道怎么搞。

下面的这个 Shell 脚本就是能让你通过设定 Crontab 来每天备份 MySQL 数据库的方法。

准备工作

  • 你要备份的服务器要安装 Mysql 数据库,我这里使用的是 mariadb
  • 命名为:databak.sh

脚本

 
  1. #!/bin/bash
  2. # sql 备份脚本
  3. # 保留最近100天备份
  4.  
  5. # 要删除的一百天前的日期
  6. DEL_TEN_DAY=`date -d -100day +%F`
  7.  
  8. # Others vars
  9. BIN_DIR="/usr/local/mariadb/bin" # 数据库安装 /bin 路径
  10. BACK_DIR="/home/databak" # 要备份的目录
  11. DATE_TODAY=`date +%F` # 备份时间
  12.  
  13. # 用户名
  14. DB_USER="root"
  15. DB_PASS="123456"
  16. # ip
  17. DB_HOST="127.0.0.1"
  18. # 要备份的数据库数组,可以多个,用空格分开,例如 (db1 db2)
  19. DB_NAME=(zpcloud)
  20.  
  21.  
  22. # 如果文件夹不存在则创建
  23. if [ ! -d $BACK_DIR ];
  24. then
  25. mkdir -p $BACK_DIR;
  26. fi
  27.  
  28. cd /home/databak
  29.  
  30. echo "-----$DATE_TODAY-----" >> $BACK_DIR/BAK_LOG.txt
  31. for DATA_BASE in ${DB_NAME[@]}
  32. do
  33. echo "开始备份 $DATA_BASE" >> $BACK_DIR/BAK_LOG.txt
  34. $BIN_DIR/mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS --default-character-set=utf8 -R --opt $DATA_BASE | gzip > db_${DATA_BASE}_${DATE_TODAY}.sql.gz
  35. # 写创建备份日志
  36. echo "成功备份 db_${DATA_BASE}_${DATE_TODAY} 到 $BACK_DIR" >> $BACK_DIR/BAK_LOG.txt
  37. if [ ! -f "$BACK_DIR/db_${DATA_BASE}_${DEL_TEN_DAY}.sql.gz" ]; then
  38. echo "100天前($DEL_TEN_DAY)备份不存在,无需删除" >> $BACK_DIR/BAK_LOG.txt
  39. else
  40. rm -f $BACK_DIR/db_${DATA_BASE}_${DEL_TEN_DAY}.sql.gz
  41. echo "删除100天前备份文件 $BACK_DIR/db_${DATA_BASE}_${DEL_TEN_DAY}.sql.gz" >> $BACK_DIR/BAK_LOG.txt
  42. fi
  43. done

赋予权限

  • 脚本是需要执行权限的
 
  1. chmod 600 /home/databak.sh
  2. chmod +x /home/databak.sh

说明

  • 上面的脚本是备份 100 天的数据库,我们可以每天导出一份 SQL 备份文件,文件的名称按 db_数据库名_当日日期 生成,然后进行打包压缩,最后再删除 100 天之前的数据库备份;

具体可以在备份目录的 BAK_LOG.txt 文件看备份日志;

具体日志输出

 
  1. -----2019-03-20-----
  2. 开始备份 zpcloud
  3. 成功备份 db_zpcloud_2019-03-20 到 /home/databak
  4. 删除100天前备份文件 /home/databak/db_zpcloud_2018-12-10.sql.gz
  5. -----2019-03-21-----
  6. 开始备份 zpcloud
  7. 成功备份 db_zpcloud_2019-03-21 到 /home/databak
  8. 删除100天前备份文件 /home/databak/db_zpcloud_2018-12-11.sql.gz
  9. -----2019-03-22-----
  10. 开始备份 zpcloud
  11. 成功备份 db_zpcloud_2019-03-22 到 /home/databak
  12. 删除100天前备份文件 /home/databak/db_zpcloud_2018-12-12.sql.gz
  13. -----2019-03-23-----
  14. 开始备份 zpcloud
  15. 成功备份 db_zpcloud_2019-03-23 到 /home/databak
  16. 删除100天前备份文件 /home/databak/db_zpcloud_2018-12-13.sql.gz
  17. -----2019-03-24-----
  18. 开始备份 zpcloud
  19. 成功备份 db_zpcloud_2019-03-24 到 /home/databak
  20. 删除100天前备份文件 /home/databak/db_zpcloud_2018-12-14.sql.gz
  21. -----2019-03-25-----
  22. 开始备份 zpcloud
  23. 成功备份 db_zpcloud_2019-03-25 到 /home/databak
  24. 删除100天前备份文件 /home/databak/db_zpcloud_2018-12-15.sql.gz
  25. -----2019-03-26-----
  26. 开始备份 zpcloud
  27. 成功备份 db_zpcloud_2019-03-26 到 /home/databak
  28. 删除100天前备份文件 /home/databak/db_zpcloud_2018-12-16.sql.gz
  29. -----2019-03-27-----
  30. 开始备份 zpcloud
  31. 成功备份 db_zpcloud_2019-03-27 到 /home/databak
  32. 删除100天前备份文件 /home/databak/db_zpcloud_2018-12-17.sql.gz

定时任务

  • 在 Linux 中,我们利用 Crontab 来针对 databak.sh 脚本进行定时执行
 
  1. crontab -e
  • 添加一个定时任务,每天凌晨 3 点执行一次脚本,然后开始 Mysql 的备份
 
  1. 0 3 * * * /home/databak/databak.sh

记着时常抽查数据库的备份情况,有条件的可以尝试将备份文件还原恢复测试,看下是否有异常问题。

 

转载至https://izpan.com/article-42.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值