Answers:
如果您使用的是Linux,请使用来启动“ mysqld” strace
,例如 strace ./mysqld
。
在所有其他系统调用中,您将发现类似以下内容:
stat64("/etc/my.cnf", 0xbfa3d7fc) = -1 ENOENT (No such file or directory)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4227, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3
因此,如您所见,.it列出了它尝试使用并最终使用的.cnf文件。
ps auxf
并找到针对MySQL执行的命令。通常,它看起来像这样的东西mysqld --basedir=/usr/local/mysql ...
(请注意...只是意味着命令中可能会有更多标志,但我不会列出所有标志)找到后,复制整个内容,然后关闭MySQL。如果您使用的是Linux,则为/etc/init.d/mysqld stop
或mysqladmin -u root -p shutdown
。然后strace
使用复制的mysql命令运行。所以它看起来像这样:strace mysqld --basedir=/usr/local/mysql
open(...
电话。相反,我有4行以结尾 = -1 Err#2
。您现在如何知道加载了哪个文件?
sudo dtruss mysqld 2>&1|grep my.cnf
@mgPePe,该输出可能意味着未找到任何文件,因此未打开任何文件。
摘自奇妙的“高性能MySQL” O'Reilly的书:
$ which mysqld
/usr/sbin/mysqld
$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf
!includedir
。我试图弄清楚为什么文件中的!includedir
指令/etc/mysql/my.cnf
不起作用。
mysqld
使用完整路径进行呼叫?!
如果运行mysql --verbose --help | less
,它将告诉您有关第11行的.cnf
文件。
您也可以mysql --print-defaults
向您展示它将如何使用配置值。这对于确定正在加载哪个配置文件也很有用。
mysqld
而不是mysql
mysqld --print-defaults
,它为我提供了我在搜索此问题时想要的确切信息。
我在Windows上,并且已经安装了最新版本的MySQL Community 5.6
我要查看配置文件使用的是转到管理工具>服务> MySQL56>右键单击>属性,然后检查可执行文件的路径:
“ C:/ Program Files / MySQL / MySQL Server 5.6 / bin \ mysqld” --defaults-file =“ C:\ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini” MySQL56
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
默认情况下处于启用状态。
mysqld --help --verbose很危险。您可以轻松覆盖运行实例的pidfile!与--pid-file = XYZ一起使用
哦,如果您有多个实例在运行,您将无法真正使用它。它只会显示默认值。
关于它的非常好的文章:
刚刚对ubuntu进行了快速测试:
安装了mysql-server,它创建了/etc/mysql/my.cnf
mysqld-详细-帮助| grep -A 1“默认选项”
110112 13:35:26 [注意]插件“ FEDERATED”已禁用。
从给定的顺序从以下文件中读取默认选项:/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf〜/ .my.cnf
创建了/etc/my.cnf和/usr/etc/my.cnf,每个都有不同的端口号
重新启动mysql-它使用的是/usr/etc/my.cnf中设置的端口号
同时,还找到了mysqld的--defaults-file选项。如果在此指定配置文件,则无论/ usr / sbin / mysqld返回的内容如何,都将仅使用该配置文件。grep -A 1“默认选项”