表结构:
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