重庆潼南网站建设哪家便宜,外贸工艺品网站建设,营销网站建设哪个平台好,响应式潍坊网站建设环境#xff1a;Centos 7.9 数据库#xff1a;mysql 8.0.30 需求#xff1a;生产环境 mysql 数据#xff08;约670MB#xff09;备份。其中存在大字段、longblob字段 参考博客#xff1a;Linux环境下使用crontab实现mysql定时备份 - 知乎 一、数据库备份
1. 备份脚本。创… 环境Centos 7.9 数据库mysql 8.0.30 需求生产环境 mysql 数据约670MB备份。其中存在大字段、longblob字段 参考博客Linux环境下使用crontab实现mysql定时备份 - 知乎 一、数据库备份
1. 备份脚本。创建 back.sh文件内容如下
BakDir/opt/back/mysql
LogFile/opt/back/mysql/mysql_backup.log
Datedate %Y%m%d
Begindate %Y年%m月%d日 %H:%M:%S
cd $BakDir
DBtest
DumpFile$DB$Date.sql
GZDumpFile$DB-$Date.sql.tar.gz# 检查备份目录是否存在
if [ -d $BakDir ]
then echo [INFO]开始执行数据库备份程序.....
else mkdir $BakDir
fi# 进入指定目录开始执行备份逻辑 -- 在使用crontab执行命令时会因为绝对路径问题导致导出数据为null需在mysql绝对路径下执行
# 下面的/opt/mysql/bin为我这边的mysql安装目录的bin目录
# 执行备份命令
echo [INFO] mysqldump -uroot -p123456 --databases $DB $DumpFile $LogFile
mysqldump -uroot -p123456 --databases $DB $DumpFilemv $DumpFile $BakDir
cd $BakDir
# 对备份数据进行压缩
echo [INFO] tar czvf $GZDumpFile $DumpFile $LogFile
tar czvf $GZDumpFile $DumpFile# 删除备份的sql文件
echo [INFO] rm $DumpFile $LogFile
rm $DumpFile# 备份 备份的sql文件到指定目录
echo [INFO] mv $GZDumpFile $BakDir $LogFile
mv $GZDumpFile $BakDirLastdate %Y年%m月%d日 %H:%M:%S
echo 开始:$Begin 结束:$Last $GZDumpFile 执行成功 $LogFile
#清理备份保留30天的备份
find $BakDir/* -mtime 30 -exec rm {} \;
echo [INFO]备份任务执行结束.....2. 步骤介绍 1首先我们通过mysqldump命令将数据库备份下来按照当前日期进行命名 2然后将数据库备份文件移动到指定位置 3对数据库备份文件进行文件压缩并删除备份文件 4清理一个月前的备份文件任务执行结束
3. 原理介绍 主要使用mysqldump命令
mysqldump -uusername -ppassword --databases databasename dumpfilename 还可指定下列参数
--databases databasename # 指定数据库
--tables tablename # 指定表
--ignore-tabletablename # 忽略表
--whereid1 # 筛选条件
二、定时执行备份
1. 软件检查 使用 cron 创建执行计划cron 是一个 linux 下的定时执行工具。先检查 cron 服务是否正常启动启动
service crond status // 查看服务状态 如果没有启动则使用下面【启动服务】命令启动
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态 2. 创建执行计划 每天凌晨3点0分执行脚本mysql_buckup.sh。 不熟悉规则的可以使用可视化工具生成Cron - 在线Cron表达式生成器
crontab -e
# 按 i 进行编辑输入
0 3 * * * /opt/back/mysql/backup.sh
# 然后 wq 保存可以通过 crontab -l 查看已配置的定时任务
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。 解决方案临时增大这个值即可
mysql show global variables like max_allowed_packet;
-----------------------------
| Variable_name | Value |
-----------------------------
| max_allowed_packet | 1048576 |
-----------------------------
1 row in set (0.00 sec)
mysql set global max_allowed_packet1024*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_FORMATDYNAMIC or ROW_FORMATCOMPRESSED 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;