WordPressの移管など、他のデータベースのデータをphpMyAdminでエクスポートし、そのファイルをそのままインポートしようとすると「Incorrect format parameter」というエラーが発生することがある。
この原因と対処法について。
原因
エラーの発生原因は、インポートしようとしているsqlファイルのファイルサイズが上限を越えているため。
デフォルトの設定では、2MB(環境にもよる)とかなり小さめな設定になっている。数ページ程度のデータベースであれば問題ないが、ある程度の規模だと2MBは簡単に越えてしまう。
対処法
エラーを出さずにインポートする方法としては、エクスポート時に出力対象のテーブルの数を減らす。あるいは、インポートできるファイルサイズの上限を上げる方法がある。
ここでは後者について説明する。
phpMyAdminには、phpmyadmin-misc.iniというファイルがあり、このファイルにインポートできるファイルサイズの上限などが記述されている。
root@1c8bfe740570:/usr/local/etc/php/conf.d# ls -a | grep misc
phpmyadmin-misc.ini
root@1c8bfe740570:/usr/local/etc/php/conf.d# cat phpmyadmin-misc.ini
allow_url_fopen=Off
max_execution_time=${MAX_EXECUTION_TIME}
max_input_vars=10000
memory_limit=${MEMORY_LIMIT}
post_max_size=${UPLOAD_LIMIT}
upload_max_filesize=${UPLOAD_LIMIT}
この設定を変更することで、ファイルの上限サイズを変更することができる。
Docker上のphpMyAdminの場合
Docker上で起動しているphpMyAdminの場合は、ローカルにカスタムの設定を記述した、phpmyadmin-misc.ini ファイルを作成し、volumeにマウントする必要がある。
phpmyadmin-misc.iniの作成
phpmyadmin-misc.iniの作成例は以下。
allow_url_fopen = Off
max_execution_time = 300
max_input_vars=10000
memory_limit = 64M
post_max_size = 64M
upload_max_filesize = 64M
Volumeにマウントする
docker-compose.ymlファイルのphpMyAdminにvolumesを追記する。
以下のようなファイル構造の場合、docker-compose.ymlの記述例
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: phpmyadmin
#restart: always
depends_on:
- db
ports:
- 10099:80
volumes:
- ./phpmyadmin-misc.ini:/usr/local/etc/php/conf.d/phpmyadmin-misc.ini
volumesの書き方は「ホスト側:コンテナ側」となる。ホスト側はdocker-compose.ymlファイルがあるディレクトリを起点として、相対パスで記述する。
※現在のディレクトリを指定する場合は「./」が必須。
コンテナを再起動すれば設定が反映される。
> docker restart <コンテナ名>
最大ファイルサイズが64MBに変更になった。
XAMPPやMAMPの場合
XAMPPやMAMPなどWEBアプリの環境構築ソフト上にサーバーを展開している場合は、XAMPPやMAMPのpip.iniを変更する。
例えば、XAMPであれば、デフォルトの設定なら、「C:\xampp\php」の中に、php.iniが入っているので、エディタで開いて、該当する箇所を以下のように変更する。
allow_url_fopen = Off
max_execution_time = 300
max_input_vars=10000
memory_limit = 64M
post_max_size = 64M
upload_max_filesize = 64M
各項目の意味
allow_url_fopen=Offとは?
ファイルの開くときにURLのようにして開くかどうか。基本的にはOffで問題ない。
max_execution_timeとは?
処理の実行時間。この設定時間を越えた場合は、処理を強制的に終了する。
初期設定値は30(秒)。0にすると無限になり、最悪の場合無限ループに陥るので注意。
max_input_varsとは?
一度に処理するPOSTの数。デフォルトは10,000。このままで基本問題ない。
memory_limitとは?
処理で使用するメモリの上限値。デフォルトは128MB。上限値を超えるとFatal Error(致命的なエラー)となりプログラムが停止する。
設定の目安は、少なめは16M~32MB、多めは64M~128MB。
post_max_sizeとは?
POST データの上限サイズ。デフォルトは 8MB。
upload_max_filesizeとは?
アップロードできるファイルの上限サイズ。デフォルトは2MB。上限を変更する場合は、post_max_sizeも合わせて変更する必要がある(※post_max_size >= upload_max_filesizeとなること)。
phpmyadmin-misc.iniの補足
phpmyadmin-misc.iniの設定内容は、php.iniで使われる設定内容と同じ。phpMyAdminはPHPを使ったプログラム。その設定ファイル(.ini)になる。
ちなみにmiscとは、miscellaneous(ミサレリアス)の略で、雑多なという意味。このファイルで色々な設定をしてることを暗示している。
設定できる項目は他にもたくさんある。詳細は PHP公式 php.ini ディレクティブのリスト をご参照。