先日、MySQLでクエリを実行したところ以下のエラーに遭遇した。

PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away in /xxxxxx/main.php:25211
Stack trace:

調べてみると、問題の原因は一度に大量のクエリを実行したことにあるようだ。
※ちなみに約25,000のUPDATE文を一度に実行した。

今回はこの問題の解決法を紹介する。

my.cnfファイルで最大パケットサイズを変更する

設定ファイルを編集し、一度に大量の処理を実行できるよう最大パケットサイズを変更する必要がある。

まず、MySQLのconfファイル「my.cnf」を開こう。

vim /etc/my.cnf

ファイル内にmax_allowed_packetの項目があるので、ここの値を変更する。

初期値は1Mになっていたので、今回は20Mにしてみた。

[mysqld]
max_allowed_packet=20M

ファイルを保存して終了し、設定を反映させるためにサービスを再起動させる。

systemctl restart mariadb.service

この後、再度25,000行のクエリを実行すると今度はエラーが発生しなかった。