Ubuntu

mysql my.cnf 被忽略

  • September 8, 2020

問題

我正在嘗試修改我的生產伺服器上的 my.cnf 值,但更改在之後沒有生效sudo service mysql restart,使用我的開發伺服器上的 my.cnf 的精確副本(下載並替換原始)所做的更改是可見的從 mysql 命令行中的顯示變數。

my.cnf 位於 /etc/mysql/my.cnf

sudo find / -name my.cnf
/etc/mysql/my.cnf

所以整個系統上只存在一個文件..

生產是 ubuntu 10.04 LTS 64bit

開發是 ubuntu 11.10 32bit

Mysql 版本分別為 5.1.61 和 5.1.62。

更新 2:

執行 mysql stop 和 mysql status 後返回 mysql stop/waiting,如果我執行top -b | grep mysql

27652 root      20   0  4096  424  420 S    0  0.0   0:00.01 mysqld_safe
27769 mysql     20   0  392m  57m 7236 S    0  1.5 119116,08 mysqld

這看起來它仍在執行,而且時間對我來說看起來不太好,但我現在擔心如果我殺死這些/這個過程,我將無法讓 mysql 再次執行,並且生產這很糟糕:S。

我意識到這可能不是可以回答的問題,而是殺死這些程序然後執行 service mysql start,這會讓 mysql 再次執行嗎?- 另外,上面的過程是否有正常的數字?

更新:

這是否意味著它從 my.cnf… 獲取設置但不使用它?所以現在很迷茫。

最後它得到了 innodb_buffer.. 設置。

mysqld --print-defaults
mysqld would have been started with the following arguments:
--user=mysql --socket=/var/run/mysqld/mysqld.sock --port=3306 --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp --skip-external-locking --bind-address=127.0.0.1 --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --log_error=/var/log/mysql/error.log --expire_logs_days=9 --max_binlog_size=100M --innodb_file_per_table=1 --innodb_buffer_pool_size=500M --innodb_buffer_pool_size=500M --user=mysql --socket=/var/run/mysqld/mysqld.sock --port=3306 --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp --skip-external-locking --bind-address=127.0.0.1 --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --log_error=/var/log/mysql/error.log --expire_logs_days=9 --max_binlog_size=100M --innodb_file_per_table=1 --innodb_buffer_pool_size=500M --innodb_buffer_pool_size=500M

我的.cnf

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking
bind-address        = 127.0.0.1
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8
myisam-recover         = BACKUP
query_cache_limit   = 1M
query_cache_size        = 16M
log_error                = /var/log/mysql/error.log
expire_logs_days    = 10
max_binlog_size         = 100M
innodb_file_per_table = 1

[mysqldump]
quick
quote-names
max_allowed_packet  = 16M

[mysql]

[isamchk]
key_buffer      = 16M

!includedir /etc/mysql/conf.d/

有什麼有趣的/etc/mysql/conf.d/嗎?您正在使用的 Mysql 版本應該my.cnf按照/etc/mysql/conf.d/配置文件名的順序進行解析。在以前的版本中,順序可能有些不確定。

鏈中最後設置的任何值都應該獲勝,這可能解釋了為什麼您的更改my.cnf沒有更新伺服器;如果以後的文件覆蓋了您的設置。

如果它沒有任何內容,/etc/mysql/conf.d/請創建一個名為innodb.cnf(不會解析任何不以 結尾的內容.cnf)的文件,僅包含這兩行,並查看您的 innodb 設置是否在重新啟動後更新。

[mysqld]
innodb_buffer_pool_size = 500M

來自文件的資訊:

username$ mysqld --verbose --help | grep '/my.cnf' -B 1

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

詳細資訊在 MySQL Docs中查看Table 4.2

可以!include在選項文件中使用指令來包含其他選項文件並!includedir在特定目錄中搜尋選項文件…..

MySQL 不保證目錄中選項文件的讀取順序

在 Unix 作業系統上使用 !includedir 指令查找和包含的任何文件都必須具有以 . 結尾的文件名.cnf。在 Windows 上,該指令檢查帶有.inior.cnf副檔名的文件。

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