MySQL导出与恢复应拆成两个受控阶段:先生成和检查产物,再在确认过的目标上执行恢复。不要把带历史凭据的导出命令直接接入另一个数据库,也不要把“SQL文件存在”当成备份可用。
先明确导出结构还是结构加数据
以下使用示例库名和账号,占位值须替换。-p后不跟密码,会交互提示;命令会连接数据库并写本地文件,需在授权源端执行,并使用新的受限输出位置避免覆盖已有备份。
# 库内表的结构和数据
mysqldump -u backup_user -p example_db > example-db-full.sql
# 库内表结构,不导出表行
mysqldump -u backup_user -p --no-data example_db > example-db-schema.sql
# 指定表的结构和数据
mysqldump -u backup_user -p example_db example_table > example-table-full.sql
# 指定表结构,不导出表行
mysqldump -u backup_user -p --no-data example_db example_table > example-table-schema.sql
--no-data的短选项是 -d。不带它不能因为小标题写“结构”就认为不会导出数据。上述命令用于说明范围,不是一套覆盖所有对象与场景的生产备份配置。MySQL mysqldump手册
账号权限、视图、触发器、例程、事件、GTID与恢复版本都要按需要核对。普通某库导出也不意味着用户权限、服务器配置和外部文件全部备份。
并发写入时,需要一致性方案
仅看导出命令退出正常,不能证明所有表来自同一逻辑时刻。--single-transaction适用于InnoDB等事务表的一致读取,不会让MyISAM等非事务表自动获得同样保证;导出期间的DDL也可能破坏预期。
应记录MySQL客户端/服务端版本、存储引擎、对象范围与写入安排,再选择相应选项;不要为赶进度一律锁全库,也不要声称单个选项可解决所有一致性问题。
SQL产物需要保护与审查
导出文件可能包含完整用户数据、建表语句甚至DROP语句,保存位置、权限、加密、传输和保留期应受控;不要提交到代码仓库或网站资源目录。查看失败退出码和错误输出,文件非空并不证明导出完整。
恢复前核对源/目标身份、字符集与排序规则、对象名称、DEFINER和可能覆盖的范围。默认选项组合也可能生成删除重建相关语句,不能未经检查导入有价值的现存库。
恢复验收才回答“能不能用”
在授权的隔离目标中验证恢复,核对对象清单、行数及必要校验、约束、关键查询和应用读取;明确目标可回滚后,再安排正式迁移。本文不提供一条指向生产库的直接恢复管道,也没有执行导出或恢复。
导出是中间产物,备份是否可靠要由恢复演练和业务对照来回答。