问题描述
我想使用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服务器。