Azure Database for MySQL (フレキシブルサーバー)でmax_allowed_packetを設定する

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の模様。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。