mysqldump使用介绍分为使用示例和配置项两部分。其中第二块和第三块都是性能优化的选项。
1. 使用示例#备份整个库
shell> mysqldump db_name > backup-file.sql
#从dump文件还原数据方式一
shell> mysql db_name
#从dump文件还原数据方式二
shell> mysql -e "source /path-to-backup/backup-file.sql" db_name
#使用mysqldump从一个库复制数据导另外一个MySQL服务器
shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
#导出多个数据库
shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
#导出所有数据库
shell> mysqldump --all-databases > all_databases.sql
#针对InnoDB表的在线备份。这种方式要求在开始导出时有一个所有表的全局读锁(使用FLUSH TABLES
WITH READ LOCK)。
shell> mysqldump --all-databases --master-data --single-transaction >
all_databases.sql
2. 性能优化选项
1. --extended-insert, -e:使用包含多个值得多行语法生成INSERT语句。这会缩小dump文件得体
积,并且在加快dump文件的insert操作。
2. --insert-ignore:使用INSERT IGNORE语句,而不是INSERT语句。
3. --max-allowed-packet=value:客户端和服务端通信的最大缓冲大小。默认是24MB,最大是
1GB。
4. --net-buffer-length=value:客户端和服务端通信的初始大小。当创建多行INSERT语句时,
mysqldump创建最多--net-buffer-length字节长度的行。如果你增加这个变量MySQL服务器的
net_buffer_length系统变量的值至少比这个大。
5. --opt:这个选项,默认开启,是 --add-drop-table --addlocks
--create-options --disable-keys --extended-insert --lock-tables --quick
--set-charset 组合的简写。它能快速的dump,并且生成的dump文件能够被较快的加载的
MySQL服务器。
6. --quick, -q: 这个选项对导出大表有用。
3. 事务选项
下面选项要平衡导出操作的性能,依赖于被导出数据的可靠性和一致性。
1. --add-locks:对于每个表的dump,环绕一对LOCAK TABLES 和UNLOCK TABLES语句。这会让导
出的文件被加载时,写入速度更快。
2. --lock-all-tables, -x:锁住所有库的所有表。这通过在整个dump期间获取一个全局读锁完成。这
个选项自动关闭--single-transaction 和 --locktables。
#备份整个库
shell> mysqldump db_name > backup-file.sql
#从dump文件还原数据方式一
shell> mysql db_name < backup-file.sql
#从dump文件还原数据方式二
shell> mysql -e "source /path-to-backup/backup-file.sql" db_name
#使用mysqldump从一个库复制数据导另外一个MySQL服务器
shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
#导出多个数据库
shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
#导出所有数据库
shell> mysqldump --all-databases > all_databases.sql
#针对InnoDB表的在线备份。这种方式要求在开始导出时有一个所有表的全局读锁(使用FLUSH TABLES
WITH READ LOCK)。
shell> mysqldump --all-databases --master-data --single-transaction >
all_databases.sql
3. --lock-tables, -l: 对于每个要导出的数据库,在导出它们前,锁住所有要被导出的表。对于支持事
务的表,--single-transaction选项比--lock-tables好很多,因为它不根本不需要锁住所有表。因为-
-lock-tables单独的锁住每个库的表,这个选项部保证在导出文件中的表在数据库之间是逻辑上一
致。在不同数据库中的表可能是完全不同的导出状态。
4. --no-autocommit:使用SET autocommit = 0 和 COMMIT封闭每个被导出的表的INSERT语句。
5. --single-transaction:对于支持事务的表有用,保证导出一致的状态。