MySqlConnection
对象使用连接字符串进行配置。连接字符串包含多个键值对,以分号分隔。在每个键值对中,选项名称及其对应值之间用等号连接。有关连接字符串中使用的选项名称列表,请参阅第 4.5 节 “Connector/NET 连接选项参考”。
以下是一个连接字符串示例
"server=127.0.0.1;uid=root;pwd=12345;database=test"
在本例中,MySqlConnection
对象配置为连接到位于 127.0.0.1
的 MySQL 服务器,用户名为 root
,密码为 12345
。所有语句的默认数据库将是 test
数据库。
Connector/NET 支持多种连接模型
创建连接字符串后,可以使用它打开与 MySQL 服务器的连接。
以下代码用于创建 MySqlConnection
对象、分配连接字符串并打开连接。
MySQL Connector/NET 还可以使用本机 Windows 身份验证插件进行连接。有关详细信息,请参阅第 4.4 节 “Connector/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
连接打开后,其他 Connector/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 中管理连接池”)。
当多个 MySQL 实例在您的安装中提供相同的服务时,您可以应用 DNS 服务 (SRV) 记录来提供故障转移、负载均衡和复制服务。DNS SRV 记录使客户端无需在连接字符串中标识每个可能的主机,也无需由其他软件组件处理连接。当服务器添加到配置中、从配置中删除或其主机名更改时,管理员也可以集中更新它们。DNS SRV 记录可以与连接池结合使用,在这种情况下,当连接到当前 SRV 记录列表中不再存在的主机的连接空闲时,将从池中删除这些连接。有关 MySQL 中 DNS SRV 支持的信息,请参阅使用 DNS SRV 记录连接到服务器。
服务记录是由您的域名系统管理的数据规范,它定义了指定服务的服务器位置(主机名和端口号)。记录格式定义了 RFC 2782 规范中定义的服务的优先级、权重、端口和目标(请参阅https://tools.ietf.org/html/rfc2782)。在以下具有四个服务器目标的 SRV 记录示例中(对于 _mysql._tcp.foo.abc.com.
),Connector/NET 使用服务器选择顺序 foo2
、foo1
、foo3
和 foo4
。
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 协议的选项。