groupadd mysql 建立一個名為mysql的使用者組 useradd -g mysql mysql 在mysql使用者組下建立一個名為mysql的使用者 gunzip < mysql-VERSION.tar.gz | tar -xvf - 解壓下載到的.gz檔案 cd mysql-VERSION 進入解壓後的目錄 CFLAGS="-O3 -mcpu=pentium4" CXX=gcc CXXFLAGS="-O3 -march=pentium4 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/home/mysql/ --without-debug --with-unix-socket-path=/home/mysql/tmp/mysql.sock --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --with-extra-charsets=gbk,gb2312,utf8 --without-innodb --without-isam --with-pthread --enable-thread-safe-client 配置mysql gcc的相關參數:-O3 / -O -O1 最佳化.對於大函數,最佳化編譯佔用稍微多的時間和相當大的記憶體. 不使用`-O'選項時,編譯器的目標是減少編譯的開銷,使編譯結果能夠調試.語句是獨立的:如果在 兩條語句之間用斷點中止程式,你可以對任何變數重新賦值,或者在函數體內把程式計數器指到其他語句,以及從來源程式中 精確地擷取你期待的結果. 不使用`-O'選項時,只有聲明了register的變數才分配使用寄存器.編譯結果比不用 `-O'選項的PCC要略遜一籌. 使用了`-O'選項,編譯器會試圖減少目標碼的大小和執行時間. 如果指定了`-O'選項, `-fthread-jumps'和`-fdefer-pop'選項將被 開啟.在有delay slot的機器上, `-fdelayed-branch'選項將被開啟.在即使沒有幀指標 (frame pointer)也支援調試的機器上, `-fomit-frame-pointer'選項將被開啟.某些機器上 還可能會開啟其他選項. -O2 多最佳化一些.除了涉及空間和速度交換的最佳化選項,執行幾乎所有的最佳化工作.例如不進行迴圈展開(loop unrolling)和函數內嵌(inlining).和-O選項比較,這個選項既增加了編譯時間,也提高了產生代碼的 運行效果. -O3 最佳化的更多.除了開啟-O2所做的一切,它還開啟了-finline-functions選項. -O0 不最佳化. 如果指定了多個-O選項,不管帶不帶數字,最後一個選項才是生效的選項。 -mcpu=pentium4 /根據CPU類型最佳化編譯,可以讓你的mysq表現更好!可選項目很多:i386, i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium4, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp,athlon-mp,winchip-c6, winchip2 , c3. -fomit-frame-pointer /對於不需要棧指標的函數就不在寄存器中儲存指標,因此可以忽略儲存和檢索地址的代碼,並將寄存器用於普通用途。所有"-O"層級都開啟著一選項,但僅在調試器可以不依靠棧指標運行時才有效。建議不需要調試的情況下顯式的設定它。 configure的相關參數: --prefix=/home/mysql/ /指定安裝目錄 --without-debug /去除debug模式 --with-extra-charsets=gbk,gb2312,utf8 /添加gbk,gb2312,utf8中文字元支援 --with-pthread /強制使用pthread庫(posix線程庫) --enable-assembler /使用一些字元函數的彙編版本 --enable-thread-safe-client /以線程方式編譯用戶端 --with-client-ldflags=-all-static /以純靜態方式編譯用戶端 --with-mysqld-ldflags=-all-static/以純靜態方式編譯服務端 --without-isam /去掉isam表類型支援,現在很少用了,isam表是一種依賴平台的表 --without-innodb/去掉innodb表支援,innodb是一種支援交易處理的表,適合企業級應用 make 編譯 make install 安裝 cp support-files/my-medium.cnf /etc/my.cnf 將mysql的設定檔copy到/etc目錄下,並更名為my.cnf /home/mysql下面有5個my-xxxx.cnf檔案 my-small.cnf 最小配置安裝,記憶體<=64M,資料數量最少 my-large.cnf 記憶體=512M my-medium.cnf 32M<記憶體<64M,或者記憶體有128M,但是資料庫與web伺服器公用記憶體 my-huge.cnf 1G<記憶體<2G,伺服器主要運行mysql my-innodb-heavy-4G.cnf 最大配置安裝,記憶體至少4G cd /home/mysql 進入安裝目錄 bin/mysql_install_db --user=mysql 以mysql使用者的身份建立資料表 chown -R root . 將mysql的主目錄(即/home/mysql)的屬主設為root使用者。這是官方文檔上的命令,但奇怪的是,如果將mysql的主目錄屬主設成root使用者,在運行了下面的bin/mysqld_safe --user=mysql &後則不能啟動mysql。問題出在“許可權”上,運行chown -R mysql .則可以用下面的命令正常啟動mysql。難道官方文檔有錯?希望大家一起來探討一下。 chown -R mysql var 將var目錄的屬主設為mysql使用者 chgrp -R mysql . 將mysql的主目錄的屬主設為mysql使用者組(注意:和前面的命令不一樣,這個命令是對使用者組進行賦權) bin/mysqld_safe --user=mysql & 啟動mysql,如果一切正常的話,運行此命令後,不會有任何提示。 bin/mysqladmin -u root password password 修改root使用者的密碼,這裡的root使用者指的是mysql的root使用者,與Linux的root使用者無關。綠色的password就是你需要設定的新密碼,牢記! bin/mysql -u root -p 如果正常的話,用這個名字可以登入,在輸入密碼後,出現mysql > 的提示符表明登入成功。用quit命令可退出 以下命令用於設定mysql開機自動運行 cd mysql-VERSION 再次進入解壓後的目錄,即源碼目錄。 cp support-files/mysql.server /etc/init.d/mysql 將mysql.server這個檔案copy到/etc/init.d/目錄下,並更名為mysql chmod 755 /etc/init.d/mysql 給/etc/init.d/mysql這個檔案賦予“執行”許可權 chkconfig --level 345 mysql on 加入到開機自動運行,運行層級為3 4 5 service mysql restart 重啟mysql服務 Q:為什麼我用PHP串連Mysql時提示“connect fail:Can't connect to local MySQL server through socket '/home/mysql/tmp/mysql.sock' (13)” A:這是因為PHP沒能正常的串連到Mysql通訊端,即mysql.sock檔案。首先,檢查/home/mysql/tmp/目錄下是否有mysql.sock這個檔案。如果沒有,可能是mysql沒有正常啟動;如果有,可能是/home/mysql/tmp/這個目錄的許可權不夠,用chmod 755 /home/mysql/tmp可解決此問題。
----------------------------------------------------------------------------------------------- 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。
|