我们有一个由 2 个服务器组成的 Always On“集群”(还会有更多),所以一个是PRIMARY,其他是SECONDARY。这个想法是将 SECONDARY 用作只读副本,因此它在某种程度上是一个搜索服务器。
我知道如何在 C# 中设置 ConnectionString 所以它将使用 SECONDARY 副本 - 只需添加ApplicationIntent=ReadOnly
.
但是如果我使用分布式查询,我不明白如何从存储过程中解决 SECONDARY。有没有办法为查询设置一些参数(如 WITH 语句或其他东西),因此查询将仅使用副本而不使用 PRIMARY 节点?
问题是,很明显,从一开始server1是 PRIMARY,server2是 SECONDARY,但是当server1 出现故障时,server2是 PRIMARY,server1在修复后将是 SECONDARY。所以我不能只使用静态server2的名称。
到目前为止,我已经设法将当前副本的服务器名称作为变量并在 EXEC 中使用它:
-- find first available replica
DECLARE @replicaServer nvarchar(50)
SELECT TOP 1
@replicaServer = RCS.replica_server_name
FROM
sys.availability_groups_cluster AS AGC
INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS RCS
ON RCS.group_id = AGC.group_id
INNER JOIN sys.dm_hadr_availability_replica_states AS …
Run Code Online (Sandbox Code Playgroud) 我只想在我的 PC(使用 Windows 8.1 x64)上安装 MySQL 服务器,没有 Workbench 或其他东西。所以我.zip
从dev.mysql.com/downloads下载了存档。这是 x86_64 版本 5.7.9 (MySQL Community Server (GPL)) 上的 Win64 下载。
我将它安装为 Windows 服务,但没有mysql
数据库,只有information_schema
. 所以我执行了这个:
mysql_upgrade.exe --upgrade-system-tables
Run Code Online (Sandbox Code Playgroud)
并mysql
创建了数据库。但是随之而来的是root用户发生了一些事情,因为我无法再访问mysql
了。
所以我决定重置这个突然出现的密码(因为我之前没有它)。我在官方手册中建立了以下解决方案,我是这样启动服务器的:
mysqld.exe --skip-grant-tables --console
Run Code Online (Sandbox Code Playgroud)
然后我mysql
没有密码打开:
mysql.exe –u root
Run Code Online (Sandbox Code Playgroud)
然后尝试重置root密码:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere');
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误:
错误 1131 (42000):您以匿名用户身份使用 MySQL,不允许匿名用户更改密码”。
这是什么?我怎么匿名了?所有命令都在cmd.exe
管理员下执行。
在这种情况下,我应该怎么做才能重置 root 密码?
更新 1:我试图检查当前用户:
SELECT USER(), CURRENT_USER();
Run Code Online (Sandbox Code Playgroud)
这给出了:
+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+ …
Run Code Online (Sandbox Code Playgroud) 对于分布式查询,是否可以确定发送查询的服务器?
例如,我有统计数据:
SELECT DB_NAME(st.dbid), 文本, 请求时间, 查询计划, (requested_memory_kb / 1024), (granted_memory_kb / 1024), 查询成本 FROM sys.dm_exec_query_memory_grants AS mg 交叉应用 sys.dm_exec_sql_text(mg.sql_handle) AS st 交叉申请 sys.dm_exec_query_plan(mg.plan_handle) AS ph ORDER BY requests_memory_kb DESC
如何获取发送每个查询的服务器?我应该加入哪些表或应用哪些函数?
我刚刚发现,该master
数据库包含一些其他数据库的表和存储过程的重复项。
例如,我有一个SomeDB
包含表的数据库justTable
。出于某种原因,该表的副本master
也在其中,但没有数据。
这怎么可能?我敢肯定,在创建这些表和过程时,我使用的是相应的数据库,而不是master
. 它们都存在于这些数据库中(它们应该存在),只是还有一个副本master
。
我使用 Microsoft SQL Server Management Studio 2014 和 Redgate 添加(源代码控制和东西)。