Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysqldump使用--扩展插入选项_Mysql_Mysqldump - Fatal编程技术网

mysqldump使用--扩展插入选项

mysqldump使用--扩展插入选项,mysql,mysqldump,Mysql,Mysqldump,mysqldump的--extended insert选项是否有特定范围,它将1024条语句分组,然后使用另一个扩展insert 我的表在转储数据时有1000多万行。我没有更改允许的最大数据包大小(设置为100 MB),并且我的表大小超过10 GB。我想您正在查找和/或。它们是一般的客户端设置,但它们控制每个包的大小,即使对于mysqldump也是如此。我最近也遇到了同样的问题,1.1gb的数据库用--opt导出,但由于记录太多,导入速度非常慢,我离开了一夜,第二天早上它仍在导入,所以我决定停止

mysqldump的--extended insert选项是否有特定范围,它将1024条语句分组,然后使用另一个扩展insert


我的表在转储数据时有1000多万行。我没有更改允许的最大数据包大小(设置为100 MB),并且我的表大小超过10 GB。我想您正在查找和/或。它们是一般的客户端设置,但它们控制每个包的大小,即使对于mysqldump也是如此。

我最近也遇到了同样的问题,1.1gb的数据库用
--opt
导出,但由于记录太多,导入速度非常慢,我离开了一夜,第二天早上它仍在导入,所以我决定停止并重新开始

发现这帮了大忙

我进入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
解释很简单,自动提交本质上是在每次插入时刷新磁盘,即使使用
--extended insert
(默认情况下使用
--opt
),但禁用该选项将在提交到磁盘之前尽可能多地分组,因此我能够在刷新之前对大约12k条记录进行分组,其他选项禁用密钥检查以提高性能


以这样的速度,我可以在半小时甚至更短的时间内导入1300万条记录,但我没有检查:)

我知道这有点困难,但如果有人再次陷入困境,这将对他有所帮助。这里的问题是,mysql引擎在执行mysqldump命令后将缓冲RAM中的所有表,完成后将写入磁盘。当表缓存大于服务器RAM的大小时,我们将遇到问题。要桥接使用--quick选项(例如:mysqldump-h sitename.com-u root-ppass\u word-x--all databases--quick>dump\u file\u name.sql)的数据库,它将直接写入磁盘。除了选项名之外,此选项的速度不比带缓冲区的BU快。

如果要分组1024条insert语句,请首先获取语句的长度。例如,长度为50个字符,总长度为50K。在这种情况下,请尝试

$ mysqldump --net_buffer_length=50K [and your other arguments]
正如Andreas指出的,您应该设置
net\u buffer\u length
并监视
max\u allowed\u packet
mysqldump
with
net\u buffer\u length=50K
创建最长为50K的扩展insert语句。4K是
net\u buffer\u length
的最小值。您还可以将该选项放入

my.cnf

[mysqldump]
net_buffer_length = 50K
Mysql服务器系统的值必须大于为客户端设置的值<例如,code>my.cnf
[mysqld]
net\u buffer\u length=1M
。它的最大值是
1M


max\u allowed\u packet
必须比这个大得多。这是客户端/服务器将要通信的单个语句的数据包大小
max_allowed_packet
的默认值是
16M
,对于MySQL 5.7,它可以达到
1G

何时我应该考虑增加Max Sub EddiePaskTI不知道将它设置为MAX的任何缺点,但我确信它不能是完美的,因为它将是默认的。在您的情况下,将其设置得足够高,以便在转储/加载中获得良好的性能,但请确保两台机器上的设置匹配。