当前位置:Gxlcms > 数据库问题 > MySQL mysqldump 原理浅析

MySQL mysqldump 原理浅析

时间:2021-07-01 10:21:17 帮助过:36人阅读

--single-transaction

该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 --quick 选项

--skip-opt

遇到过好几次mysqldump出来的备份不能导入,同样的库如果mysqldump --skip-opt是可以导入的,分析两个不同的备份文件,发现--skip-opt是一条条的insert语句,但是--opt一个表只有1条insert语句,这样有可能表数据太多导致溢出,可以适当调整

my.cnf中的table_cache值尽量避免这种情况,生产服务器中我设置的是table_cache=512,内存2G,问题解决。--opt导入的速度比--skip-opt要快点,毕竟是优化的,呵呵。table_cache还涉及到mysql的优化,要结合实际应用来调整。

--opt
这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。

在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。
--lock-tables
它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。


本文出自 “运维邦” 博客,谢绝转载!

MySQL mysqldump 原理浅析

标签:mysqldump single master

人气教程排行