• 记一次 mysql 数据库定时备份


    环境:Centos 7.9

    数据库:mysql 8.0.30

    需求:生产环境 mysql 数据(约670MB)备份。其中存在大字段、longblob字段

    参考博客:Linux环境下使用crontab实现mysql定时备份 - 知乎

    一、数据库备份

    1. 备份脚本。创建 back.sh,文件内容如下

    1. BakDir=/opt/back/mysql
    2. LogFile=/opt/back/mysql/mysql_backup.log
    3. Date=`date +%Y%m%d`
    4. Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
    5. cd $BakDir
    6. DB=test
    7. DumpFile=$DB$Date.sql
    8. GZDumpFile=$DB-$Date.sql.tar.gz
    9. # 检查备份目录是否存在
    10. if [ -d "$BakDir" ]
    11. then echo "[INFO]开始执行数据库备份程序....."
    12. else mkdir $BakDir
    13. fi
    14. # 进入指定目录开始执行备份逻辑 -- 在使用crontab执行命令时,会因为绝对路径问题导致导出数据为null,需在mysql绝对路径下执行
    15. # 下面的/opt/mysql/bin为我这边的mysql安装目录的bin目录
    16. # 执行备份命令
    17. echo "[INFO] mysqldump -uroot -p123456 --databases $DB > $DumpFile" >> $LogFile
    18. mysqldump -uroot -p123456 --databases $DB > $DumpFile
    19. mv $DumpFile $BakDir
    20. cd $BakDir
    21. # 对备份数据进行压缩
    22. echo "[INFO] tar czvf $GZDumpFile $DumpFile" >> $LogFile
    23. tar czvf $GZDumpFile $DumpFile
    24. # 删除备份的sql文件
    25. echo "[INFO] rm $DumpFile" >> $LogFile
    26. rm $DumpFile
    27. # 备份 备份的sql文件到指定目录
    28. echo "[INFO] mv $GZDumpFile $BakDir" >> $LogFile
    29. mv $GZDumpFile $BakDir
    30. Last=`date +"%Y年%m月%d日 %H:%M:%S"`
    31. echo 开始:$Begin 结束:$Last $GZDumpFile 执行成功 >> $LogFile
    32. #清理备份,保留30天的备份
    33. find $BakDir/* -mtime +30 -exec rm {} \;
    34. echo "[INFO]备份任务执行结束....."

    2. 步骤介绍

         1)首先我们通过mysqldump命令将数据库备份下来,按照当前日期进行命名;

         2)然后将数据库备份文件移动到指定位置;

         3)对数据库备份文件进行文件压缩并删除备份文件

         4)清理一个月前的备份文件,任务执行结束;

    3. 原理介绍

         主要使用mysqldump命令:

    mysqldump -uusername -ppassword --databases databasename  > dumpfilename

         还可指定下列参数:

    1. --databases databasename # 指定数据库
    2. --tables tablename # 指定表
    3. --ignore-table=tablename # 忽略表
    4. --where='id=1' # 筛选条件

    二、定时执行备份

    1. 软件检查

         使用 cron 创建执行计划,cron 是一个 linux 下的定时执行工具。先检查 cron 服务是否正常启动启动

    service crond status   // 查看服务状态 

         如果没有启动,则使用下面【启动服务】命令启动

    1. service crond start //启动服务
    2. service crond stop //关闭服务
    3. service crond restart //重启服务
    4. service crond reload //重新载入配置
    5. service crond status //查看服务状态

     2. 创建执行计划

         每天凌晨3点0分执行脚本mysql_buckup.sh。 不熟悉规则的可以使用可视化工具生成:Cron - 在线Cron表达式生成器

    1. crontab -e
    2. # 按 i 进行编辑,输入
    3. 0 3 * * * /opt/back/mysql/backup.sh
    4. # 然后 wq 保存,可以通过 crontab -l 查看已配置的定时任务
    5. crontab -l

    3. 查看执行计划日志

    tail -fn 200 /var/log/cron

    三、导出SQL脚本执行恢复数据遇到问题

    1. 2006-MySQL server has gone away

         参考博客:mysql错误码:2006-MySQL server has gone away详解_2006 - mysql server has gone away_我有我向往的生活的博客-CSDN博客

          问题分析:导出的SQL文件单条插入语句太长,超出 mysql 服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小,即 max_allowed_packet。

          解决方案:临时增大这个值即可

    1. mysql> show global variables like 'max_allowed_packet';
    2. +--------------------+---------+
    3. | Variable_name | Value |
    4. +--------------------+---------+
    5. | max_allowed_packet | 1048576 |
    6. +--------------------+---------+
    7. 1 row in set (0.00 sec)
    8. mysql> set global max_allowed_packet=1024*1024*16;

    2. [ERR] 1153 - Got a packet bigger than 'max_allowed_packet' bytes

         与上一个问题解决方案一致

    3. [ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

          参考博客
    MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB_pymysql.err.operationalerror: (1118, 'row size too_大王来巡山了的博客-CSDN博客

          问题分析:mysql-innodb是按照page存储数据的,每个page max size是16k,然后每个page两行数据,所以每行最大8k数据。

          解决方案:查看严格模式是否开启,如果开启,关闭即可。

    4. [ERR] 1449 - The user specified as a definer ('root'@'%') does not exist 

          问题分析:root 用户主机没有配置成 %

          解决方案:开启 root 用户远程访问即可

    update user set host='%' where user ='root';

  • 相关阅读:
    本地搭建kafka并用java实现发送消费消息
    彻底理解并解决服务器出现大量TIME_WAIT - 第四篇
    代码随想录二刷day35
    OSPF路由协议
    windows server充当DHCP服务器与华为模拟器对接下发地址
    pdf转jpg的方法【ps和工具方法】
    红杉投资的这家公司押注AI面试
    面试算法-常用数据结构
    MySQL 主从复制、读写分离
    vue3封装弹窗组件实现父子双向绑定
  • 原文地址:https://blog.csdn.net/zcf980/article/details/133081814