天堂

  :: :: 博问 :: 闪存 :: :: :: 订阅 订阅 :: 管理 ::

表结构:

mysql> desc PLUGINDATA;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| PLUGINDATAID | bigint(20)   | NO   | PRI | NULL    |       |
| PLUGINKEY    | varchar(255) | NO   | UNI | NULL    |       |
| FILENAME     | varchar(255) | NO   | UNI | NULL    |       |
| LASTMODDATE  | datetime     | YES  |     | NULL    |       |
| DATA         | longblob     | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

备份的时候报错:

[root@jiradb1 ~]# mysqldump -uroot -p confluence1 PLUGINDATA  >/home/bzuo/confluence1.sqlEnter password: 
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `PLUGINDATA` at row: 5

超过了最大的数据包。默认值是16M,最大值1G。参数说明:

--max-allowed-packet=# 
                      The maximum packet length to send to or receive from
                      server.
[root@jiradb1 ~]# mysqldump --help|grep max-allowed-packet
  --max-allowed-packet=# 
max-allowed-packet                16777216

Dump的时候,生成insert into tbname values(),(),()...行,拼出来的一行写入一个packet,然后再写入文件。在这里例子里面,当备份到第6行的时候,发现拼出来的insert的字节数超过了16M,所以报错了。把第6条记录单独拿出来看看,它有24M。这里的--max_allowed_packet=23M,导出的文件24M里面还包含了DUMP的一些信息,不全是行数据。改成22M就不行。

[root@jiradb1 ~]# mysqldump -uroot -p  --max_allowed_packet=23M confluence1 PLUGINDATA --where='PLUGINDATAID=32014340' >/home/bzuo/confluence1.sql

-rw-r--r-- 1 root root  24M Dec 20 23:42 confluence1.sql

总结:


1:错误提示里的at row: 0,0代表第一行记录。这个计数器从0开始

2:一个packet里面可能包含多个row data,但是至少应该存下一个row data.

3:DUMP导出的时候的packet大小应该小于MYSQL里的packet,要么导入是时候又会提示错误了:ERROR 2006 (HY000) at line 1271: MySQL server has gone away

posted on 2012-12-21 16:38  zuoxingyu  阅读(2945)  评论(0编辑  收藏  举报