Linux基礎(chǔ)教程之LAMP組合深入講解(二)
lamp
SQL
- 數(shù)據(jù)管理模型:層次模型、網(wǎng)狀模型、關(guān)系模型
數(shù)據(jù)分類:結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)- 關(guān)系模型
- 數(shù)據(jù)庫(kù):一個(gè)方案、一個(gè)項(xiàng)目
- 二維關(guān)系:
- 表:row, column
索引:index
視圖:view
- 表:row, column
- SQL接口:Structured Query Language;類似于OS的shell接口;也提供編程功能;
- ANSI: SQL標(biāo)準(zhǔn),SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, …
PL-SQL,T-SQL,… - DDL:Data Defined Language
CREATE, ALTER, DROP、SHOW - DML: Data Manapulating Language
INSERT, DELETE, UPDATE, SELECT - 編程接口:選擇、循環(huán);
- SQL代碼:
- 存儲(chǔ)過(guò)程:procedure
存儲(chǔ)函數(shù):function
觸發(fā)器:trigger
事件調(diào)度器:event scheduler
- 存儲(chǔ)過(guò)程:procedure
- 用戶和權(quán)限:
用戶:用戶名和密碼;
權(quán)限:管理類、程序類、數(shù)據(jù)庫(kù)、表、字段
- ANSI: SQL標(biāo)準(zhǔn),SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, …
- DBMS:DataBase Management System
RDBMS:Relational DataBase Management System
- 關(guān)系模型
- 事務(wù)(Transaction):組織多個(gè)操作為一個(gè)整體,要么全部都成功執(zhí)行,要么失敗回滾;
“回滾”, rollback- 一個(gè)存儲(chǔ)系統(tǒng)是否支持事務(wù),測(cè)試標(biāo)準(zhǔn):
ACID:- A:原子性;
C:一致性;
I:隔離性;
D:持久性;
- A:原子性;
- SQL接口:分析器和優(yōu)化器
存儲(chǔ)引擎
- 一個(gè)存儲(chǔ)系統(tǒng)是否支持事務(wù),測(cè)試標(biāo)準(zhǔn):
- 補(bǔ)充材料:RDMBS設(shè)計(jì)范式基礎(chǔ)概念
設(shè)計(jì)關(guān)系數(shù)據(jù)庫(kù)時(shí),遵從不同的規(guī)范要求,設(shè)計(jì)出合理的關(guān)系型數(shù)據(jù)庫(kù),這些不同的規(guī)范要求被稱為不同的范式,各種范式呈遞次規(guī)范,越高的范式數(shù)據(jù)庫(kù)冗余越小。 目前關(guān)系數(shù)據(jù)庫(kù)有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。滿足最低要求的范式是第一范式(1NF)。在第一范式的基礎(chǔ)上進(jìn)一步滿足更多規(guī)范要求的稱為第二范式(2NF),其余范式以次類推。一般說(shuō)來(lái),數(shù)據(jù)庫(kù)只需滿足第三范式(3NF)就行了。 (1) 第一范式(1NF) 所謂第一范式(1NF)是指在關(guān)系模型中,對(duì)域添加的一個(gè)規(guī)范要求,所有的域都應(yīng)該是原子性的,即數(shù)據(jù)庫(kù)表的每一列都是不可分割的原子數(shù)據(jù)項(xiàng),而不能是集合,數(shù)組,記錄等非原子數(shù)據(jù)項(xiàng)。即實(shí)體中的某個(gè)屬性有多個(gè)值時(shí),必須拆分為不同的屬性。在符合第一范式(1NF)表中的每個(gè)域值只能是實(shí)體的一個(gè)屬性或一個(gè)屬性的一部分。簡(jiǎn)而言之,第一范式就是無(wú)重復(fù)的域。 說(shuō)明:在任何一個(gè)關(guān)系數(shù)據(jù)庫(kù)中,第一范式(1NF)是對(duì)關(guān)系模式的設(shè)計(jì)基本要求,一般設(shè)計(jì)中都必須滿足第一范式(1NF)。不過(guò)有些關(guān)系模型中突破了1NF的限制,這種稱為非1NF的關(guān)系模型。換句話說(shuō),是否必須滿足1NF的最低要求,主要依賴于所使用的關(guān)系模型。 (2) 第二范式(2NF) 第二范式(2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來(lái)的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或記錄必須可以被唯一地區(qū)分。選取一個(gè)能區(qū)分每個(gè)實(shí)體的屬性或?qū)傩越M,作為實(shí)體的唯一標(biāo)識(shí)。 第二范式(2NF)要求實(shí)體的屬性完全依賴于主關(guān)鍵字。所謂完全依賴是指不能存在僅依賴主關(guān)鍵字一部分的屬性,如果存在,那么這個(gè)屬性和主關(guān)鍵字的這一部分應(yīng)該分離出來(lái)形成一個(gè)新的實(shí)體,新實(shí)體與原實(shí)體之間是一對(duì)多的關(guān)系。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的唯一標(biāo)識(shí)。簡(jiǎn)而言之,第二范式就是在第一范式的基礎(chǔ)上屬性完全依賴于主鍵。 (3) 第三范式(3NF) 第三范式(3NF)是第二范式(2NF)的一個(gè)子集,即滿足第三范式(3NF)必須滿足第二范式(2NF)。簡(jiǎn)而言之,第三范式(3NF)要求一個(gè)關(guān)系中不能包含已在其它關(guān)系已包含的非主關(guān)鍵字信息。簡(jiǎn)而言之,第三范式就是屬性不依賴于其它非主屬性,也就是在滿足2NF的基礎(chǔ)上,任何非主屬性不得傳遞依賴于主屬性。
- 數(shù)據(jù)庫(kù):數(shù)據(jù)集合
- 表:為了滿足范式設(shè)計(jì)要求,將一個(gè)數(shù)據(jù)集分拆為多個(gè);
- 約束:constraint,向數(shù)據(jù)表插入的數(shù)據(jù)要遵守的限制規(guī)則;
- 主鍵:一個(gè)或多個(gè)字段的組合,填入主鍵中的數(shù)據(jù),必須不同于已存在的數(shù)據(jù);而且不能為空;一個(gè)表只能有一個(gè)Primary KEY;
- 外鍵:一個(gè)表中某字段中能插入的數(shù)據(jù),取決于另外一張表的主鍵中的數(shù)據(jù);
- 惟一鍵:一個(gè)或多個(gè)字段的組合,填入惟一鍵中的數(shù)據(jù),必須不同于已存在的數(shù)據(jù);可以為空;一個(gè)表可存在多個(gè)Unique Key;
- 檢查性約束:取決于表達(dá)式的要求;
- 索引:將表中的某一個(gè)或某些字段抽取出來(lái),單獨(dú)將其組織一個(gè)獨(dú)特的數(shù)據(jù)結(jié)構(gòu)中;
- 常用的索引類型:
- B+ Tree:Balance Tree
hash
- B+ Tree:Balance Tree
注意:有助于讀請(qǐng)求,但不利于寫(xiě)請(qǐng)求;
- 常用的索引類型:
- 關(guān)系運(yùn)算:
- 選擇:挑選出符合條件的行;
投影:挑選出符合需要的列;
連接:將多張表關(guān)聯(lián)起來(lái);
- 選擇:挑選出符合條件的行;
- 數(shù)據(jù)抽象:
- 物理層:決定數(shù)據(jù)的存儲(chǔ)格式,即如何將數(shù)據(jù)組織成為物理文件;
邏輯層:描述DB存儲(chǔ)什么數(shù)據(jù),以及數(shù)據(jù)間存在什么樣的關(guān)系;
視圖層:描述DB中的部分?jǐn)?shù)據(jù);
- 物理層:決定數(shù)據(jù)的存儲(chǔ)格式,即如何將數(shù)據(jù)組織成為物理文件;
- 關(guān)系模型的分類:
- 關(guān)系模型
實(shí)體-關(guān)系模型
基于對(duì)象的關(guān)系模型
半結(jié)構(gòu)化關(guān)系模型
- 關(guān)系模型
MariaDB
- 可用版本:
- MySQL:
- MariaDB
Percona-Server
AliSQL
TiDB
- MariaDB
- MySQL:
- MariaDB的特性:
- 插件式存儲(chǔ)引擎:存儲(chǔ)管理器有多種實(shí)現(xiàn)版本,彼此間的功能和特性可能略有區(qū)別;用戶可根據(jù)需要靈活選擇;
- 存儲(chǔ)引擎也稱為“表類型”;
- 更多的存儲(chǔ)引擎;
MyISAM:不支持事務(wù),表級(jí)鎖,崩潰后不保證安全恢復(fù);
MyISAM –> Aria
InnoDB –> XtraDB :支持事務(wù),行級(jí)鎖,外鍵,熱備; - 諸多擴(kuò)展和新特性;
- 提供了較多的測(cè)試組件;
- truly open source;
- 更多的存儲(chǔ)引擎;
- 安裝和使用MariaDB:
- rpm包;
(a) 由OS的發(fā)行商提供;
(b) 程序官方提供; - 源碼包;
- 通用二進(jìn)制格式的程序包;
- rpm包;
- MariaDB程序的組成:C/S
- MariaDB:主要有兩類程序文件
- Client: mysql, mysqldump, mysqladmin
Server:mysqld, mysqld_safe, mysqld_multi
- Client: mysql, mysqldump, mysqladmin
- C:Client –> mysql protocol –> Server
mysql:CLI交互式客戶端程序;
mysqldump:備份工具;
mysqladmin:管理工具;
mysqlbinlog:
… - S:Server
mysqld
mysqld_safe:建議運(yùn)行服務(wù)端程序;
mysqld_multi:多實(shí)例;- 三類套接字地址:
- IPv4|IPv6, 3306/tcp
- Unix Sock:/var/lib/mysql/mysql.sock, /tmp/mysql.sock
- 三類套接字地址:
- 配置文件:ini風(fēng)格,用一個(gè)文件為多個(gè)程序提供配置;
- [mysql]:配置客戶端
[mysqld]:配置服務(wù)端
[mysqld_safe]:
[server]
[client]
[mysqldump]
… - mysql的各類程序啟動(dòng)都讀取不止一個(gè)配置文件,按順序讀取,且最后讀取的為最終生效;
# my_print_defaults Default options are read from the following files in the given order: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf /etc/my.cnf + /etc/my.cnf.d/*.cnf
- [mysql]:配置客戶端
- MariaDB:主要有兩類程序文件
命令行交互式客戶端程序:mysql
- mysql [OPTIONS] [database]
- 常用選項(xiàng):
- -u, –user=username:用戶名,默認(rèn)為root;
-h, –host=hostname:遠(yuǎn)程主機(jī)(即mysql服務(wù)器)地址,默認(rèn)為localhost; 客戶端連接服務(wù)端,服務(wù)器會(huì)反解客戶的IP為主機(jī)名,關(guān)閉此功能(skip_name_resolve=ON);
-p, –password[=PASSWORD]:USERNAME所表示的用戶的密碼; 默認(rèn)為空;注意:mysql的用戶賬號(hào)由兩部分組成:'USERNAME'@'HOST'; 其中HOST用于限制此用戶可通過(guò)哪些遠(yuǎn)程主機(jī)連接當(dāng)前的mysql服務(wù); HOST的表示方式,支持使用通配符: %:匹配任意長(zhǎng)度的任意字符; 172.16.%.%, 172.16.0.0/16 _:匹配任意單個(gè)字符;
-P, –port=#:mysql服務(wù)器監(jiān)聽(tīng)的端口;默認(rèn)為3306/tcp;
-S, –socket=/PATH/TO/mysql.sock:套按字文件路徑;
-D, –database=DB_name:指定連接到服務(wù)器端之后,其指明的數(shù)據(jù)庫(kù)為默認(rèn)數(shù)據(jù)庫(kù);
-e, –execute=’SQL STATEMENT’:連接至服務(wù)器并讓其執(zhí)行此命令后直接返回;
- -u, –user=username:用戶名,默認(rèn)為root;
- 命令:
- 客戶端命令:本地執(zhí)行
mysql> help 獲取幫助; \u db_name:設(shè)定哪個(gè)庫(kù)為默認(rèn)數(shù)據(jù)庫(kù) \q:退出; \d CHAR:修改新的語(yǔ)句結(jié)束符; \g:語(yǔ)句結(jié)束標(biāo)記; \G:語(yǔ)句結(jié)束標(biāo)記,結(jié)果豎排方式顯式; \s:查看狀態(tài) \!: 執(zhí)行shell命令; \.: 裝載并運(yùn)行sql腳本; \c: 終止命令,不寫(xiě)分號(hào)
- 服務(wù)端命令:通過(guò)mysql連接發(fā)往服務(wù)器執(zhí)行并取回結(jié)果(SQL語(yǔ)句);
DDL, DML, DCL
注意:每個(gè)語(yǔ)句必須有語(yǔ)句結(jié)束符,默認(rèn)為分號(hào)(;)獲取幫助: mysql> help contents Administration Account Management Data Definition Data Manipulation Data Types myslq> help '命令類別'
- 客戶端命令:本地執(zhí)行
- 數(shù)據(jù)類型:
- 表:行和列
創(chuàng)建表:定義表中的字段; - 定義字段時(shí),關(guān)鍵的一步即為確定其數(shù)據(jù)類型;
用于確定:數(shù)據(jù)存儲(chǔ)格式、能參與運(yùn)算種類、可表示的有效的數(shù)據(jù)范圍; - 字符型:字符集
碼表:在字符和二進(jìn)制數(shù)字之間建立映射關(guān)系;mysql> SHOW CHARACTER SET; 查看支持的字符集 mysql> SHOW COLLATION; 查看排序規(guī)則
- 種類:
- 字符型:
定長(zhǎng)字符型:CHAR(#):不區(qū)分字符大小寫(xiě) BINARY(#):區(qū)分字符大小寫(xiě)
變長(zhǎng)字符型:
VARCHAR(#):多占一個(gè)或兩個(gè)字符空間; VARBINARY(#)
對(duì)象存儲(chǔ):
TEXT:不區(qū)分字符大小寫(xiě);TINYTEXT、SMALLTEXT、MEDIUMTEXT、TEXT、LONGTEXT BLOB:Binary Large OBject(二進(jìn)制大對(duì)象),區(qū)分字符大小寫(xiě);TINYBLOB,SMALLBLOB,MEDIUMBLOB,BLOB,LONGBLOB;
內(nèi)置類型:
SET ENUM
- 數(shù)值型:
精確數(shù)值型:INT(TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT) UNSIGNED DECIMAL
近似數(shù)值型:
FLOAT DOBULE
- 日期時(shí)間型:
日期型:DATE 時(shí)間型:TIME 日期時(shí)間型:DATETIME 時(shí)間戳:TIMESTAMP 年份:YEAR(2), YEAR(4)
- 字符型:
- 字段數(shù)據(jù)修飾符:
NOT NULL:非空; AUTO_INCREMENT:自動(dòng)增長(zhǎng); NULL: DEFAULT value:默認(rèn)值; PRIMARY KEY:主鍵; UNIQUE KEY:惟一鍵;
- 表:行和列
- 常用選項(xiàng):
服務(wù)器端命令
- DDL:數(shù)據(jù)定義語(yǔ)言,主要用于管理數(shù)據(jù)庫(kù)組件,例如數(shù)據(jù)庫(kù)、表、索引、視圖、用戶、存儲(chǔ)過(guò)程
CREATE、ALTER、DROP - DML:數(shù)據(jù)操縱語(yǔ)言,主要用管理表中的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的增、刪、改、查;
INSERT, DELETE, UPDATE, SELECT - 獲取命令幫助:
mysql> help KEYWORD
- 數(shù)據(jù)庫(kù)管理(DDL):
- 創(chuàng)建:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name; [DEFAULT] CHARACTER SET [=] charset_name [DEFAULT] COLLATE [=] collation_name 查看支持的所有字符集:SHOW CHARACTER SET 查看支持的所有排序規(guī)則:SHOW COLLATION
- 修改:
ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name [DEFAULT] COLLATE [=] collation_name
- 刪除:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
- 查看:
SHOW DATABASES LIKE ’‘;
- 創(chuàng)建:
- 表管理:
- 創(chuàng)建:
CREATE TABLE [IF NOT EXISTS] [db_name.]tbl_name (create_defination) [table_options] create_defination: 字段:col_name data_type 鍵: PRIMARY KEY (col1, col2, ...) UNIQUE KEY (col1, col2,...) FOREIGN KEY (column) 索引: KEY|INDEX [index_name] (col1, col2,...) table_options: ENGINE [=] engine_name CHARACTER SET [=] charset_name COLLATE [=] collation_name
- 查看數(shù)據(jù)庫(kù)支持的所有存儲(chǔ)引擎類型:
mysql> SHOW ENGINES;
- 查看某表的狀態(tài)信息:
mysql> SHOW TABLES STATUS [LIKE 'tbl_name'][WHERE clause]
- 查看數(shù)據(jù)庫(kù)支持的所有存儲(chǔ)引擎類型:
- 修改:
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] ...] alter_specification: 字段: 添加:ADD [COLUMN] col_name data_type [FIRST | AFTER col_name ] 刪除:DROP [COLUMN] col_name 修改: CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name] MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] 鍵: 添加:ADD {PRIMARY|UNIQUE|FOREIGN} KEY (col1, col2,...) 刪除: 主鍵:DROP PRIMARY KEY 外鍵:DROP FOREIGN KEY fk_symbol 索引: 添加:ADD {INDEX|KEY} [index_name] (col1, col2,...) 刪除:DROP {INDEX|KEY} index_name 表選項(xiàng): ENGINE [=] engine_name
- 查看表上的索引的信息:
mysql> SHOW INDEXES FROM tbl_name;
- 查看表上的索引的信息:
- 刪除:
DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ...
- 表的引用方式:
tbl_name db_name.tbl_name
- 第二種創(chuàng)建方式:
復(fù)制表結(jié)構(gòu); CREATE TABLE tbl_name LIKE other_table_name
- 第三種創(chuàng)建方式:
復(fù)制表數(shù)據(jù); CREATE TABLE tbl_name () SELECT clause
- 創(chuàng)建:
- 索引管理:
索引是特殊的數(shù)據(jù)結(jié)構(gòu);- 索引:要有索引名稱;
- 創(chuàng)建:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [BTREE|HASH] ON tbl_name (col1, col2,,...)
- 刪除:
DROP INDEX index_name ON tbl_name
- DML:INSERT, DELETE, UPDATE, SELECT
- INSERT INTO:
INSERT [INTO] tbl_name [(col1,...)] {VALUES|VALUE} (val1, ...),(...),...
注意:字符型:引號(hào);數(shù)值型:不能用引號(hào);
- SELECT:
- SELECT * FROM tbl_name[, tbl_name_2];
返回指定表的所有數(shù)據(jù);慎用; - SELECT col1, col2, … FROM tbl_name;
顯示時(shí),字段可以顯示為別名;
col_name AS col_alias - SELECT col1, … FROM tbl_name WHERE clause;
WHERE clause:用于指明挑選條件; WHERE col_name 操作符 value; 操作符(1) : >, <, >=, <=, ==, != 組合條件: and or not 操作符(2) : BETWEEN ... AND ... LIKE 'PATTERN' 通配符: %:任意長(zhǎng)度的任意字符; _:任意單個(gè)字符; RLIKE 'PATTERN' 正則表達(dá)式對(duì)字符串做模式匹配; IS NULL 顯示為空的 IS NOT NULL 顯示不為空的
- SELECT col1, … FROM tbl_name [WHERE clause] ORDER BY col_name, col_name2, … [ASC|DESC];
ASC: 升序;
DESC: 降序; - 分組:
GROUP BY,為了聚合;count(), sum(), avg(), max(), min()
HAVING:對(duì)聚合的結(jié)果做條件過(guò)濾;
- SELECT * FROM tbl_name[, tbl_name_2];
- DELETE:刪除行;
DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
(1) DELETE FROM tbl_name WHERE where_condition (2) DELETE FROM tbl_name [ORDER BY ...] [LIMIT row_count]
- UPDATE:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1=value1 [, col_name2=value2] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
- INSERT INTO:
- 用戶賬號(hào)及權(quán)限管理:
- 用戶賬號(hào):’username’@’host’
- host:此用戶訪問(wèn)當(dāng)前mysql服務(wù)器時(shí),允許其通過(guò)哪些主機(jī)遠(yuǎn)程創(chuàng)建連接;
表示方式:IP,網(wǎng)絡(luò)地址、主機(jī)名、通配符(%和_); - 禁止檢查主機(jī)名:my.cnf
[mysqld] skip_name_resolve = ON
- host:此用戶訪問(wèn)當(dāng)前mysql服務(wù)器時(shí),允許其通過(guò)哪些主機(jī)遠(yuǎn)程創(chuàng)建連接;
- 創(chuàng)建用戶賬號(hào):
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
- 刪除用戶賬號(hào):
DROP USER ’user‘@’host' [, user@host] ...
- 授權(quán):
權(quán)限級(jí)別:管理權(quán)限、數(shù)據(jù)庫(kù)、表、字段、存儲(chǔ)例程;GRANT priv_type,... ON [object_type] db_name.tbl_name TO 'user'@'host' [IDENTIFIED BY 'password']; priv_type: ALL [PRIVILEGES] db_name.tbl_name: *.*:所有庫(kù)的所有表; db_name.*:指定庫(kù)的所有表; db_name.tbl_name:指定庫(kù)的特定表; db_name.routine_name:指定庫(kù)上的存儲(chǔ)過(guò)程或存儲(chǔ)函數(shù); [object_type] TABLE FUNCTION PROCEDURE
- 查看指定用戶所獲得的授權(quán):
SHOW GRANTS FOR 'user'@'host' SHOW GRANTS FOR CURRENT_USER;
- 回收權(quán)限:
REVOKE priv_type, ... ON db_name.tbl_name FROM 'user'@'host';
- 注意:MariaDB服務(wù)進(jìn)程啟動(dòng)時(shí),會(huì)讀取mysql庫(kù)的所有授權(quán)表至內(nèi)存中;
- GRANT或REVOKE命令等執(zhí)行的權(quán)限操作會(huì)保存于表中,MariaDB此時(shí)一般會(huì)自動(dòng)重讀授權(quán)表,權(quán)限修改會(huì)立即生效;
- 其它方式實(shí)現(xiàn)的權(quán)限修改,要想生效,必須手動(dòng)運(yùn)行FLUSH PRIVILEGES命令方可;
- 查看指定用戶所獲得的授權(quán):
- 用戶賬號(hào):’username’@’host’
- 加固mysql服務(wù)器,在安裝完成后,運(yùn)行mysql_secure_installation命令;
- 圖形管理組件:
phpMyAdmin;運(yùn)行于lamp;
Navicat
Mysql-Front
ToadForMySQL
SQLyog
httpd+php結(jié)合的方式:php-fpm
- module: php
fastcgi : php-fpm - php-fpm:
- CentOS 6:
PHP-5.3.2-:默認(rèn)不支持fpm機(jī)制;需要自行打補(bǔ)丁并編譯安裝;
httpd-2.2:默認(rèn)不支持fcgi協(xié)議,需要自行編譯此模塊;- 解決方案:編譯安裝httpd-2.4, php-5.3.3+;
- CentOS 7:
httpd-2.4:rpm包默認(rèn)編譯支持了fcgi模塊;
php-fpm包:專用于將php運(yùn)行于fpm模式;配置文件:
- 服務(wù)配置文件:/etc/php-fpm.conf, /etc/php-fpm.d/*.conf
- php環(huán)境配置文件:/etc/php.ini, /etc/php.d/*.ini
- 連接池:
pm = static|dynamic- static:固定數(shù)量的子進(jìn)程;pm.max_children;
- dynamic:子進(jìn)程數(shù)據(jù)以動(dòng)態(tài)模式管理;
pm.start_servers pm.min_spare_servers pm.max_spare_servers ;pm.max_requests = 500
- 創(chuàng)建session目錄,并確保運(yùn)行php-fpm進(jìn)程的用戶對(duì)此目錄有讀寫(xiě)權(quán)限;
# mkdir /var/lib/php/session # chown apache.apache /var/lib/php/session
- 配置httpd,添加/etc/httpd/conf.d/fcgi.conf配置文件,內(nèi)容類似:
DirectoryIndex index.php ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
- 虛擬主機(jī)配置
DirectoryIndex index.php <VirtualHost *:80> ServerName www.b.net DocumentRoot /apps/vhosts/b.net ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/apps/vhosts/b.net/$1 <Directory "/apps/vhosts/b.net"> Options None AllowOverride None Require all granted </Directory> </VirtualHost>
- 假設(shè)fpm的status頁(yè)面輸出URL為/pmstatus,測(cè)試接口的輸出位置為/ping
ProxyPassMatch ^/(ping|pmstatus)$ fcgi://127.0.0.1:9000/$1
- 假設(shè)fpm的status頁(yè)面輸出URL為/pmstatus,測(cè)試接口的輸出位置為/ping
- CentOS 6: