MySQL 5.6 リファレンスマニュアル  /  ...  /  プログラム変数の設定へのオプションの使用

4.2.8 プログラム変数の設定へのオプションの使用

多くの MySQL プログラムには内部変数があり、実行時に SET ステートメントを使用して設定できます。セクション13.7.4「SET 構文」およびセクション5.1.5「システム変数の使用」を参照してください。

これらのプログラム変数のほとんどは、プログラムオプションの指定に適用されるのと同じ構文を使用して、サーバーの起動時にも設定できます。たとえば、mysql には通信バッファーの最大サイズを制御する max_allowed_packet 変数があります。mysql に対して max_allowed_packet 変数を 16M バイトの値にセットするには、次のコマンドのいずれかを使用してください。

shell> mysql --max_allowed_packet=16777216
shell> mysql --max_allowed_packet=16M

最初のコマンドは値をバイトで指定します。2 番目は値を M バイトで指定します。数値を取る変数については、1024、10242 または 10243 の乗数を示すために、KM または G (大文字または小文字) のサフィクスで値を指定できます。(たとえば、max_allowed_packet を設定するために使用される場合、サフィクスは K バイト、M バイトまたは G バイトの単位を示します。)





お好みで、変数名内の下線をダッシュとして指定できます。次のオプショングループは同等です。どちらもサーバーのキーバッファーを 512M バイトに設定します。



変数は、すべて記述するか、またはあいまいでないプリフィクスとして指定できます。たとえば、max_allowed_packet 変数は mysql に対して --max_a として設定できますが、--max としては指定できません。後者はあいまいなためです。

shell> mysql --max=1000000
mysql: ambiguous option '--max=1000000' (max_allowed_packet, max_join_size)


値乗数を指定するサフィクスは、サーバーの起動時に変数を設定するときに使用できますが、実行時に SET で値を設定するためには使用できません。一方、SET を使用すると、式を使用して変数の値を割り当てることができますが、サーバーの起動時に変数を設定するときには使用できません。たとえば、サーバーの起動時に次の 1 行目は有効ですが 2 行目は無効です。

shell> mysql --max_allowed_packet=16M
shell> mysql --max_allowed_packet=16*1024*1024

逆に、実行時に次の 2 行目は有効ですが 1 行目は無効です。

mysql> SET GLOBAL max_allowed_packet=16M;
mysql> SET GLOBAL max_allowed_packet=16*1024*1024;

Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb
User Comments
  Posted by Devin Butts on November 7, 2008
To find out if your option variable syntax is correct, go into MySQL and try it, such as shown below.

mysql> show variables like 'max%' ;

| Variable_name | Value |
| max_allowed_packet | 1048576 |

mysql> set max_allowed_packet = 1500000;
Query OK, 0 rows affected (0.03 sec)

mysql> show variables like 'max%' ;
| Variable_name | Value |
| max_allowed_packet | 1499136 |

  Posted by Devin Butts on November 7, 2008
I had problems setting max_allowed_packet. My provider would not increase the value from 16M in the my.cnf file. I found the following work arounds... These may or may not work for you, but hope it gives some ideas about things to try... Replace the [] with the proper info...

To Backup the Database, shell command:
mysqldump --add-drop-table --extended-insert -O net_buffer_length=10M -O max_allowed_packet=1G -h [nameofserver] -u [username] -p[password] [nameofdatabase] | bzip2 -c > [outfilename].sql.bz2

To Restore the Database, shell command (if you used the command above, unzip the file first):
mysql -h [nameofserver] -u [username] -p[password] --max_allowed_packet=1073741824 [nameofdatabase] < [outfilename].sql

The max_allowed_packet had no effect on the restore above, but did work on the mysqldump. I had to use these commands and go into MySQL to get the restore completed:

mysql -h [nameofserver] -u [username] -p[password] [nameofdatabase]
set max_allowed_packet=1073741824;
\. [outfilename].sql

Depending on the file, even the above steps of manually setting the max_allowed_packet size didn’t work. I believe turning off –extended-insert above might help with large packet size problems. I finally ended up writing a program to divide up the big SQL output file into separate files for each table, which finally allowed me to get the file restored. Either way, it seems important to do a test backup and restore to ensure that the parameters used to create the backup file will create a file that can be restored.

Good luck!

Sign Up Login You must be logged in to post a comment.