Azure Database for MySQLで動いているDBに、とあるdumpをインポートしようとしたのですが、容量が大きすぎたため以下のエラーが出てしまいました。
The current max allowed package is 16777216 bytes but the statement length is 34825401.0 bytes.
そこで、TablePlusで接続していたのでそのままmax_allowed_packetを設定しようとしたのですが、ダメでした。(値は適当です)
set global max_allowed_packet=1000000000;
Query 1 ERROR at Line 1: : Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation
サーバー管理者でログインしていたのですができないようですね?
まぁ、MSクオリティなのでしょうがない(1回目)
次にAzure Portal画面からmax_allowed_packetを設定しようと思ったのですが、
サーバー パラメーターからではmax_allowed_packetは設定できないようですね?
そもそも設定できる項目が30件ほどしかないように見える。
まぁ、MSクオリティなのでしょうがない(2回目)
少し手間ですがCLIで設定していきます。
まずは、az mysql flexible-server parameter list で設定値を確認できます。
$ az mysql flexible-server parameter list \
--resource-group {リソースグループ名} \
--server-name {リソース名} \
--output table
—server-nameは、サーバー名(xxx.mysql.database.azure.com)ではない点に注意
まぁ、MSクオリティなのでしょうがない(3回目)
—server-nameの確認は、以下コマンドで出力されるnameになります。
$ az mysql flexible-server list \
--resource-group {リソースグループ名} \
--output table
元の値を確認したら、
az mysql flexible-server parameter set で値を設定し、
$ az mysql flexible-server parameter set \
--resource-group {リソースグループ名} \
--server-name {リソース名} \
--name max_allowed_packet \
--value 1000000000
Readonly attribute name will be ignored in class <class 'azure.mgmt.rdbms.mysql_flexibleservers.models._models_py3.Configuration'>
{
"allowedValues": "1024-1073741824",
"currentValue": "1000000000",
"dataType": "Integer",
"defaultValue": "16777216",
"description": "The maximum size of one packet or any generated/intermediate string, or any parameter sent by the mysql_stmt_send_long_data() C API function.",
"documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_allowed_packet",
"id": "/subscriptions/xxxxxxxx/resourceGroups/xxxxxx/providers/Microsoft.DBforMySQL/flexibleServers/xxxxxx/configurations/max_allowed_packet",
"isConfigPendingRestart": "False",
"isDynamicConfig": "True",
"isReadOnly": "False",
"name": "max_allowed_packet",
"resourceGroup": "xxxxxx",
"source": "user-override",
"systemData": null,
"type": "Microsoft.DBforMySQL/flexibleServers/configurations",
"value": "1000000000"
}
再起動をします。
$ az mysql flexible-server restart \
--resource-group {リソースグループ名} \
--name {リソース名}
az mysql flexible-server restart では、
—server-nameではなく、—nameな点に注意。
まぁ、MSクオリティなのでしょうがない(4回目)
これでdumpをインポートできる。っと思ったら今度は以下のエラーが出ました
Lost connection to MySQL server during query
次はwait_timeoutとinnodb_buffer_pool_sizeの設定が必要そう。
どちらもAzure Portal画面から設定できました。
ちなみに、wait_timeout最大値は31536000で、innodb_buffer_pool_sizeの最大値は1073741824の模様。