mysql open_files_limit值更改無效

    數據庫出現問題顯示too many files,導致數據庫無法訪問。出現這個問題,肯定是文件描述符打開過大了。查下數據庫的結果爲:

show variables like "%file%";
 open_files_limit                      | 1024

查看系統ulimit的值:

[root@localhost ~]# ulimit -n
65535

系統的值是正確的。然後修改/etc/my.cnf配置文件,添加

open_files_limit=65535

然後重啓mysql

systemctl restart mysql

再次查看mysql的值:

show variables like "%file%";
 open_files_limit                      | 1024

還是這樣,不生效。什麼問題。鬱悶了。經過不斷的嘗試,突然發現不使用系統自帶的命令重啓的話

[root@localhost system]# mysqld_safe --defaults-file=/etc/my.cnf &

這樣啓動的話,設置的值生效了。莫非腳本里面ulimit值不認爲是65535.

找了個辦法進行驗證操作。

因爲mysql啓動肯定會調用mysqld_safe腳本文件,就在這個文件裏面進行驗證。

759 echo `ulimit -n `>> /tmp/1.txt   #新加的調試內容
760 ulimit -n 65535                  #新加的調試內容
761 echo `ulimit -n `>> /tmp/1.txt   #新加的調試內容
762 
763 cmd="`mysqld_ld_preload_text`$NOHUP_NICENESS"
764 
765 for i in  "$ledir/$MYSQLD" "--basedir=$MY_BASEDIR_VERSION" \
766   "--datadir=$DATADIR" "--plugin-dir=$plugin_dir" "$USER_OPTION"

使用

[root@localhost ~]# tailf /tmp/1.txt

重啓mysql,觀看文件的數據變化.

1024
1024

盡然一直是1024,使用命令設置過也沒有生效。

這到底怎麼回事。

自己寫個簡單的測試腳本測試ulimit -n的值顯示的就是系統設定的,爲什麼在mysql的啓動裏面就無法調用系統的呢。

經過查找資料。有說如果是守護進程啓動的shell的話用ulimit -n設置的話就不會生效。也不知道對不對。我就暫且認爲這個mysql的啓動是一個守護進程調用的這個腳本文件。那我該怎麼辦呢。

無意中看到了redis的啓動文件的設定。

[root@mysql redis.service.d]# cat /etc/systemd/system/redis.service.d/limit.conf 
# If you need to change max open file limit
# for example, when you change maxclient in configuration
# you can change the LimitNOFILE value below
# see "man systemd.exec" for information
[Service]
LimitNOFILE=10240

這個就是設定limit_files數的,就依葫蘆畫瓢,在mysql啓動配置文件加入了。

[root@localhost system]# cat -n /etc/systemd/system/mysql.service
    26[Service]
    27User=mysql
    28Group=mysql
    29# Execute pre and post scripts as root
    30
    31LimitNOFILE=65535   #新加入的內容

然後繼續

[root@localhost ~]# tailf /tmp/1.txt

重啓mysql,觀看文件變化

65535
65535

盡然生效了。進入msyql,查詢結果:

mysql> show variables like "%file%";
| open_files_limit                      | 65535

成功生效。

說明這個參數起了作用,在腳本的的ulimit -n設定其實是沒有用處的。


總結:個人感覺系統自帶的啓動程序的方式確實方便,但是會讓用戶不知道真正調用的啓動文件的工作方式。遇到問題的話最好就是找源碼啓動文件進行調試,會找到很多自己意想不到的東西。還有官方寫的shell腳本看着真他媽的複雜。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章