#数据库mysqldump导出 老是出错的解决办法
#大表导出 防超时关健配置
[mysqld]
net_read_timeout = 600
net_write_timeout = 600
wait_timeout = 28800
interactive_timeout = 28800
max_execution_time = 0 #最关健
######【导出代码开始】#######
#!/bin/bash
#database_mysqldump.sh
#chmod +x database_mysqldump.sh
#nohup ./database_mysqldump.sh > /dev/null 2>&1 &
DATE=$(date +%Y-%m-%d_%H-%M-%S)
LOGDIR="/www/wwwroot/mysql/db/logs"
mkdir -p "$LOGDIR"
# 执行 mysqldump 不压缩
mysqldump \
--opt --hex-blob --single-transaction --quick --skip-lock-tables \
--routines --events --triggers --skip-add-locks --skip-comments \
--max-allowed-packet=2G --net-buffer-length=16M \
--default-character-set=utf8mb4 --force \
--lock-tables=false \
--host=localhost --port=3306 \
--user=root --password='密码' 数据库名 \
2> "$LOGDIR/backup_detail_${DATE}.log" \
> "$LOGDIR/../${DATE}.sql" # 这里不进行压缩,直接输出为 .sql 文件
# 备份完成后记录
echo "Backup finished at $(date)" >> "$LOGDIR/backup_main_${DATE}.log"
######【导出代码结束】#######
# backup_detail_${DATE}.log 为错误信息 如果没有错误说明成功
#"$LOGDIR/backup_main_${DATE}.log" 成功信息 + 上面没有错误 =成功 (最好在按下面提示再确认)
#开始
chmod +x database_mysqldump.sh
nohup ./database_mysqldump.sh > /dev/null 2>&1 &
[root@localhost ~]#
[root@localhost db]# chmod +x database_mysqldump.sh
[root@localhost db]# nohup ./database_mysqldump.sh > /dev/null 2>&1 &
[1] 389284
[root@localhost db]#
#下面为检查 检测
ps aux | grep mysqldump
#超时会在有多行的表上出错如下
mysqldump: Error 3024: Query execution was interrupted, maximum statement execution time exceeded when dumping table `cache` at row: 20545622
mysqldump: Error 3024: Query execution was interrupted, maximum statement execution time exceeded when dumping table `member` at row: 4301385
#信息确认 查 db.sql所有 的表名 【大SQL会卡死】
grep -oP "CREATE TABLE `\K[^`]+" db.sql > table_list.txt
#兼容性更高
grep "CREATE TABLE \`" database.sql | awk -F'`' '{print $2}' > table_list.txt
#信息确认 查 db.sql所有最后几项 的表名 【防卡死】
#按字节读取最后 1GB
tail -c 1G database.sql | grep "CREATE TABLE \`" | cut -d'`' -f2
#方法 B:按行读取最后 N 行(例如 20000 行)
tail -n 20000 database.sql | grep "CREATE TABLE \`" | cut -d'`' -f2
浙公网安备 33010602011771号