跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

mysql如何使用mysqldump备份数据库_mysql工具使用教程

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
,导致写入阻塞。 MySQL(Linux) MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。 下载 只对 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'
——这些细节不提前验证,恢复时才最要命。

相关文章