mysqldump备份核心命令易卡在权限、字符集、锁表和大库导出失败四点:需显式指定-u/-p;--default-character-set须与库实际编码一致;InnoDB用--single-transaction避锁,MyISAM会退化为全局读锁;超大库需调大--max-allowed-packet或用--tab分导。

直接用 mysqldump 备份 MySQL 数据库,核心就一条命令,但实际用起来常卡在权限、字符集、锁表和大库导出失败这几个点上。
备份单个数据库时必须指定用户名和密码
mysqldump 默认不读取 ~/.my.cnf(除非显式加 --defaults-file),所以不加 -u 和 -p 会直接报错 Access denied for user 'root'@'localhost'(即使你当前是 root 用户)。
- 正确写法:
mysqldump -u root -p mydb > mydb.sql,执行后会提示输入密码 - 密码可直接跟在
-p后面(如-proot123),但不推荐——密码会留在 shell 历史里 - 想免密操作,得提前配好
~/.my.cnf,且权限必须是600:[client] user=root password=yourpass
中文乱码?重点检查 --default-character-set 和服务器实际编码
导出 SQL 文件里中文变问号或乱码,不是因为没加 --default-character-set=utf8mb4,而是它必须和数据库/表的实际字符集一致。如果库是 latin1,硬设 utf8mb4 反而导致插入失败。
- 先查库编码:
SHOW CREATE DATABASE mydb;,看DEFAULT CHARACTER SET - 导出时匹配它:
mysqldump -u root -p --default-character-set=latin1 mydb > mydb.sql - 如果目标是迁移到新环境并统一用 utf8mb4,先改库编码再导出,或加
--skip-set-charset --add-drop-database手动控制 charset 语句
线上业务库不能停写?用 --single-transaction 避免锁表
InnoDB 表用 --single-transaction 可保证一致性快照,全程不锁表;但 MyISAM 表不支持,会自动退化成 FLUSH TABLES WITH READ LOCK,导致写入阻塞。
ECSHOP仿优购鞋子商城整站源码,程序基于ECSHOP 2.7.3 UFT8版本制作,适合服装,鞋子,家居等商城使用。目前程序未添加广告位,请自行在网站后台进行添加。具体添加方法,请查看SHOPEX5站点的相关教程。 安装方法:1。访问 :域名/install2. 按照程序提示进行安装.3.安装完成后,登陆网站后台.选择数据库管理--数据库备份--数据库还原.,导入之前的数据库。4.后台-模板管
- 只对 InnoDB 有效:
mysqldump -u root -p --single-transaction --routines --triggers mydb > mydb.sql - 务必确认表引擎:
SELECT table_name, engine FROM information_schema.tables WHERE table_schema='mydb'; - 如果混有 MyISAM 表,要么先转引擎,要么接受短时间全局读锁——
--lock-all-tables比--lock-tables更可控
导出超大数据库失败?拆分或关掉 max_allowed_packet
导出过程中突然中断,错误信息类似 Got error: 2020: Got packet bigger than 'max_allowed_packet' bytes,说明某条 INSERT 语句(比如含长文本字段)超过了服务端限制。
- 临时加大限制:
mysqldump -u root -p --max-allowed-packet=512M mydb > mydb.sql - 更稳妥的是跳过大字段导出:
--ignore-table=mydb.log_table,或用--no-data先导结构 - 真正超 10GB 的库,建议用
--tab导出为纯文本(每表一个.sql+.txt),再配合mysqlimport
真正麻烦的不是命令记不住,而是导出后发现 SQL 里缺了 CREATE DATABASE、存储过程没带 --routines、或者用 source 导入时报 Unknown collation: 'utf8mb4_0900_ai_ci'——这些细节不提前验证,恢复时才最要命。









