MysqlDump实现定时备份

290 阅读2分钟

备份介绍

备份的类型

以下三种方式都是 全量备份 的方式

  1. 热备 (Hot Backup)
  • 在线备份
  • 对应用无影响(应用程序不会被阻塞(其实有,只是时间很短),可以正常的读写,但是性能上还是有影响的)
  1. 冷备(Cold Backup)
  • 备份数据文件,最可靠的备份
  • 需要停机(最大的弊端)
  • 备份datadir下的所有文件
  1. 温备(Warm Backup)
  • 在线备份
  • 对应用影响很大
  • 通常加一个读锁(读不受影响,写被阻塞)

备份还原工具

  1. ibbackup
  • 官方备份工具
  • 收费
  • 物理备份
  1. XtraBackup
  • 开源社区备份工具(必须使用最新版本,否则备份出来的数据可能有问题)
  • 开源免费
  • 物理备份 
  • 可进行增量备份
  1. mysqldump官方地址
  • 官方自带备份工具,是可靠的,且 备份文件相对较小 
  • 开源免费
  • 逻辑备份 
  • 恢复速度较慢(需要重建索引等等)

MysqlDump实操

物料

#备份文件地址  
/*/mysql_backup`
#备份sh
/*/mysqlBackUp.sh`

备份脚本

#!/bin/bash
# use mysqldump to Fully backup mysql data per day!
# create time at 2022-11-29 16:30 by Craig
#
#source ~/.bash_profile
export LANG=en_US.UTF-8
#mysqlDump的地址
MysqlDumpBin=
#想要备份的数据库的名称
DataBases=
#备份的文件地址  比如 /data/mysql_back/
BakDir= 
LogFile=${BakDir}/bak.log

# 判断 BakDir 目录是否存在
[ -d ${BakDir} ] || mkdir -p ${BakDir}

# 开始
BeginTime=`date +"%Y-%m-%d %H:%M:%S"`
Date=`date +%Y%m%d%H%M`
DumpFile=${DataBases}_${Date}.sql
GZDumpFile=${Date}.sql.tgz
# 备份,删除历史binlog日志
${MysqlDumpBin}    --master-data=2 -uroot -p --opt --databases ${DataBases} | gzip > ${BakDir}/${DumpFile}.gz
# 查找N天之前的访问文件,3为3天前的
find ${BakDir}/*.sql.gz -atime +3 -exec rm {} \;
#日志
EndTime=`date +"%Y-%m-%d %H:%M:%S"`
sudo echo 开始时间:$BeginTime  结束时间:$EndTime  文件名称:$GZDumpFile  任务状态:succ >>  $LogFile


常见问题

root@esc:/var/bkDatabase$ sudo ./mysqlBackUp.sh 
./mysqlBackUp.sh: line 17: fg: no job control
./mysqlBackUp.sh: line 17: +: command not found
Enter password: 
#缺少PROCESS权限,执行添加:  grant process on *.* to 数据库用户名;
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
#建议使用root用户
mysqldump: Got error: 1044: Access denied for user 'databaseuser'@'%' to database 'password' when selecting the database

Crontab 命令

开启cron日志

#Ubuntu 系统默认不生成 cron 日志文件,找到 cron.* ,把前面的 # 去掉,保存退出。
sudo vim /etc/rsyslog.d/50-default.conf
#重启系统日志,在终端输入命令:
sudo service rsyslog restart
#查看cron日志SS
tail -f /var/log/cron.log

cron设置

  #查看时间
  date -R
  #定时任务进程状态
  sudo systemctl status cron
  #编辑cron命令
  crontab -e
  #查看cron命令
  crontab -l

参考链接1

参考链接2