备份介绍
备份的类型
以下三种方式都是 全量备份 的方式
- 热备 (Hot Backup)
- 在线备份
- 对应用无影响(应用程序不会被阻塞(其实有,只是时间很短),可以正常的读写,但是性能上还是有影响的)
- 冷备(Cold Backup)
- 备份数据文件,最可靠的备份
- 需要停机(最大的弊端)
- 备份datadir下的所有文件
- 温备(Warm Backup)
- 在线备份
- 对应用影响很大
- 通常加一个读锁(读不受影响,写被阻塞)
备份还原工具
- ibbackup
- 官方备份工具
- 收费
- 物理备份
- XtraBackup
- 开源社区备份工具(必须使用最新版本,否则备份出来的数据可能有问题)
- 开源免费
- 物理备份
- 可进行增量备份
- 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