mysqldump的--extended-insert选项是否有任何特定范围,它对1024个语句进行分组,然后使用另一个扩展插入..
我的表有超过1000万行,同时转储数据我没有更改最大允许数据包大小(设置为100 MB),我的表大小超过10 GB
答案 0 :(得分:1)
我认为您正在寻找--net_buffer_length
和/或--max_allowed_packet
。它们是常规客户端设置,但它们控制每个包甚至对mysqldump的大小。
答案 1 :(得分:1)
我知道这有点过时了,但是如果有人再次陷入困境,这将有助于他。这里的问题是执行mysqldump命令后的mysql引擎会缓冲RAM中的所有表,并在完成此操作后将写入磁盘。当表缓存大于服务器RAM的大小时,我们将遇到问题。要使用 - 快速 选项(例如: mysqldump -h sitename.com -u root -ppass_word -x --all-databases --quick&gt ; dump_file_name.sql ),它会直接写入磁盘。除了选项名称,此选项并不比带缓冲区的 BU 快。
答案 2 :(得分:0)
我最近遇到了同样的问题,1.1gb数据库导出了--opt
,但导入的记录和veeery很慢,我放了一夜,第二天早上它还在导入,所以我决定停下来重新开始。
发现这有很多帮助https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html
我进入了mysql shell并运行了:
mysql> SET autocommit=0;
mysql> SET unique_checks=0;
mysql> SET foreign_key_checks=0;
mysql> SOURCE my_database.sql;
开始看:
Query OK, 12315 rows affected (0.34 sec)
Records: 12315 Duplicates: 0 Warnings: 0
等。基本上每秒运行36k次插入,但加时速度确实慢了。
Query OK, 12305 rows affected (1.68 sec)
Records: 12305 Duplicates: 0 Warnings: 0
解释很简单,autocommit基本上会在每个插入时刷新到磁盘,即使使用--extended-insert
(默认情况下使用--opt
),但禁用它会在提交到磁盘之前尽可能多地进行分组,所以我能够在刷新之前对大约12k的记录进行分组,其他选项禁用了关键检查以提高性能。
按照这个速度,我能够在半小时或甚至更少的时间内导入1300万条记录,我没有检查过:)
答案 3 :(得分:0)
如果您想要组1024插入语句,请首先获取语句的长度。例如,legnth是50个字符,总长度是50K。在这种情况下,请尝试
UIView.animate(withDuration: 0.5) {
self.MainScollView.contentOffset.y = 90
}
正如安德烈亚斯指出的那样,你应该设置$ mysqldump --net_buffer_length=50K [and your other arguments]
并注意net_buffer_length
。 max_allowed_packet
mysqldump
创建了长达50K的扩展插入语句。 4K是net_buffer_length = 50K
的最小值。您也可以将选项放在
net_buffer_length
您的Mysql服务器系统的值必须大于您为客户端设置的值。例如my.cnf
[mysqldump]
net_buffer_length = 50K
my.cnf
[mysqld]
。它的最大值为net_buffer_length = 1M
。
1M
必须远大于此。这是客户端/服务器将通信的单个语句的数据包大小。 max_allowed_packet
的默认值为max_allowed_packet
,MySQL 5.7最高可达16M
。