GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES ON blog.* TO 'bak'@'%';
mysqldump --routines --triggers --single-transaction blog > db.sql

换用只读账号做备份后,还原发现视图全没了,触发器一个都没导出来,mysqldump 当时只打了一行 warning。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:只读账号有 SELECT,但没有 SHOW VIEW 和 TRIGGER 权限,这两类对象被静默跳过,warning 混在输出里没人注意。

「备份账号权限」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

处理上按这个顺序:给备份账号补 SELECT、SHOW VIEW、TRIGGER、LOCK TABLES 权限;导出时加 --routines --triggers 显式带上这两类对象;导完比对对象数量 视图和触发器要和源库一致。

确认没问题再收工,还原后视图和触发器数量与源库一致,导出输出里没有 warning。

作者 9823189