DSN(数据源名称)规范
Percona Toolkit 的工具使用 DSN(Data Source Name)来指定如何创建到 MySQL 服务器的 DBD 连接。DSN 是一个以逗号分隔的 key=value 字符串,例如:
h=host1,P=3306,u=bob下面列出的是标准键,部分工具还会添加额外的键,详情见各工具的文档。
有些工具不使用 DSN,而是通过 --host、--user、--password 等选项连接 MySQL, 这类工具会在幕后用这些选项自动创建 DSN。
还有些工具同时使用 DSN 和上述选项:这些选项为所有未指定对应键的 DSN 提供默认值。 例如指定了 DSN h=host1 和选项 --port=12345,工具会自动为该 DSN 补上 P=12345。
值的转义
DSN 通常直接写在命令行上,因此需要考虑 shell 的引号与转义规则。 特殊字符(如 *)必须正确引用或转义,才能作为字面字符传入 DSN 值。
由于 DSN 各部分以逗号分隔,DSN 值中的字面逗号必须用反斜杠转义; 而反斜杠在大多数 shell 中又是转义字符,因此需要两个反斜杠才能传入一个字面反斜杠。 例如用户名是 my,name,在大多数 shell 中必须写成 my\\,name。 这一规则同样适用于 --user 等 DSN 相关选项。
键说明
许多工具会为特殊用途向 DSN 添加更多键,有时还会覆盖某些键的行为。 不过所有工具至少都支持以下键:
| 键 | 说明 |
|---|---|
A | 连接的默认字符集(SET NAMES)。启用 Perl 与 MySQL 的字符集设置:值为 utf8 时,将 Perl STDOUT 的 binmode 设为 utf8、向 DBD::mysql 传递 mysql_enable_utf8 选项,并在连接 MySQL 后执行 SET NAMES 'utf8';其他值设置不带 utf8 层的 binmode,并在连接后执行 SET NAMES。注意 SET NAMES 只影响服务器端;也可以用 F 键通过 defaults 文件指定客户端库的字符集。 |
D | 连接时使用的默认数据库。工具运行过程中可能会 USE 其他数据库。 |
F | MySQL 客户端库的 defaults 文件(即 DBD::mysql 使用的 C 客户端库,而非 Percona Toolkit 本身)。所有工具都会读取 defaults 文件中的 [client] 段。省略该键时按常规顺序读取标准 defaults 文件(因系统而异,Debian 上通常先是 /etc/mysql/my.cnf 再 ~/.my.cnf)。把 user/pass 写进 ~/.my.cnf 的 [client] 段后,就不必在命令行上指定 MySQL 用户名和密码。也可以在 defaults 文件中指定默认字符集——与 A 键不同,这会真正改变客户端库内部使用的字符集,是其他方式无法做到的。 |
h | 要连接的 MySQL 主机名或 IP 地址。 |
L | 显式启用 LOAD DATA LOCAL INFILE。某些厂商编译的 libmysql 未启用 local-infile,会导致"服务器允许但客户端抛异常"的情况;该键用于重新启用它。 |
p | 连接使用的 MySQL 密码。 |
P | 连接使用的端口号。注意常规的特殊情形:在 Unix 系统上主机名为 localhost 时,实际使用 socket 文件而非 TCP/IP 连接,端口会被忽略。 |
S | 连接使用的 MySQL socket 文件(Unix 系统)。 |
u | 连接使用的 MySQL 用户名(若非当前系统用户)。 |
s | 创建 SSL 连接。 |
BAREWORD(裸词)
许多工具允许把 DSN 写成不带任何 key=value 语法的一个单词,称为"bareword"。 具体如何处理因工具而异,但通常被解释为 h 部分。工具的 --help 输出会说明该工具的行为。
传播(PROPAGATION)
许多工具允许把值从一个 DSN 传播到后续 DSN,这样就不必为每个 DSN 都写全所有键。 例如为三个主机指定相同的用户名和密码:
h=host1,u=fred,p=wilma host2 host3该特性同样因工具而异。
更多细节请阅读 官方文档。