除此之外,客户机程序具有从选项文件中抽取信息的能力。这允许将连接参数放在-/. m y. c n f(也就是主目录中的. m y.cnf 文件)中,以便不用在命令行中指定它们。客户机库使检查MySQL 选项文件和从它们中抽取任何相关的值变得非常容易。只在程序中增加几行代码,就可以使选项文件识别它,并且通过编写自己的代码而不必重新改造这个框架来进行操作。附录E “MySQL 程序参考”中说明了选项文件的语法。
有可能会从不在命令行或~ /.my.cnf 文件中的s h o w _ a rgv 所产生的输出结果中看到一些选项。如果是这样,它们或许是在系统范围的选项文件中指定的。在主目录中读取. m y.cnf 之前,load_defaults() 实际上是在MySQL 数据目录中寻找/ e t c / m y.cnf 和m y.cnf 文件(在Windows中, load_defaults() 在Windows 系统目录中寻找文件C : my. c n f、C : \ m y s q l \ d a t a \ m y.cnf 和m y.ini )。
使用load_defaults() 的客户机程序几乎始终是在选项组列表中指定“ c l i e n t”(以便从选项文件中获取任何通用的客户机设置),但是也可以为请求自己的程序请求特定值。可将下列代码:
修改为:
然后将[ show _ argv] 组加到~ / . my.cnf 文件中:
有了这些改变,再次调用show _ argv 就得到了一个不同的结果,如下所示:
参数数组中选项值出现的顺序取决于它们在选项文件中列出的顺序,而不是选项组在group[] 数组中列出的顺序。这意味着将可能在选项文件的[client] 组之后指定程序专有的组。即如果在两个组中都指定了一个选项,程序专有的值将有更高的优先权。在这个例子中可以看到: 在组[client] 和[ show _ argv] 中都指定了host 选项,但是因为组[ show _ argv] 在选项文件的最后出现,所以host 值将在参数向量中出现并取得优先权。
load_defaults() 不是从环境设置中提取值, 如果想使用环境变量的值, 例如MYSQL _ TCP _ PORT 或者MYSQL _ UNIX _ PORT ,就必须使用getenv() 来自己管理。我不想把这个管理能力增加到客户机中,但这里有一个例子,介绍了如何检查几个标准的与M y S Q L有关的环境变量值: