如何激活命名时区

问题描述

我想使用azure cli自动MysqL服务器的安装和配置。

使用azure MysqL server create可以很好地进行安装,但是由于以下错误,使用azure MysqL server configuration set -n time_zone --value Europe/Paris进行的配置失败:

Deployment Failed. Correlation ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. The value 'Europe/Paris' for configuration 'time_zone' is not valid. The allowed values are '[+|-][0]{0,1}[0-9]:[0-5][0-9]|[+|-][1][0-2]:[0-5][0-9]|SYstem'.

正如我在mysql docs中所读到的,我可以启用执行以下sql SET GLOBAL time_zone = timezone;的命名时区,但是不幸的是,我的用户需要超级特权才能成功执行,这就是impossible in azure
另一种方法是运行MysqL_tzinfo_to_sql,但这在使用Azure Cli时不可用。

还有其他方法可以激活命名时区吗?

解决方法

来自the Azure DB for MySQL documentation

填充时区表
可以通过从MySQL命令行或MySQL Workbench之类的工具调用mysql.az_load_timezone存储过程来填充服务器上的时区表。

CALL mysql.az_load_timezone();

此外,在this doc中(您在问题中链接到):

在初始部署时,Azure for MySQL服务器包括用于时区信息的系统表,但未填充这些表。可以通过从MySQL命令行或MySQL Workbench之类的工具调用mysql.az_load_timezone存储过程来填充时区表。

,

根据错误消息,格式应为以下三种格式之一:

[+ |-] [0] {0,1} [0-9]:[0-5] [0-9]

例如-04:30

[+ |-] [1] [0-2]:[0-5] [0-9]

例如-12:00

系统

那么您是否尝试过使用引号呢?

azure mysql服务器配置集-n time_zone --value “欧洲/巴黎”

,
cls 
$TableName = "TestTable"
$DBServer = "TesServer"
$DBName = "TestDB"


$AgentNames = Invoke-Sqlcmd -Query "SELECT top 2 [Name] FROM $DbName.dbo.$TableName where name like 'rep%' " -ServerInstance $DBServer

Foreach ($AgentName in $AgentNames) {
    $Name = $AgentName.Name

    $SQLCommand = " use $DBName
    UPDATE AgentBehaviorTestArea
       SET BehaviorXML = ( SELECT   LEFT(BehaviorXML,CHARINDEX('<pairs>',BehaviorXML) +7) 
            +     '<p>
          <Name>AllowPeerDownload</Name>
          <Val>False</Val>
        </p>
        <p>
          <Name>AllowUserCancelScan</Name>
          <Val>false</Val>
        </p>'
            
            + SUBSTRING(BehaviorXML,CHARINDEX('</pairs',BehaviorXML),LEN(BehaviorXML))

            FROM    AgentBehaviorTestArea
            WHERE name = '$Name')
            WHERE name = '$Name'
    "
Invoke-Sqlcmd -Query $SQLCommand -ServerInstance $DBServer 
}


从您在服务器上的会话中调用此存储过程, 如果您从 MySQL Workbench 运行 CALL mysql.az_load_timezone(); 命令,您可能需要先使用 mysql.az_load_timezone 或在 Preferences->SQL Editor->Safe Updates() 中关闭安全更新模式,然后返回以连接到你的mysql服务器。