0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【phpmyadmin】「#1153 - 'max_allowed_packet'よりも大きなパケットを受信しました。」エラーが出た場合の対処法

Posted at

概要

  • phpmyadminでDUMPファイルをインポートしたら、パケットサイズの超過エラーが表示されました。今回はそのエラー解決方法を記します。

エラー内容

  • Dockerでphpmyadminを使ってデータベースにDUMPファイル(.sql.zipとなっているもの)をインポートしたら、以下のエラーが表示されました。
#1153 - 'max_allowed_packet'よりも大きなパケットを受信しました。
  • このエラーは、MySQLサーバーが受信したパケットのサイズが、許可されている最大パケットサイズ(max_allowed_packet)を超えていることを示しています。
  • 解決するためには、パケットの最大容量の変える必要があるので、max_allowed_packet設定値を変更します。
  • 変更はmy.cnfファイルで行います。

補足: 最大パケットサイズとは

  • ネットワークを介して転送されるデータパケット(データ通信を行う際に分割されたデータの塊)の最大サイズのこと。
    • パケット:データを転送する際に分割される「荷物」のようなもの
  • MySQLの場合、クライアントがサーバーに送信するSQL文や、サーバーがクライアントに送信する結果セットなどがデータパケットとして転送されます。
  • MySQLは、デフォルトでmax_allowed_packet16MBに設定しています。

この変数のデフォルト値が小さいのは、クライアントとサーバーの間の不正なパケットを捕捉するための予防措置であり、誤って大きなパケットが使用されてメモリー不足にならないようにするためでもあります。
引用元: B.3.2.8 パケットが大きすぎます

  • ただし、max_allowed_packetをあまりに大きな値に設定すると、MySQLのパフォーマンスに悪影響を与える可能性があるので、ネットワークの帯域幅などを踏まえて適切に設定してください。

解決方法は、設定ファイルのマウントorボリュームの永続化

  • Dockerコンテナを使って起動している場合、コンテナの中に入ってmy.cnfファイルを編集したところで、コンテナを一度閉じてしまうと、ファイルシステムが保存されず消えてしまいます。そうしないためには二つの方法があります。
    • データボリュームを永続化したり、バインドマウントを使用したりして、消えないようにする
    • コンテナ起動時に任意のmy.cnfファイルを適用するようにする
  • 今回は、2番目の方法をとることにしました。

実施手順

my.cnfファイルで最大パケットサイズを変更する
docker-compose.ymlの設定を変更する

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

  • my.cnfファイルに以下のように追記します。この場合だと、MAXが512MBになります。
my.cnf
[mysqld]
max_allowed_packet=512M
  • 設定ファイルは、通常/etc/mysqlにあるmy.cnfファイルだと思いますが、以下のようにMySQLサーバーの設定ファイルを複数のファイルに分割して管理することができます。
$ cd /etc/mysql
$ cat my.cnf

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
  • !includedirディレクティブは、MySQLサーバーが起動する際に読み込む追加の設定ファイルを指定するためのものです。
  • それぞれ以下のように使われる場合があります。
    • /etc/mysql/conf.d/ディレクトリに格納されたファイル: データベースの設定に関するオプション
    • /etc/mysql/mysql.conf.d/ディレクトリに格納されたファイル: MySQLサーバー自体の設定に関するオプション
  • mysqld.cnf [mysqld]のことがまとめて記載されていたので、今回はそちらに追記しました。
mysqld.cnf
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
max_allowed_packet=512M

docker-compose.ymlの設定を変更する

  • docker-compose.ymlファイルに以下を追記します。
version: "3"
services:
  mysql:
    image: mysql:latest
    volumes:
      - ./mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
  • これにより、ローカルマシン上のmysqld.cnfファイルを、MySQLコンテナ内の/etc/mysql/mysql.conf.d/mysqld.cnfにマウントしています。つまり、コンテナ起動時にMySQLサーバーがmysqld.cnfファイルを読み込む際に、ローカルマシン上のmysqld.cnfファイルの内容が適用されるようになりました。
  • コンテナを再起動後、phpmyadminへインポートするとエラーが消えました。無事に最大パケットサイズが変更されたことが確認できました。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?