mysqlで大きなファイルを保存するための設定

シェアする

mysql で画像ファイルなど大きなファイルをDBに保存するには、blob型を使います。

medium blob型を使えば、16MBまでのデータを保存することができますが、mysqlの設定でサイズの上限に引っかかってしまうとエラーになってしまいます。

この記事では、サイズ上限の変更方法を説明します。
※blob型への画像の保存方法は別記事とします。

mysqlで大きなファイルを扱うための設定変更方法

変更箇所は2箇所です。

  • ログファイルサイズ
  • 上限パケットサイズ

ログファイルサイズ変更手順

ログファイルと言っても、通常使われる人が確認するようのログファイルではないです。

mysql は テーブルスペースというファイルにデータを保存していますが、一つの大きなファイルなためアクセスに時間がかかるため、キャッシュ代わりにログファイルに一旦書き込んでいます。そのログファイルのサイズを変更します。

まず、サイズを確認してみましょう。

データのディレクトリを除いてみてください。
分からなければ、設定ファイル my.cnf に載っています。

 ディレクトリを覗いてみます。

下図の赤字が該当サイズです。以下ではすでに64MBになってますが、これが小さい場合、大きくしましょう。私はここのサイズが1MBぐらいだったです。

 ログファイルサイズが小さかった場合、以下の手順で変更します。

手順1. シャットダウン設定の変更

まず、ログファイルがテーブルスペース(ibdata1)に反映されていない状態では、ログファイルのサイズ変更をすることができません。

なので、mysqlサーバーを停止した時、テーブルスペースへログファイルの内容が反映されるようにします。

以下のようにmysql で設定を確認&必要に応じて再設定します。

下図で、innodb_fast_shutdown = 1 のとき、ログファイルがテーブルスペースへ反映されない設定になってますので、その場合、innodb_fast_shutdown = 0 に変更します。

手順2.データベースのバックアップ

これは念の為ですが、データベースのバックアップを行なっておきます。

手順3. サーバーを停止します

手順4.ログファイルを削除します

手順5.設定ファイルを編集します。

下図では、[mysqld]の項目に、

innodb_log_file_size=64M

の行を追加してます。

手順6. サーバーを起動します

以上でログファイルサイズが大きくなってるはずです。
最後にログファイルのサイズを確認しましょう。

上限パケットサイズの変更

サーバーとクライアントの間で転送できるデータサイズが、パケットサイズです。この上限を確認して、小さい場合は大きくしましょう。

確認方法は以下のとおりです。

上図の状態だと、1MBに設定されています。

変更手順

my.cnfの編集

変更は、my.cnf に設定しましょう。

16MBまでやり取りできるようにする場合、[mysqld]の中に
max_allowed_packet=16MB
の記述を入れます。

サーバーの再起動

確認してみますと、以下のようにちゃんとmax_allowed_packetが変更されています。

 以上で、1MB以上の画像データをデータベースにストアすることができるようになりました。

この記事が気に入ったら
いいね ! しよう