建备份可执行命令文件

  1. cd /usr/local/docker/mysql/backup
  2. vim backup.sh

**backup.sh** 内容:

  1. #! /bin/bash
  2. #############定义变量###########################
  3. #备份sql保存位置
  4. BACKUP_DIR="/usr/local/docker/mysql/backup"
  5. #LOG文件位置
  6. LOG_FILE="/usr/local/docker/mysql/backup/backup.log"
  7. DATE=`date +%Y-%m-%d_%H-%M`
  8. USER="root"
  9. PASSWORD="koyo49mysql@2022"
  10. #数据库名,--all-databases 代表全部数据库
  11. DATABASE="--all-databases"
  12. #数据库备份文件名
  13. SQL_FILE="backup_all_$DATE.sql"
  14. #保存天数
  15. KEEP_DAYS=15
  16. # mysql容器名
  17. DOCKER_TAG="mysql"
  18. #############删除过期文件###########################
  19. # 删除过期文件
  20. DEL_FILE=`find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$KEEP_DAYS -exec ls {} \;`
  21. for delfile in ${DEL_FILE}
  22. do
  23. rm -f $delfile
  24. echo "$DATE----- $delfile delete success!" >> $LOG_FILE
  25. done
  26. echo "$DATE----- clear cache backup mysql file" >> $LOG_FILE
  27. #############备份数据库###########################
  28. if [ ! -d $BACKUP_DIR ];
  29. then
  30. mkdir -p "$BACKUP_DIR"
  31. fi
  32. cd $BACKUP_DIR
  33. # 执行备份命令
  34. docker exec -i $DOCKER_TAG mysqldump -u$USER -p$PASSWORD $DATABASE > $SQL_FILE
  35. if [[ $? == 0 ]]; then
  36. # 压缩SQL文件
  37. tar czvf $SQL_FILE.gz $SQL_FILE
  38. echo "$DATE----- $SQL_FILE.gz backup success!" >> $LOG_FILE
  39. rm -f $SQL_FILE
  40. else
  41. echo "$DATE----- $SQL_FILE.gz backup fail!" >> $LOG_FILE
  42. fi

创建定时任务

  1. # 创建定时任务
  2. crontab -e
  3. # 设置定时任务,每天凌晨1点执行相关脚本
  4. 0 1 * * * sh /usr/local/docker/mysql/backup/backup.sh
  5. # 查看定时任务
  6. crontab -l

恢复数据

  1. docker cp <sql文件位置> <容器name>:/
  2. docker exec <容器name> sh -c 'exec mysql -u<用户名> -p<密码> -D<数据库> < <sql文件>'