MySQL 连接器/NET 开发人员指南  / 第 4 章连接器/NET 连接  /  4.1 创建连接器/NET 连接字符串

4.1 创建连接器/NET 连接字符串

MySqlConnection对象是使用连接字符串配置的。连接字符串包含多个键值对,以分号分隔。在每个键值对中,选项名称及其对应的值由等号连接。有关要在连接字符串中使用的选项名称列表,请参阅 第 4.5 节,“Connector/NET 8.0 连接选项参考”

以下是示例连接字符串:

"server=127.0.0.1;uid=root;pwd=12345;database=test"

在此示例中,MySqlConnection对象配置为连接到位于 的 MySQL 服务器 127.0.0.1,用户名为 , root密码为 12345。所有语句的默认数据库都是test数据库。

Connector/NET 支持多种连接模型:

打开与单个服务器的连接

创建连接字符串后,它可用于打开与 MySQL 服务器的连接。

以下代码用于创建 MySqlConnection对象、分配连接字符串并打开连接。

MySQL Connector/NET 还可以使用本机 Windows 身份验证插件进行连接。有关详细信息,请参见第 4.4 节“连接器/NET 身份验证”

您可以通过编写自己的身份验证插件来进一步扩展身份验证机制。有关详细信息,请参见 第 5.8 节 “编写自定义身份验证插件”

C# 示例

MySql.Data.MySqlClient.MySqlConnection conn;
string myConnectionString;

myConnectionString = "server=127.0.0.1;uid=root;" +
    "pwd=12345;database=test";

try
{
    conn = new MySql.Data.MySqlClient.MySqlConnection();
    conn.ConnectionString = myConnectionString;
    conn.Open();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
    MessageBox.Show(ex.Message);
}

Visual Basic 示例

Dim conn As New MySql.Data.MySqlClient.MySqlConnection
Dim myConnectionString as String

myConnectionString = "server=127.0.0.1;" _
            & "uid=root;" _
            & "pwd=12345;" _
            & "database=test"

Try
  conn.ConnectionString = myConnectionString
  conn.Open()

Catch ex As MySql.Data.MySqlClient.MySqlException
  MessageBox.Show(ex.Message)
End Try

您还可以将连接字符串传递给MySqlConnection类的构造函数:

C# 示例

MySql.Data.MySqlClient.MySqlConnection conn;
string myConnectionString;

myConnectionString = "server=127.0.0.1;uid=root;" +
    "pwd=12345;database=test";

try
{
    conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
    conn.Open();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
    MessageBox.Show(ex.Message);
}

Visual Basic 示例

Dim myConnectionString as String

myConnectionString = "server=127.0.0.1;" _
              & "uid=root;" _
              & "pwd=12345;" _
              & "database=test"

Try
    Dim conn As New MySql.Data.MySqlClient.MySqlConnection(myConnectionString)
    conn.Open()
Catch ex As MySql.Data.MySqlClient.MySqlException
   MessageBox.Show(ex.Message)
End Try

连接打开后,其他连接器/NET 类可以使用它与 MySQL 服务器通信。

使用故障转移为多台主机打开连接

应用程序使用的数据可以存储在多个 MySQL 服务器上以提供高可用性。Connector/NET 提供了一种在连接字符串中指定多个主机的简单方法,适用于多个 MySQL 服务器配置为复制并且您不关心您的应用程序连接到集合中的精确服务器的情况。有关如何使用复制配置多个主机的示例,请参阅 使用复制和负载平衡

从 Connector/NET 8.0.19 开始,经典 MySQL 协议和 X 协议连接都允许 在连接字符串或 URI 方案中使用多个主机名和多个端点(一对)。例如: host:port

// classic protocol example
"server=10.10.10.10:3306,192.101.10.2:3305,localhost:3306;uid=test;password=xxxx"

// X Protocol example
mysqlx://test:test@[192.1.10.10:3305,127.0.0.1:3306]

更新后的故障转移方法首先按优先级顺序(如果提供)或随机顺序(如果未指定优先级)选择连接目标。如果尝试连接到所选目标不成功,Connector/NET 会从列表中选择一个新目标,直到没有更多主机可用为止。如果启用,Connector/NET 使用连接池来管理不成功的连接(请参阅 第 4.2 节,“在 Connector/NET 中管理连接池”)。

使用单个 DNS 域打开连接

当多个 MySQL 实例在您的安装中提供相同的服务时,您可以应用 DNS 服务 (SRV) 记录来提供故障转移、负载平衡和复制服务。DNS SRV 记录消除了客户端识别连接字符串中每个可能主机的需要,或者连接由附加软件组件处理的需要。当在配置中添加或删除服务器或更改主机名时,管理员也可以集中更新它们。DNS SRV 记录可以与连接池结合使用,在这种情况下,与不再在当前 SRV 记录列表中的主机的连接在空闲时从池中删除。有关 MySQL 中 DNS SRV 支持的信息, 使用 DNS SRV 记录连接到服务器

服务记录是由您的域名系统管理的数据规范,它定义了指定服务的服务器位置(主机名和端口号)。记录格式定义了 RFC 2782 规范中定义的服务的优先级、权重、端口和目标(请参阅 https://tools.ietf.org/html/rfc2782)。在以下具有四个服务器目标(对于_mysql._tcp.foo.abc.com.)的 SRV 记录示例中,Connector/NET 使用服务器选择顺序foo2foo1foo3foo4

Name                      TTL   Class   Priority Weight Port  Target
_mysql._tcp.foo.abc.com. 86400 IN SRV   0        5      3306  foo1.abc.com
_mysql._tcp.foo.abc.com. 86400 IN SRV   0        10     3306  foo2.abc.com
_mysql._tcp.foo.abc.com. 86400 IN SRV   10       5      3306  foo3.abc.com
_mysql._tcp.foo.abc.com. 86400 IN SRV   20       5      3306  foo4.abc.com

要使用 DNS SRV 记录打开连接,请将 dns-srv连接选项添加到您的连接字符串。例如:

C# 示例

var conn = new MySqlConnection("server=_mysql._tcp.foo.abc.com.;dns-srv=true;" +
             "user id=user;password=****;database=test");

有关经典 MySQL 协议和 X 协议的其他使用示例和限制,请参阅经典 MySQL 协议和 X 协议的 选项