Mysql

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

  • February 15, 2012

我已經在我的 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

在最初的Google搜尋中,似乎我需要使用--defaults-file=/etc/my.cnf, 標誌專門設置 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/currentmysqld_db_t因為每次推送配置更改時都會創建一個新目錄user_home_t,其中將包含最新更改。

我最終只是將 my.cnf 從版本控制路徑複製到 /etc/my.cnf,一切正常。在我有更多時間並配置 selinux 以允許 mysqld 訪問 /home/src/config 之前,我會繼續這樣做。

也許你可以用另一種方​​式來理解它——試著找出哪個 my.cnf 是 percona 試圖讀取的。

IE。mysqld --help --verbose | head -n 30並尋找類似的東西

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

引用自:https://serverfault.com/questions/341958