Kir*_*met 9 mysql mysqldump backup
我在 MySQL innoDB 中有大约 12 个表,其中一个有 1100 万条记录。
我用这个命令来备份:
mysqldump -u [USERNAME] -p [DBNAME] | gzip > [/path_to_file/DBNAME].sql.gz
Run Code Online (Sandbox Code Playgroud)
此命令用于在新服务器上导入内容:
USE [DBNAME];
SOURCE [/path_to_file/DBNAME].sql;
Run Code Online (Sandbox Code Playgroud)
这是我所遭受的痛苦(每个查询的时间都在增加!):
我可以做些什么来加快速度?我的 mysqldump 命令有问题吗?
对于您的转储命令,您可以使用以下内容
mysqldump --single-transaction --extended-insert -u [USERNAME] -p [DBNAME] | gzip > [/path_to_file/DBNAME].sql.gz
Run Code Online (Sandbox Code Playgroud)
扩展插入更好。
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction Single Transaction 选项更适合转储 InnoDB 表。
在您的my.cnf文件中,临时进行以下更改
http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_doublewrite
innodb_doublewrite=0
并且
http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit
innodb_flush_log_at_trx_commit = 2
重新启动 MySQL,然后在导入后删除这些选项并再次重新启动 MySQL。
记忆表
如果您的整个数据库可以放入内存中,您可以在每个表的转储 sql 文件中将 ENGINE=InnoDB 更改为 ENGINE=MEMORY,或者仅将导入时间最长的表更改为 ENGINE=MEMORY,将转储文件导入回您的数据库然后将引擎改回innodb。
ALTER TABLE name_of_table ENGINE=InnoDB;
mysqlimport 命令
http://linux.die.net/man/1/mysqlimport
我已经使用 mysqlimport 导入使用 mysqldump 中的选项卡格式选项备份的数据。事实证明,它比通过 mysql 命令导入更快。
使用 mysqldump 转储数据库
mysqldump --tab=/some_directory/ -u [USERNAME] -p [DBNAME] [TABLENAME]
将数据导入您的数据库。
mysqlimport -u [用户名] -p [数据库名] /some_directory/tablename.sql
如果您没有正确调整 InnoDB,批量加载 InnoDB 可能会非常令人生畏。
以下是您需要关注的设置:
多达一半的缓冲池可用于批量插入。这会推出缓存数据。在将 mysqldump 重新加载到 InnoDB 表期间,缓冲池成为新加载的 InnoDB 数据和二级索引更改之间的开放战区。有鉴于此,增加innodb_buffer_pool_size
并且innodb_log_file_size
是至关重要的和势在必行的。
另外,请确保这些都已关闭。mysqldump 应该将这些变量设置为 0。
UNIQUE_CHECKS=0;
FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)
您可以head -20
在 mysqldump 文件上使用简单的方法进行检查。
还有一个重要的方面:innodb_change_buffering
根据MySQL 文档,您可以指定在任何 DML 操作期间缓冲的内容。有关这方面的完整说明,请参阅Controlling InnoDB Change Buffering。
我推荐以下设置:
[mysqld]
innodb_buffer_pool_size=2G
innodb_log_file_size=512M
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=5000
innodb_thread_concurrency=0
Run Code Online (Sandbox Code Playgroud)