CentOS - Percona MySQL - 不读取 /etc/my.cnf

CentOS - Percona MySQL - 不读取 /etc/my.cnf

我已经在 CentOS 6.1 服务器上编译了 Percona 5.5,并且它启动正常,但它似乎没有读取我的 /etc/my.cnf 文件。

# In /etc/my.cnf
character_set_server = utf8
collation_server     = utf8_general_ci

mysql> show variables like 'character_set_server';
+----------------------+--------+
| Variable_name        | Value  |
+----------------------+--------+
| character_set_server | latin1 |
+----------------------+--------+
1 row in set (0.00 sec)

在这里,我希望看到的是“utf8”的值,而不是latin1。

目前,设置为符号链接的 /etc/my.cnf 指向当前处于版本控制中的 my.cnf 文件,因此它看起来像:

root@host ~/MyFile/Setup # -> ls /etc/my.cnf
lrwxrwxrwx. 1 root root 64 Dec 17 19:05 /etc/my.cnf -> /home/src/config/current/sys/etc/mysql/prod/confs-enabled/my.cnf

经过初步的谷歌搜索,似乎我需要使用 , 标志专门设置 my.cnf 文件的路径--defaults-file=/etc/my.cnf。目前尚未通过 CentOS 守护程序脚本进行设置:

ps auxfw > tmp.txt
vi tmp.txt
root     11798  0.0  0.1 106044  1488 pts/0    S    19:09   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/host.localdomain.pid
mysql    11875  0.1  4.3 499560 43936 pts/0    Sl   19:09   0:00  \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/host.localdomain.err --pid-file=/var/lib/mysql/host.localdomain.pid

所以我的问题是,如何添加将--defaults-file=/etc/my.cnf标志传递给 /etc/init.d/mysql 守护程序脚本的功能?

谢谢。

--更新--

问题似乎是因为我将 selinux 策略设置为强制执行,并尝试符号链接 my.cnf。请考虑以下内容:

lrwxrwxrwx. 1 root root 72 Feb  7 05:02 my.cnf -> /home/src/config/current/sys/etc/mysql/prod/confs-available/my-large.cnf

/home/src 权限如下:

drwxrwxr-x. src  src  unconfined_u:object_r:user_home_t:s0 config

如果我将完全相同的文件复制到 /etc,它就可以正常工作,如果我禁用 selinux,它也可以正常工作。因此,这与 mysql 尝试访问 /home/src 有关。

另外,我做了一个 audit2why,它的回复是:

Feb  8 17:32:20 app-mldrinks-aa-1 kernel: type=1400 audit(1328722340.203:17): avc:  denied  { read } for  pid=2109 comm="mysqld" name="xvda" dev=devtmpfs ino=5801 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:fixed_disk_device_t:s0 tclass=blk_file

Was caused by:
    Missing type enforcement (TE) allow rule.

    You can use audit2allow to generate a loadable module to allow this access.

有没有办法让它工作而不必创建自定义 selinux 模块?我无法将上下文类型更改为,/home/src/config/current因为mysqld_db_t每次我推送配置更改时,都会创建一个新目录user_home_t,其中包含最新的更改。

答案1

也许你可以用另一种方式来解决这个问题——尝试找出 percona 试图读取哪个 my.cnf。

mysqld --help --verbose | head -n 30寻找类似

Default options are read from the following files in the given order:
/etc/mysql/my.cnf ~/.my.cnf

答案2

我最终只是将 my.cnf 从版本控制路径复制到 /etc/my.cnf,一切正常。我会继续这样做,直到我可以抽出更多时间并配置 selinux 以允许 mysqld 访问 /home/src/config。

相关内容