CentOS下MySql優化及安全設置
打開/etc/my.cnf文件,修改以下設置,如果沒有,可手動添加。調整設置時,請量力而行,這與你的服務器的配置有關,特別是內存大小。以下設置比較適合于1G內存的服務器,但并不絕對。
#指定索引緩沖區的大小,它決定索引處理的速度,尤其是索引讀的速度。通過檢查狀態值Key_read_requests和Key_reads,可以知道key_buffer_size設置是否合理。比例key_reads / key_read_requests應該盡可能的低,至少是1:100,1:1000更好(上述狀態值可以使用show status like 'key_reads'獲得)。key_buffer_size只對MyISAM表起作用。即使你不使用MyISAM表,但是內部的臨時磁盤表是MyISAM表,也要使用該值。可以使用檢查狀態值created_tmp_disk_tables得知詳情。
key_buffer = 384M
#要求MySQL能有的連接數量。當主要MySQL線程在一個很短時間內得到非常多的連接請求,這就起作用,然后主線程花些時間(盡管很短)檢查連接并且啟動一個新線程。back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。只有如果期望在一個短時間內有很多連接,你需要增加它,換句話說,這值對到來的TCP/IP連接的偵聽隊列的大小。你的操作系統在這個隊列大小上有它自己的限制。試圖設定back_log高于你的操作系統的限制將是無效的。默認數值是50
back_log = 200
#一個包的最大尺寸。消息緩沖區被初始化為net_buffer_length字節,但是可在需要時增加到max_allowed_packet個字節。缺省地,該值太小必能捕捉大的(可能錯誤)包。如果你正在使用大的BLOB列,你必須增加該值。它應該象你想要使用的最大BLOB的那么大。
max_allowed_packet = 4M
#允許的同時客戶的數量。增加該值增加 mysqld要求的文件描述符的數量。這個數字應該增加,否則,你將經常看到 Too many connections 錯誤。 默認數值是100
max_connections = 1024
#指定表高速緩存的大小。每當MySQL訪問一個表時,如果在表緩沖區中還有空間,該表就被打開并放入其中,這樣可以更快地訪問表內容。通過檢查峰值時間的狀態值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發現open_tables等于table_cache,并且opened_tables在不斷增長,那么你就需要增加table_cache的值了(上述狀態值可以使用show status like 'Open_tables'獲得)。注意,不能盲目地把table_cache設置成很大的值。如果設置得太高,可能會造成文件描述符不足,從而造成性能不穩定或者連接失敗。
table_cache = 512
#每個線程排序所需的緩沖
sort_buffer_size = 4M
#當一個查詢不斷地掃描某一個表,MySQL會為它分配一段內存緩沖區。read_buffer_size變量控制這一緩沖區的大小。如果你認為連續掃描進行得太慢,可以通過增加該變量值以及內存緩沖區大小提高其性能。
read_buffer_size = 4M
#加速排序操作后的讀數據,提高讀分類行的速度。如果正對遠遠大于可用內存的表執行GROUP BY或ORDER BY操作,應增加read_rnd_buffer_size的值以加速排序操作后面的行讀取。仍然不明白這個選項的用處……
read_rnd_buffer_size = 8M
#用于REPAIR TABLE。不明白這個選項的用處,百度上找到的設置方向也是五花八門,有128M、64M、32M等,折中選一個。
myisam_sort_buffer_size = 64M
#可以復用的保存在中的線程的數量。如果有,新的線程從緩存中取得,當斷開連接的時候如果有空間,客戶的線置在緩存中。如果有很多新的線程,為了提高性能可以這個變量值。通過比較 Connections 和 Threads_created 狀態的變量,可以看到這個變量的作用。
thread_cache_size = 128
#查詢結果緩存。第一次執行某條SELECT語句的時候,服務器記住該查詢的文本內容和它返回的結果。服務器下一次碰到這個語句的時候,它不會再次執行該語句。作為代替,它直接從查詢緩存中的得到結果并把結果返回給客戶端。
query_cache_size = 32M
#最大并發線程數,cpu數量*2
thread_concurrency = 2
#設置超時時間,能避免長連接
wait_timeout = 120
#關閉不需要的表類型,如果你需要,就不要加上這個
skip-innodb
skip-bdb
關于mysql的優化設置及檢查,這篇文章很值得一看 http://tech.itdb.cn/n/200607/27/n20060727_30398.shtml
-----------------------------------------------------------------------------------------------
Mysql的安全設置
打開/etc/my.cnf文件,修改以下設置,如果沒有,可手動添加。
#取消文件系統的外部鎖
skip-locking
#不進行域名反解析,注意由此帶來的權限/授權問題
skip-name-resolve
#禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。這個命令會利用MySQL把本地文件讀到數據庫中,然后用戶就可以非法獲取敏感信息了。網絡上流傳的一些攻擊方法中就有用它的,它也是很多新發現的SQL Injection攻擊利用的手段!
local-infile = 0
#關閉遠程連接,即3306端口。這是MySQL的默認監聽端口。由于此處MySQL只服務于本地腳本,所以不需要遠程連接。盡管MySQL內建的安全機制很嚴格,但監聽一個TCP端口仍然是危險的行為,因為如果MySQL程序本身有問題,那么未授權的訪問完全可以繞過MySQL的內建安全機制。(你必須確定,你是否真的不需要遠程連接mysql)
skip-networking
修改完my.cnf后,還需要對mysql的用戶名、帳號、及默認數據庫進行調整
首先先登錄mysql,在終端窗口輸入
/home/mysql/bin/mysql -u root -p
然后會提示輸入密碼,輸入正確密碼后,會出現mysql>提示符。
輸入以下命令:
mysql>use mysql;
mysql>update user set user="centos" where user="root"; (將mysql的root用戶名修改成centos,防止root的密碼被暴力破解)
mysql>select Host,User,Password,Select_priv,Grant_priv from user;
mysql>delete from user where user=''; (刪除user用戶)
mysql>delete from user where password=''; (刪除user用戶)
mysql>delete from user where host=''; (刪除user用戶)
mysql>drop database test; (刪除默認的test數據庫)
mysql>flush privileges; (刷新mysql的緩存,讓以上設置立即生效)
mysql>quit;
為了使以上優化和安全設置生效,請重啟Mysql服務或Linux。
關鍵字:CentOS、MySql、數據庫
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解