【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

phpMyAdmin で 504 Gateway Time-out が出たときの対処法

phpMyAdminからSQLをインポートしようとする際、504 タイムアウトのエラーが出ることがあります。
今回は、その様な場合に何とかphpMyAdminからインポートができる様にしたい人の為の対処法です。

対処法1. ファイルサイズの問題

/etc/php.iniで下記3項目を編集します。

  1. アップロードできるファイルのサイズの最大値
    upload_max_filesize = 512M
  2.  POSTすることのできるデータの最大値
    post_max_size = 512M
  3. スクリプトが確保できるメモリの最大値
    memory_limit = 512M

この時、上記の値が以下の関係であることに注意してください。
upload_max_filesize ≦ post_max_size ≦ memory_limit

php.ini の設定反映は、Webのミドルウェアによって反映方法が違うので注意!

  • Apache:再起動すると反映
  • nginx:php-fpm の設定の再読み込みすると反映
1
$ /etc/init.d/php-fpm reload

反映されているかの確認方法

phpMyAdmin のインポートのファイル選択に下記のような記載がされていたらOKです!

(最長: 512MiB)

84cff65af46ba186825421a13f8cf07c

対処法2. 時間の問題

タイムアウトまでの時間を延ばす対処方法です。

php.ini に max_execution_time という項目があります。この値を変更しましょう。

max_execution_timeは、スクリプトがパーサ(※)に強制終了されるまでの時間を設定しています。
長々としたスクリプトがサーバーへ負荷を与えることを防ぐための設定です。
単位は秒で、0に設定すると制限時間なしになります。
(※パーサ: スクリプトの構文を解析してプログラムが扱うことのできるデータ構造の集合体へ変換するプログラム)

参考:
http://php.net/manual/ja/info.configuration.php#ini.max-execution-time
http://e-words.jp/w/%E3%83%91%E3%83%BC%E3%82%B5.html

設定例

※max_execution_timeだけでなく、その他の設定もした方がなお良いと思います。

  • php.ini
    max_execution_time = 300
  • php-fpm.conf
    request_terminate_timeout 300
  • nginx.conf
    fastcgi_read_timeout 300

request_terminate_timeout は単一のリクエストを処理する際のタイムアウトの設定です。この時間を過ぎるとワーカープロセスが kill されます。 このオプションは、'max_execution_time' ini オプションが何らかの理由でスクリプトの実行を止められなかった場合に使われます。 値 '0' は 'Off' を意味します。使用可能な単位: s(秒)(デフォルト), m(分), h(時間) あるいは d(日)、 デフォルト値: 0

参考:
http://php.net/manual/ja/install.fpm.configuration.php#request-terminate-timeout

fastcgi_read_timeout は FastCGIの応答の読み取りタイムアウトを設定します。 それは、nginxへの要求に対して応答を取得するためにどれくらい待つかを決定します。 60(秒)がデフォルト値です。

参考:
http://server-setting.info/centos/nginx-fastcgi-cache.html

設定の反映

Apacheの場合は再起動して設定の反映をさせます。

1
$ service httpd restart

nginxの場合、設定反映は設定の再読み込みコマンドで反映します。

1
2
$ service php-fpm reload
$ service nginx reload

ちなみに

この設定をした上で下記エラーが出た際はphpMyAdmin の設定を見直してください。

1
Maximum execution time of 300 seconds exceeded in ...

phpMyAdmin の設定ファイル(/path/to/phpmyadmin/libraries/config.default.php)の下記の値を変更します。

1
2
3
4
5
6
/**
 * maximum execution time in seconds (0 for no limit)
 *
 * @global integer $cfg['ExecTimeLimit']
 */
$cfg['ExecTimeLimit'] = 300;

単位は秒で、0で無制限です。

また、max_execution_time はphpスクリプトの処理時間のみであり、DBアクセスしたときの応答が返るまでの待ち時間は含みません。
回線の速度によるタイムアウトなら、mysql.connect_timeoutを延ばしましょう。

mysql.connect_timeout
接続の有効時間(単位:秒)。Linux では、この有効時間はサーバーからの 最初の応答の待ち時間としても使用されます。

番外

設定を変更せずに、データの変更方法を変えることで可能になる場合です。

データの削除処理は重いらしいので、
大量データを削除する場合は truncate で全削除して、後から必要なデータだけを入れ直した方が早いみたいです。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
2
読み込み中...
2 票, 平均: 1.00 / 12
16,098
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author