개요

MySQL DB 에 insert 할 경우 다음과 같은 에러가 발생하는 경우가 있다.

mysqldump: Error 2020: Got packet bigger than ‘max_allowed_packet’ bytes when dumping table `xxxx` at row: 1234

원인은 client/server 간 주고 받을수 있는 packet size를 지정하는 "max_allowed_packet" 이 기본값으로 1M 이기 때문에 이것보다 큰 용량의 파일이 있을 경우 발생할 수 있다.

처리

  1. mysql client로 연결후에 다음 server variable을 통해 현재 용량을 확인한다.

    mysql> show variables like 'max_allowed_packet%';
    +--------------------+---------+
    | Variable_name      | Value   |
    +--------------------+---------+
    | max_allowed_packet | 1048576 |
    +--------------------+---------+
    1 row in set (0.29 sec)
    CODE
  2. /etc/my.cnf 의 [mysqld] 항목을 수정한다.

    [mysqld]
    character-set-server=utf8
    max_allowed_packet     = 64M
    CODE
  3. service mysql restart
  4. 1번으로 돌아가서 설정이 변경되었는지 확인하고 client 에서 상황이 해결되었는지 확인해 보고 계속 발생한다면 사이즈를 더 크게 수정해본다.

mysqldump

mysqldump는 /etc/my.cnf 의 max_allowed_packet 을 참조하지 않으므로 my.cnf 를 수정해도 계속 에러가 발생한다.

실행시 다음과 같이 --max_allowed_packet 옵션을 추가해야 한다.

mysqldump -u root -pPassword --max_allowed_packet=512M --databases mydatabase--tables mytable > dump.sql


Ref