mysqldump报错默认不写入日志,需显式重定向stderr(如2>dump.err)才能捕获错误;常见错误包括权限不足、锁超时、表名非法、磁盘满等;--log-error无效于客户端错误,脚本中应检查$?并校验变量。
mysql
dump 报错时日志里看不到具体错误?
默认情况下
错误直接输出到 stderr,不写入日志文件——你看到的“空日志”或“只有成功语句”,大概率是因为没捕获 stderr。要真看报错,必须显式重定向:
或者更稳妥地分开记录:
。否则
为空,
可能是截断的半成品,还带不了上下文。
常见 dump.err 中的关键错误信息怎么读
打开
后别从头扫,先搜这几类关键词:
:账号没权限,重点查
、
、
权限,不是光有
就行
:表被长事务锁住,不是加
就能绕过,得确认 MySQL 版本支持(5.6+)、引擎是 InnoDB,且没在执行 DDL
:库名或表名含特殊字符(比如中划线、空格),必须用反引号包裹,但
自动加的反引号有时会失效,可试加
再手动处理
:磁盘满或
所在目录不可写,注意检查
和父目录权限,不是 MySQL 用户权限问题
为什么加了 --log-error 还没日志?
的
参数只控制「服务端错误日志」的路径,它不接管客户端自身的报错(比如连接失败、参数错误、权限拒绝)。这个参数实际作用非常有限,日常排查基本用不上。真正该盯的是命令行重定向结果,而不是依赖它。另外,如果用了
指定配置文件,记得检查该文件里有没有意外覆盖了
或
,这类静默覆盖会导致
却不提示哪行配置出问题。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
备份脚本里如何让错误立刻中断并暴露出来
别靠肉眼翻日志,脚本里加两行就稳得多:
用
让任意命令失败直接退出(注意兼容性,部分老 shell 需用
)
执行后立刻检查
:
关键点:
成功时返回 0,但部分错误(如部分表导出失败)可能仍返回 0 —— 此时得靠
是否为空或 grep 错误关键词来兜底
最常被忽略的是:脚本里用了变量传密码,但变量为空时
会交互式等输入,导致卡住;务必在执行前校验
并提前报错。
mysqldumpmysqldump -u root -p db_name 2>&1 > backup.sqlmysqldump -u root -p db_name > backup.sql 2> dump.errdump.errbackup.sqldump.errAccess denied for userSELECTLOCK TABLESSHOW VIEWUSAGECouldn't execute 'SELECT ...': Lock wait timeout exceeded--single-transactionUnknown table 'xxx' in information_schemamysqldump--skip-quote-namesGot errno 32 on writebackup.sqldf -hmysqldump--log-error--defaults-extra-fileuserpasswordAccess deniedset -eset -o errexit$?mysqldump -u $USER -p$PASS mydb > out.sql 2> err.log
if [ $? -ne 0 ]; then echo "Dump failed"; cat err.log; exit 1; fimysqldumperr.logmysqldump[ -z "$PASS" ]