


CentOS Linux下MySQL 5.1.x的安裝、優(yōu)化和安全配置
下載頁(yè)面:http://dev.mysql.com/downloads/mysql/5.1.html#downloads
到頁(yè)面底部,找到Source downloads,這個(gè)是源碼版本,下載第1個(gè)Tarball
groupadd mysql
新建一個(gè)名為mysql的用戶組
useradd -g mysql mysql
在mysql用戶組下新建一個(gè)名為mysql的用戶
gunzip < mysql-VERSION.tar.gz | tar -xvf -
解壓下載到的.gz文件
cd mysql-VERSION
進(jìn)入解壓后的目錄
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的相關(guān)參數(shù):
-O3
-O
-O1
優(yōu)化.對(duì)于大函數(shù),優(yōu)化編譯占用稍微多的時(shí)間和相當(dāng)大的內(nèi)存.
不使用`-O’選項(xiàng)時(shí),編譯器的目標(biāo)是減少編譯的開銷,使編譯結(jié)果能夠調(diào)試.語(yǔ)句是獨(dú)立的:如果在 兩條語(yǔ)句之間用斷點(diǎn)中止程序,你可以對(duì)任何變量重新賦值,或者在函數(shù)體內(nèi)把程序計(jì)數(shù)器指到其他語(yǔ)句,以及從源程序中 精確地獲取你期待的結(jié)果.
不使用`-O’選項(xiàng)時(shí),只有聲明了register的變量才分配使用寄存器.編譯結(jié)果比不用 `-O’選項(xiàng)的PCC要略遜一籌.
使用了`-O’選項(xiàng),編譯器會(huì)試圖減少目標(biāo)碼的大小和執(zhí)行時(shí)間.
如 果指定了`-O’選項(xiàng), `-fthread-jumps’和`-fdefer-pop’選項(xiàng)將被 打開.在有delay slot的機(jī)器上, `-fdelayed-branch’選項(xiàng)將被打開.在即使沒有幀指針 (frame pointer)也支持調(diào)試的機(jī)器上, `-fomit-frame-pointer’選項(xiàng)將被打開.某些機(jī)器上 還可能會(huì)打開其他選項(xiàng).
-O2
多優(yōu)化一些.除了涉及空間和速度交換的優(yōu)化選項(xiàng),執(zhí)行幾乎所有的優(yōu)化工作.例如不進(jìn)行循環(huán)展開(loop unrolling)和函數(shù)內(nèi)嵌(inlining).和-O選項(xiàng)比較,這個(gè)選項(xiàng)既增加了編譯時(shí)間,也提高了生成代碼的 運(yùn)行效果.
-O3
優(yōu)化的更多.除了打開-O2所做的一切,它還打開了-finline-functions選項(xiàng).
-O0
不優(yōu)化.
如果指定了多個(gè)-O選項(xiàng),不管帶不帶數(shù)字,最后一個(gè)選項(xiàng)才是生效的選項(xiàng)。
-mcpu=pentium4 根據(jù)CPU類型優(yōu)化編譯,可以讓你的mysq表現(xiàn)更好!可選項(xiàng)目很多: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 對(duì)于不需要棧指針的函數(shù)就不在寄存器中保存指針,因此可以忽略存儲(chǔ)和檢索地址的代碼,并將寄存器用于普通用途。所有”-O”級(jí)別都打開著一選項(xiàng),但僅在調(diào)試器可以不依靠棧指針運(yùn)行時(shí)才有效。建議不需要調(diào)試的情況下顯式的設(shè)置它。
configure的相關(guān)參數(shù):
–prefix=/home/mysql/ 指定安裝目錄
–without-debug 去除debug模式
–with-extra-charsets=gbk,gb2312,utf8 添加gbk,gb2312,utf8中文字符支持
–with-pthread 強(qiáng)制使用pthread庫(kù)(posix線程庫(kù))
–enable-assembler 使用一些字符函數(shù)的匯編版本
–enable-thread-safe-client 以線程方式編譯客戶端
–with-client-ldflags=-all-static 以純靜態(tài)方式編譯客戶端
–with-mysqld-ldflags=-all-static 以純靜態(tài)方式編譯服務(wù)端
–without-isam 去掉isam表類型支持,現(xiàn)在很少用了,isam表是一種依賴平臺(tái)的表
–without-innodb 去掉innodb表支持,innodb是一種支持事務(wù)處理的表,適合企業(yè)級(jí)應(yīng)用
make
編譯
make install
安裝
cp support-files/my-medium.cnf /etc/my.cnf
將mysql的配置文件copy到/etc目錄下,并更名為my.cnf
/home/mysql下面有5個(gè)my-xxxx.cnf文件
my-small.cnf 最小配置安裝,內(nèi)存<=64M,數(shù)據(jù)數(shù)量最少
my-large.cnf 內(nèi)存=512M
my-medium.cnf 32M<內(nèi)存<64M,或者內(nèi)存有128M,但是數(shù)據(jù)庫(kù)與web服務(wù)器公用內(nèi)存
my-huge.cnf 1G<內(nèi)存<2G,服務(wù)器主要運(yùn)行mysql
my-innodb-heavy-4G.cnf 最大配置安裝,內(nèi)存至少4G
cd /home/mysql
進(jìn)入安裝目錄
bin/mysql_install_db –user=mysql
以mysql用戶的身份建立數(shù)據(jù)表
chown -R root .
將mysql的主目錄(即/home/mysql)的屬主設(shè)為root用戶。這是官方文檔上的命令,但奇怪的是,如果將mysql的主目錄屬主設(shè)成root用戶,在運(yùn)行了下面的bin/mysqld_safe –user=mysql &后則不能啟動(dòng)mysql。問題出在“權(quán)限”上,運(yùn)行chown -R mysql .則可以用下面的命令正常啟動(dòng)mysql。難道官方文檔有錯(cuò)?希望大家一起來探討一下。
chown -R mysql var
將var目錄的屬主設(shè)為mysql用戶
chgrp -R mysql .
將mysql的主目錄的屬主設(shè)為mysql用戶組(注意:和前面的命令不一樣,這個(gè)命令是對(duì)用戶組進(jìn)行賦權(quán))
bin/mysqld_safe –user=mysql &
啟動(dòng)mysql,如果一切正常的話,運(yùn)行此命令后,不會(huì)有任何提示。
bin/mysqladmin -u root password password
修改root用戶的密碼,這里的root用戶指的是mysql的root用戶,與Linux的root用戶無關(guān)。綠色的password就是你需要設(shè)置的新密碼,牢記!
bin/mysql -u root -p
如果正常的話,用這個(gè)名字可以登錄,在輸入密碼后,出現(xiàn)mysql > 的提示符表明登錄成功。用quit命令可退出
以下命令用于設(shè)置mysql開機(jī)自動(dòng)運(yùn)行
cd mysql-VERSION
再次進(jìn)入解壓后的目錄,即源碼目錄。
cp support-files/mysql.server /etc/init.d/mysql
將mysql.server這個(gè)文件copy到/etc/init.d/目錄下,并更名為mysql
chmod 755 /etc/init.d/mysql
給/etc/init.d/mysql這個(gè)文件賦予“執(zhí)行”權(quán)限
chkconfig –level 345 mysql on
加入到開機(jī)自動(dòng)運(yùn)行,運(yùn)行級(jí)別為3 4 5
service mysql restart
重啟mysql服務(wù)
Q:為什么我用PHP連接Mysql時(shí)提示“connect fail:Can’t connect to local MySQL server through socket ‘/home/mysql/tmp/mysql.sock‘ (13)”
A: 這是因?yàn)镻HP沒能正常的連接到Mysql套接字,即mysql.sock文件。首先,檢查/home/mysql/tmp/目錄下是否有 mysql.sock這個(gè)文件。如果沒有,可能是mysql沒有正常啟動(dòng);如果有,可能是/home/mysql/tmp/這個(gè)目錄的權(quán)限不夠,用chmod 755 /home/mysql/tmp可解決此問題。
———————————————————————————————–
Mysql的優(yōu)化設(shè)置
打開/etc/my.cnf文件,修改以下設(shè)置,如果沒有,可手動(dòng)添加。調(diào)整設(shè)置時(shí),請(qǐng)量力而行,這與你的服務(wù)器的配置有關(guān),特別是內(nèi)存大小。以下設(shè)置比較適合于1G-4G內(nèi)存的服務(wù)器,但并不絕對(duì)。
# 指定索引緩沖區(qū)的大小,它決定索引處理的速度,尤其是索引讀的速度。通過檢查狀態(tài)值Key_read_requests和Key_reads,可以知道 key_buffer_size設(shè)置是否合理。比例key_reads / key_read_requests應(yīng)該盡可能的低,至少是1:100,1:1000更好(上述狀態(tài)值可以使用show status like ‘key_reads’獲得)。key_buffer_size只對(duì)MyISAM表起作用。即使你不使用MyISAM表,但是內(nèi)部的臨時(shí)磁盤表是 MyISAM表,也要使用該值?梢允褂脵z查狀態(tài)值created_tmp_disk_tables得知詳情。
key_buffer = 384M
# 要求MySQL能有的連接數(shù)量。當(dāng)主要MySQL線程在一個(gè)很短時(shí)間內(nèi)得到非常多的連接請(qǐng)求,這就起作用,然后主線程花些時(shí)間(盡管很短)檢查連接并且啟 動(dòng)一個(gè)新線程。back_log值指出在MySQL暫時(shí)停止回答新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中。只有如果期望在一個(gè)短時(shí)間內(nèi)有很多連 接,你需要增加它,換句話說,這值對(duì)到來的TCP/IP連接的偵聽隊(duì)列的大小。你的操作系統(tǒng)在這個(gè)隊(duì)列大小上有它自己的限制。試圖設(shè)定back_log高于你的操作系統(tǒng)的限制將是無效的。默認(rèn)數(shù)值是50
back_log = 200
# 一個(gè)包的最大尺寸。消息緩沖區(qū)被初始化為net_buffer_length字節(jié),但是可在需要時(shí)增加到max_allowed_packet個(gè)字節(jié)。缺 省地,該值太小必能捕捉大的(可能錯(cuò)誤)包。如果你正在使用大的BLOB列,你必須增加該值。它應(yīng)該象你想要使用的最大BLOB的那么大。
max_allowed_packet = 4M
#允許的同時(shí)客戶的數(shù)量。增加該值增加 mysqld要求的文件描述符的數(shù)量。這個(gè)數(shù)字應(yīng)該增加,否則,你將經(jīng)常看到 Too many connections 錯(cuò)誤。 默認(rèn)數(shù)值是100
max_connections = 1024
# 指定表高速緩存的大小。每當(dāng)MySQL訪問一個(gè)表時(shí),如果在表緩沖區(qū)中還有空間,該表就被打開并放入其中,這樣可以更快地訪問表內(nèi)容。通過檢查峰值時(shí)間的 狀態(tài)值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發(fā)現(xiàn)open_tables等于 table_cache,并且opened_tables在不斷增長(zhǎng),那么你就需要增加table_cache的值了(上述狀態(tài)值可以使用show status like ‘Open_tables’獲得)。注意,不能盲目地把table_cache設(shè)置成很大的值。如果設(shè)置得太高,可能會(huì)造成文件描述符不足,從而造成性能 不穩(wěn)定或者連接失敗。
table_cache = 512
#每個(gè)線程排序所需的緩沖
sort_buffer_size = 4M
#當(dāng)一個(gè)查詢不斷地掃描某一個(gè)表,MySQL會(huì)為它分配一段內(nèi)存緩沖區(qū)。read_buffer_size變量控制這一緩沖區(qū)的大小。如果你認(rèn)為連續(xù)掃描進(jìn)行得太慢,可以通過增加該變量值以及內(nèi)存緩沖區(qū)大小提高其性能。
read_buffer_size = 4M
#加速排序操作后的讀數(shù)據(jù),提高讀分類行的速度。如果正對(duì)遠(yuǎn)遠(yuǎn)大于可用內(nèi)存的表執(zhí)行GROUP BY或ORDER BY操作,應(yīng)增加read_rnd_buffer_size的值以加速排序操作后面的行讀取。仍然不明白這個(gè)選項(xiàng)的用處……
read_rnd_buffer_size = 8M
#用于REPAIR TABLE。不明白這個(gè)選項(xiàng)的用處,百度上找到的設(shè)置方向也是五花八門,有128M、64M、32M等,折中選一個(gè)。
myisam_sort_buffer_size = 64M
# 可以復(fù)用的保存在中的線程的數(shù)量。如果有,新的線程從緩存中取得,當(dāng)斷開連接的時(shí)候如果有空間,客戶的線置在緩存中。如果有很多新的線程,為了提高性能可 以這個(gè)變量值。通過比較 Connections 和 Threads_created 狀態(tài)的變量,可以看到這個(gè)變量的作用。
thread_cache_size = 128
#查詢結(jié)果緩存。第一次執(zhí)行某條SELECT語(yǔ)句的時(shí)候,服務(wù)器記住該查詢的文本內(nèi)容和它返回的結(jié)果。服務(wù)器下一次碰到這個(gè)語(yǔ)句的時(shí)候,它不會(huì)再次執(zhí)行該語(yǔ)句。作為代替,它直接從查詢緩存中的得到結(jié)果并把結(jié)果返回給客戶端。
query_cache_size = 32M
#最大并發(fā)線程數(shù),cpu數(shù)量*2
thread_concurrency = 2
#設(shè)置超時(shí)時(shí)間,能避免長(zhǎng)連接
wait_timeout = 120
#關(guān)閉不需要的表類型,如果你需要,就不要加上這個(gè)
skip-innodb
skip-bdb
———————————————————————————————–
Mysql的安全設(shè)置
打開/etc/my.cnf文件,修改以下設(shè)置,如果沒有,可手動(dòng)添加。
#取消文件系統(tǒng)的外部鎖
skip-locking
#不進(jìn)行域名反解析,注意由此帶來的權(quán)限/授權(quán)問題
skip-name-resolve
#禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。這個(gè)命令會(huì)利用MySQL把本地文件讀到數(shù)據(jù)庫(kù)中,然后用戶就可以非法獲取敏感信息了。網(wǎng)絡(luò)上流傳的一些攻擊方法中就有用它的,它也是很多新發(fā)現(xiàn)的SQL Injection攻擊利用的手段!
local-infile = 0
#關(guān)閉遠(yuǎn)程連接,即3306端口。這是MySQL的默認(rèn)監(jiān)聽端口。由于此處MySQL只服務(wù)于本地腳本,所以不需要遠(yuǎn)程連接。盡管MySQL內(nèi)建的安全機(jī)制很嚴(yán)格,但監(jiān)聽一個(gè)TCP端口仍然是危險(xiǎn)的行為,因?yàn)槿绻鸐ySQL程序本身有問題,那么未授權(quán)的訪問完全可以繞過MySQL的內(nèi)建安全機(jī)制。(你必須確定,你是否真的不需要遠(yuǎn)程連接mysql)
skip-networking
修改完my.cnf后,還需要對(duì)mysql的用戶名、帳號(hào)、及默認(rèn)數(shù)據(jù)庫(kù)進(jìn)行調(diào)整
首先先登錄mysql,在終端窗口輸入 /home/mysql/bin/mysql -u root -p
然后會(huì)提示輸入密碼,輸入正確密碼后,會(huì)出現(xiàn)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; (刪除默認(rèn)的test數(shù)據(jù)庫(kù))
mysql>flush privileges; (刷新mysql的緩存,讓以上設(shè)置立即生效)
mysql>quit;
為了使以上優(yōu)化和安全設(shè)置生效,請(qǐng)重啟Mysql服務(wù)或Linux。
———————————————————————————————–
phpMyAdmin 3.3.x的安裝與配置
phpMyAdmin是一個(gè)用PHP編寫的,可以通過互聯(lián)網(wǎng)控制和操作MySQL數(shù)據(jù)庫(kù)的軟件。通過phpMyAdmin可以完全對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,例如建立、復(fù)制/刪除數(shù)據(jù)等等。
下載地址: http://www.phpmyadmin.net
目前的最新版本是 3.3.7
使用phpMyAdmin的先決條件:Apache(或者是Nginx、IIS)、PHP、MySql必須已經(jīng)安裝好,并且能夠正常運(yùn)行。因?yàn)閜hpMyAdmin是用PHP程序編寫的,所以,你必須確定你的PHP可以正常連接到MySql。
下面開始安裝:
1、解壓下載到的文件,會(huì)得到一個(gè)目錄,如 phpMyAdmin-3.3.7-all-languages
tar jxvf phpMyAdmin-3.3.7-all-languages.tar.bz2
2、將這個(gè)目錄移動(dòng)到你的網(wǎng)站根目錄下
mv ./phpMyAdmin-3.3.7-all-languages /var/www/
3、為了安全起見,建議修改目錄名,這樣只有你自己知道phpMyAdmin的所在位置
mv /var/www/phpMyAdmin-3.3.7-all-languages-utf-8-only /var/www/MyphpAdmin
4、修改phpMyAdmin的配置文件
cd /var/www/MyphpAdmin
mv config.sample.inc.php config.inc.php
config.inc.php就是配置文件,需要將config.sample.inc.php更名過來,才能生效。
kate config.inc.php
以$cfg開頭的選項(xiàng)都是可以修改的,根據(jù)你的實(shí)際情況,參與下面的文檔來修改
$cfg['blowfish_secret'] = ‘http‘; /* cookie認(rèn)證的加密算法,隨便填一串字符即可 */
$cfg['Servers'][$i]['auth_type'] = ‘cookie‘; /* 登錄時(shí)的認(rèn)證方式。本機(jī)登錄的設(shè)置成config,網(wǎng)絡(luò)遠(yuǎn)程登錄的需要設(shè)置成cookie */
$cfg['Servers'][$i]['host'] = ‘localhost‘; /* 主機(jī)名,可在終端下輸入uname -n查看 */
$cfg['Servers'][$i]['connect_type'] = ‘socket‘; /* 使用tcp(Mysql在遠(yuǎn)程服務(wù)器上)或socket(Mysql在本機(jī))方式來連接 */
$cfg['Servers'][$i]['compress'] = true; /* 啟用壓縮以提高速度,如果訪問不正常請(qǐng)改回false(php的版本必須高于4.3.0) */
$cfg['Servers'][$i]['extension'] = ‘mysql‘; /* 設(shè)定phpMyAdmin所支持的數(shù)據(jù)庫(kù)類型 */
$cfg['Servers'][$i]['controluser'] = ”; /* Mysql的root用戶名,不要填寫 */
$cfg['Servers'][$i]['controlpass'] = ”; /* Mysql的root用戶密碼,不要填寫 */
$cfg['Servers'][$i]['pmadb'] = ‘phpmyadmin‘; /* 包含連接表結(jié)構(gòu)的數(shù)據(jù)庫(kù)名稱。不用修改 */
$cfg['Servers'][$i]['bookmarktable'] = ‘pma_bookmark‘; /* 從 2.2.0 版本開始,phpMyAdmin 允許將經(jīng)常使用的查詢存儲(chǔ)在書簽中。不用修改 */
$cfg['Servers'][$i]['relation'] = ‘pma_relation‘; /* 從 2.2.4 版本開始,您可以定義一個(gè)關(guān)聯(lián)表,它的字段是另一個(gè)表(外部表)的主鍵。不用修改 */
$cfg['Servers'][$i]['table_info'] = ‘pma_table_info‘; /* 不用修改 */
$cfg['Servers'][$i]['table_coords'] = ‘pma_table_coords‘; /* 不用修改 */
$cfg['Servers'][$i]['pdf_pages'] = ‘pma_pdf_pages‘; /* 不用修改 */
$cfg['Servers'][$i]['column_info'] = ‘pma_column_info‘; /* 不用修改 */
$cfg['Servers'][$i]['history'] = ‘pma_history‘; /* 不用修改 */
$cfg['UploadDir'] = ”; /* 不用修改 */
$cfg['SaveDir'] = ”; /* 不用修改 */
5、配置完畢后,就可以在瀏覽器里使用了。
如 http://192.168.0.1/MyphpAdmin/ (注意大小寫要輸入正確,否則會(huì)提示找不到頁(yè)面)
如果安裝沒有問題的話,就會(huì)出現(xiàn)登錄對(duì)話框,輸入MySql的帳號(hào)和密碼就可以登陸了。
如果在登陸時(shí)出現(xiàn)[size=-1]session_start(): Failed to initialize storage module.
請(qǐng)將php.ini文件中如下兩句進(jìn)行修改
session.save_handler = files
session.save_path = “/tmp” (請(qǐng)確認(rèn)/tmp目錄的讀寫權(quán)限,最好給777權(quán)限。)
改成這樣就行了,然后重啟apache。
如果遇到 #2002 – 服務(wù)器沒有響應(yīng) (or the local MySQL server’s socket is not correctly configured) 這類問題
我 google 了一下,發(fā)現(xiàn)很多人被這個(gè)問題困擾,大家解決方法的思路都是圍繞 mysql.sock。實(shí)際上,通過修改 mysql.sock 路徑解決問題的可能性很小。大部分這類問題是由于 mysql 做了 ip 綁定(bind-address = 127.0.0.1)造成的。這里只需要將 $cfg['Servers'][$i]['host'] = ‘localhost’ 改為 ’127.0.0.1′ 就可以了;蛘吒某蒷ocalhost.localdomain。
關(guān)鍵字:CentOS、Linux、MySQL、數(shù)據(jù)庫(kù)
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解