放弃宝塔后,你可以这样备份数据库
把这个脚本保存到/root/backup-database.sh,或者你想要保存的任意位置和文件名
#!/bin/bash #数据库 username=root password=123456 database=mjj #备份目录(最后要保留斜杠,懒得多做一次判断,下面rclone的也是) backup_dir=/root/backup/database/ [[ ! -d ${backup_dir} ]] && mkdir -p ${backup_dir} || echo -e "创建备份目录失败,请手动改创建.\n可以尝试执行 \`mkdir -p ${backup_dir}\` 试试看" && exit 1 #Rclone备份(改为'true'启用) rclone=false rclone_dir=onedrive:/backup/database/ delete_local=false #改为true表示rclone上传完就删除本地的 backup_file=${database}-$(date +"%Y%m%d_%H:%M:%S").sql.gz #backup_file=${database}-$(date +"%Y%m%d").sql.gz mysqldump -u${username} -p${password} ${database}|gzip > ${backup_dir}${backup_file} && \ if [[ "${rclone}" == "true" ]];then rclone copy ${backup_dir}${backup_file} ${rclone_dir} && \ if [[ "${delete_local}" == "true" ]];then rm -f ${backup_dir}${backup_file} fi fi
然后crontab -e
添加一行,表示每天8点执行这个脚本,备份数据库
0 8 * * * bash /root/backup-database.sh
没想好怎么弄保留多少份,感觉有点繁琐
如果大家都是像我一样,按天备份
那么保留7份就可以用当天日期-7天,然后删除这个文件名对应的文件(也就是每次备份完成删除7天前的),时间会有点差异,所以就用日期加时间的通配符匹配文件(或者干脆文件名只保留日期不要时间),但如果不是按天备份(一天几份或者几天一份),就会匹配到不该匹配的文件
还有rclone删除文件不支持通配符,只能rclone lsf出来再匹配,还是有点麻烦的,最好(简单)还是一天一份,然后文件名只保留日期
一个备份成功旧删除15天(可自定义)前的版本(备份成功的情况下才会删除)
#!/bin/bash #这个版本适用于每天备份一次 #数据库 username=root password=123456 database=mjj #保留n天的备份 backup_day=15 #备份目录(最后要保留斜杠,懒得多做一次判断,下面rclone的也是) backup_dir=/root/backup/database/ [[ ! -d ${backup_dir} ]] && mkdir -p ${backup_dir} || echo -e "创建备份目录失败,请手动改创建.\n可以尝试执行 \`mkdir -p ${backup_dir}\` 试试看" && exit 1 #Rclone备份(改为'true'启用) rclone=false rclone_dir=onedrive:/backup/database/ delete_local=false #改为true表示rclone上传完就删除本地的 backup_file=${database}-$(date +"%Y%m%d").sql.gz old_backup_file=${database}-$(date -d -${backup_day}day +"%Y%m%d").sql.gz mysqldump -u${username} -p${password} ${database}|gzip > ${backup_dir}${backup_file} if [[ $? -eq 0 ]];then echo "本地备份: ${backup_file}完成" #删除旧的数据 if [[ -f ${old_backup_file} ]];then rm -f ${backup_dir}${old_backup_file} && \ echo "删除旧备份文件: ${old_backup_file}完成" else echo "${old_backup_file}文件不存在" fi if [[ "${rclone}" == "true" ]];then rclone copy ${backup_dir}${backup_file} ${rclone_dir} -vP if [[ $? -eq 0 ]];then echo "rclone成功备份到: ${rclone_dir}${backup_file}" if [[ "${delete_local}" == "true" ]];then echo "rclone备份完成,删除本地备份: ${backup_dir}${backup_file}" rm -f ${backup_dir}${backup_file} fi #删除rclone旧的数据 rclone delete ${rclone_dir}${old_backup_file} -vP if [[ $? -eq 0 ]];then echo "删除: ${rclone_dir}${old_backup_file}完成" elif [[ $? -eq 3 ]];then echo "${rclone_dir}${old_backup_file}文件不存在" fi else echo "rclone备份失败" fi fi else echo "本地备份失败!" fi
#按时间删除文件夹 cd $folder deldata=$(date -d "1 day ago" +%Y-%m-%d) rm -rf ${deldata}
#按照时间删除文件 find $folder -name '*.sql.gz' -and -mtime +1 -type f -delete if [ $? -eq 0 ];then echo $date delete $dir success! else echo $date delete $dir FAILD! fi