php-fpm配置,mariadb密碼重置,mariadb慢查詢日誌

php-fpm配置1

  • cd /usr/local/php-fpm/etc/
  • vi php-fpm.conf
  • 這是php服務的配置文件
  • 如圖,最左邊是 ; 符號
  • 這表示 註釋 的意思,註釋後面的語句是不執行的
  • 如圖,定位到最後一行
  • 能夠看到 include 表示包含
  • 這是配置文件是主配置文件,還有一些子配置文件
  • 子配置文件的地址就在這裏定義了
  • 在 php-fpm.d/ 目錄下面的全部 .conf 結尾的文件都是子配置文件
  • 如圖,cd進入 php-fpm.d 目錄
  • 能夠看到兩個文件
  • 生效的子配置文件是 www.conf 文件
  • www.conf.default 是模板配置文件
  • 之後須要增長更多的自配置文件能夠複製模板配置文件來配置
  • vi www.conf 能夠看到
  • 這個配置文件跟 pool 這個概念的有關
  • 這個pool 的名稱叫作 www
  • 如圖,使用 ps aux | grep php-fpm 查看 php的進程
  • 能夠看到,除了 master 主進程外
  • 子進程就是 pool 名稱都是 www
  • 因此php的子進程就是 pool
  • 子進程的名稱就是使用的配置文件定義的名稱
  • 如圖,這裏定義的就是子進程的用戶和所屬組
  • 這裏 用戶 組 都是 php-fpm
  • 如圖,這裏定義的就是子進程監聽的 ip 和 端口
  • 若是 nginx 虛擬主機配置文件裏面 php 服務的 ip 端口更改了
  • 這裏不改就監聽不到,這樣就沒法訪問虛擬主機
  • 這裏定義的 ip 和 端口 要跟 虛擬主機裏面
  • 設置的 php 服務的 ip 和 端口 應該是一致的
  • 如圖,把監聽 ip 和 端口號那一行註釋掉
  • 增長一行 listen = /tmp/www.socket
  • 這樣就是用 socket 文件進行通訊,而不是使用 ip+端口 的方式
  • 而後保存退出
  • 修改了配置文件,須要重啓php服務讓新的配置文件生效
  • 如圖,使用 /usr/local/php-fpm/sbin/php-fpm -t 檢測配置文件語法錯誤
  • 這裏顯示沒有錯誤
  • 如圖,使用 /etc/init.d/php-fpm reload 重載配置文件
  • ls 查看 tmp 目錄
  • 能夠看到,重載配置文件後,這裏自動生成了 www.socket 文件
  • 如圖,使用 www.socket 文件進行通訊
  • 在 nginx 裏面也須要設置一下
  • vi tom.blog.conf
  • 把原來的 通訊ip端口 那一行註釋掉
  • 添加新的代碼,unix:/tmp/www.socket;
  • 這表示虛擬主機這裏也使用 www.socket 文件與php服務通訊
  • 保存退出
  • 如圖,訪問 blog 網站,出現 502
  • 如圖,tail /var/log/nginx/error.log 查看nginx 錯誤日誌
  • 發現鏈接 www.socket 文件失敗
  • 錯誤緣由是 permission denied 表示權限不足
  • cd /usr/local/php-fpm/etc/php-fpm.d 進入子配置文件目錄
  • vi www.conf 打開配置文件
  • 如圖,找到圖中的位置
  • listen.owner 是定義socket文件的全部者的
  • listen.group 是定義socket文件的所屬組的
  • listen.mode 是定義socket文件的權限值的
  • 這裏只須要定義 listen.mode 就能夠解決權限不足的問題
  • 首先把 listen.mode前面的 ; 符號去掉
  • 讓這行代碼能夠運行
  • 如圖,把數值改爲 0666 權限
  • 保存退出
  • 須要重啓 php-fpm 服務才能夠生成新的權限的socket文件
  • 使用 /etc/init.d/php-fpm restart 重啓服務
  • 如圖,重啓服務後,查看www.socket 文件權限已是 666 權限了
  • 如圖,再訪問 tom.blog.com 就能夠成功訪問了
  • 表示 www.socket 文件通訊成功

php-fpm配置2

  • cd /usr/local/php-fpm/etc/php-fpm.d/
  • vi www.conf 打開 php-fpm 子進程的配置文件
  • php-fpm 啓動的時候會啓動一個主進程和若干子進程
  • /usr/local/php-fpm/etc/ 目錄下面的 php-fpm.conf 就是主進程的配置文件
  • 主進程主要是管理子進程用的
  • 實際提供服務的是子進程
  • www.conf 就是子進程配置文件
  • 如圖,這一行代碼 listen.allowed_clients 是定義什麼用戶能夠訪問這個服務的
  • 這裏這行代碼是註釋掉的,並無起做用
  • 這種狀況下默認是 127.0.0.1 的用戶才能夠訪問 php-fpm 服務
  • 也就是在本機上的用戶才能夠訪問php-fpm服務
  • 若是想限制某個特定的 ip 才能夠訪問 php-fpm服務
  • 就能夠在這裏設置,不過通常來講都是使用本機用戶才能夠訪問服務
  • 因此這裏保持默認設置,不修改也能夠

  • 如圖,pm = dynamic 是子進程的模式
  • 使用的模式通常有兩種,分別是 動態 和 靜態
  • dynamic 就是動態模式
  • static 就是靜態模式
  • 動態模式下,子進程的數量會根據訪問量自動增減
  • 靜態模式下,子進程的數量是固定不變的
  • 如圖,查看php-fpm的進程信息
  • 能夠看到有一個主進程, master
  • 還有兩個子進程 pool www
  • 爲何子進程有兩個,而不是1個,或者3個
  • 這是由於在配置文件裏面已經定義好了數量
  • 如圖,pm.max_children = 5
  • 意思是,在動態模式下,子進程的數量最多能夠有 5 個
  • 若是是靜態模式下
  • 這個參數的意思就是固定有 5 個子進程,不增不減
  • 下面還有三個參數
  • pm.start_servers = 2
  • 意思是,啓動php-fpm服務的時候
  • 有 2 個子進程會啓動
  • 這個參數只有在動態模式下才生效
  • pm.min_spare_servers = 1
  • 這個參數的意思是,php-fpm服務空閒的時候
  • 最少要有 1 個子進程存在
  • 這個參數也是動態模式才生效
  • pm.max_spare_servers = 3
  • 這個參數的意思是,php-fpm服務空閒的時候
  • 最多能夠有 3 個子進程存在
  • 這個參數也是動態模式才生效
  • 不過這些參數也不能胡亂設置,否則會增長服務器的負載
  • pm.max_children 的數值最好不要超過處理器核心數的2倍
  • pm.start_servers 的數值不能小於 pm.min_spare_servers
  • 也不能大於 pm.max_spare_servers
  • 最好是它們中間的值比較好
  • pm.min_spare_servers 的數值不要大於處理器的核心數
  • pm.max_spare_servers 的數值不能大於 pm.max_children
  • 應該比 max_children 小
  • 如圖,pm.max_requests = 500
  • 意思是子進程處理 500 次請求後就會被系統殺死
  • 子進程若是一直存在,可能引發內存泄露
  • 致使系統出現各類問題
  • 因此在必定時間內,子進程應該被殺死
  • 這裏就是設置子進程最多處理 500 次請求後,就會被系統殺死
  • 後面的請求會產生新的子進程來處理
  • 如圖,配置文件最下面
  • 這幾行代碼也是比較常會用到
  • php_flag[display_errors] = off
  • 這裏若是把註釋去掉,把值修改成 on
  • 而後保存退出
  • 如圖,修改配置文件後,須要重啓 php-fpm 服務重載配置文件
  • cd /data/tom.bbs/ 進入論壇的文件目錄內
  • 隨便找個php文件,好比 forum.php
  • vi forum.php
  • 如圖,隨便添加一行沒有意義的錯誤代碼
  • 如圖,訪問論壇網站
  • 出現語法有錯誤的提示信息
  • 這就是 php_flag[display_errors] = on 的做用
  • php服務解析php文件的時候,若是發現 php 代碼錯誤
  • 就會返回相應的代碼錯誤的信息
  • 這個功能在測試的時候比較有用
  • 可是在生產環境中就不要使用了,除了妨礙訪問以外
  • 還會泄露服務器中代碼存放位置的信息
  • 容易被人利用對服務器形成損害
  • 因此生產環境中,這裏應該設置爲 off
  • 如圖,若是php_flag[display_errors] 設置爲 off
  • 就看不到錯誤信息了
  • 這時候能夠把下面兩行代碼的註釋取消掉
  • php_admin_value[error_log] = /var/log/fpm-php.www.log
  • 指定一個錯誤日誌的路徑
  • php_admin_flag[log_errors] = on
  • 意思是開啓錯誤日誌
  • 而後下面還要新增一行代碼
  • php_admin_value[error_reporting] = E_ALL
  • 這個是指定錯誤信息的級別
  • 錯誤信息是有分不一樣的級別的
  • 這裏指定了什麼級別,相應級別的錯誤信息纔會被記錄到錯誤日誌裏面
  • 這裏指定的是 E_ALL 級別
  • 這個級別的意思就是全部的錯誤信息都會被記錄到錯誤日誌裏面
  • 而後保存退出
  • 重啓 php-fpm 服務
  • /etc/init.d/php-fpm restart
  • 須要手動 touch /var/log/fpm-php.www.log 文件
  • 而後 chmod 777 /var/log/fpm-php.www.log 賦予權限
  • 否則php服務可能由於權限問題沒法寫入錯誤信息
  • 如圖,再次訪問論壇網站,發現沒法訪問 500 錯誤
  • 如圖,錯誤日誌顯示
  • /data/tom.bbs/forum.php 文件第 12 行代碼有語法錯誤
  • 把剛纔添加到 forum.php 裏面的 無心義的錯誤代碼 刪除
  • 刷新網頁
  • 如圖,就從新訪問成功了
  • 這樣設置錯誤日誌,就不會在頁面上直接顯示錯誤的文件代碼的路徑
  • 又能夠方便的查找錯誤信息

php-fpm配置3

  • 如圖,在論壇網站目錄內,編輯一個叫作phpinfo.php的文件
  • 如圖,phpinfo.php 文件內容這樣寫,而後保存退出
  • 如圖,直接訪問 phpinfo.php 文件
  • 就能夠顯示 php 的版本信息,配置信息等等詳細信息
  • 也能夠做爲檢測 php服務是否正常解析的檢測手段
  • 可是這個函數使用有風險,容易讓黑客利用,因此通常須要禁止掉
  • cd /usr/local/php-fpm/etc
  • vi php.ini
  • 而後使用 /disable_function 搜索這個字段
  • 如圖,找到這一行代碼
  • 如圖,後面寫上 phpinfo 而後保存退出
  • 這樣就把 phpinfo 這個函數給禁用了
  • 如圖,修改配置文件後,須要重載一下
  • 如圖,繼續訪問 phpinfo.php 文件就沒法訪問了
  • 如圖,錯誤日誌裏面有顯示 phpinfo() 由於安全緣由沒法使用
  • 如圖,可使用 curl 測試訪問 phpinfo 文件
  • 由於網站虛擬機使用了 ssl 用的是 443 端口
  • 因此 curl 測試要使用 -k 參數,-H 指定域名
  • 後面是訪問的路徑
  • cd /usr/local/php-fpm/etc/php-fpm.d
  • vi www.conf
  • 如圖,找到 slowlog
  • 這裏是定義慢日誌,執行慢的php文件的信息就會被記錄到慢日誌裏面
  • 添加一行 slowlog = /tmp/php.slow
  • 這是定義 慢日誌 存放的路徑,php.slow就是自定義的日誌名稱
  • 下面的 request_slowlog_timeout = 1
  • 這是定義慢的標準
  • 不如這裏設置爲 1
  • 就表示,執行時間超過 1 秒的文件,信息會被慢日誌記錄
  • 保存退出,使用 /etc/init.d/php-fpm reload 重載配置文件
  • 如圖,這是慢日誌的記錄信息
  • 在以前的 phpinfo.php 文件裏面添加了一個sleep()函數休眠了幾秒
  • 配置文件裏面也解除了禁止使用 phpinfo() 函數的限制
  • 訪問這個文件,這個文件執行的時間超過了 1秒
  • 因此就被記錄到慢日誌裏面了
  • 信息包含執行慢的文件路徑,哪一行代碼慢,均可以看到
  • 總之,通常來講,不要使用 phpinfo的文件來測試
  • 慢日誌能夠幫助排查網站慢的緣由

php-fpm配置4

  • open_basedir 參數是定義 php-fpm 服務的活動範圍的
  • cd /usr/local/php-fpm/etc
  • vi php.ini 編輯php的文件
  • 如圖,輸入代碼 open_basedir = /home:/root
  • 這樣就在 php 配置文件裏面定義了 open_basedir 參數了
  • 這裏的意思所示 /home 目錄 和 /root 目錄就是php-fpm服務的活動範圍
  • 在這兩個目錄內的文件php-fpm服務是能夠訪問的
  • 其它目錄內的文件,php-fpm服務就不能夠訪問了
  • 能夠定義多個可訪問的目錄,使用冒號 : 進行分隔
  • 好比 /home:/root 這兩個目錄就是使用 : 進行分隔的
  • 若是不定義這個參數,只要權限足夠,php-fpm服務就均可以訪問
  • 若是定義了這個參數,那麼php-fpm服務就只能訪問定義的目錄內的文件
  • 若是有兩個網站的目錄,能夠把兩個網站路徑都定義到 open_basedir 參數裏面
  • 這樣 php-fpm 就能夠訪問這兩個網站的內容了
  • 可是這樣會有安全隱患,若是其中一個網站被黑客攻擊了
  • 由於這兩個網站的路徑都設置在同一個 open_basedir 參數裏面
  • 黑客就能夠經過被攻擊的網站影響到另一個網站
  • 因此通常都不會使用這樣把多個網站路徑設置在同一個 open_basedir 裏面的設置
  • 爲了不安全隱患,可使用另一種方法
  • php.ini 文件裏面再也不設置 open_basedir 參數
  • cd /usr/local/php-fpm/etc/php-fpm.d/
  • vi www.conf 編輯 php-fpm 的配置文件
  • 以前編輯的是php的配置文件,php-fpm.d 目錄內的是php-fpm服務的配置文件
  • 如圖,輸入這行代碼
  • /data/wwwroot/bbs.aminglinux.cc 是論壇網站的目錄
  • /tmp 是 socket 文件的目錄
  • php_admin_value[open_basedir] 就是 open_basedir 參數
  • 在php-fpm配置文件裏面定義的時候格式是這樣的
  • 這樣定義以後 php-fpm就能夠訪問論壇網站的目錄和socket文件所在的目錄
  • 如圖 grep -v '^;' www.conf
  • grep 是過濾關鍵字,-v 表示取反
  • '^;' 這個是關鍵字
  • 首先 ^ 符號表示 以...開頭
  • 因此 ^; 就表示 以 ; 開頭
  • 因此關鍵字 '^;' 就表示 以 ; 開頭的行
  • grep '^;' www.conf 就會把 以 ; 開頭的行篩選出來
  • 可是 -v 表示取反,因此 以 ; 開頭的行就不會篩選出來
  • 取反就是反面的結果,不以 ; 開頭的行會被篩選出來
  • 可是這樣的話仍是很差看,由於原文裏面有不少空行
  • 空行也是 不以 ; 開頭的
  • 爲了簡潔易讀,應該把 空行 也過濾掉才行
  • 因此使用管道符 | 把前面的過濾結果再過濾一遍
  • 這裏的關鍵字 '^$' 就表示空行
  • 符號 ^ 表示開頭,$ 表示結尾
  • 組合 ^$ 表示開頭結尾之間什麼都沒有,也就是空行
  • grep '^$' 會把空行篩選出來
  • 使用 -v 取反,就能夠把非空的行篩選出來,空行過濾掉
  • 如圖,這是過濾出來的結果
  • 而後把過濾的結果複製一下
  • 粘貼到 第二個 php-fpm 配置文件裏面去
  • 目前第二個php-fpm 配置文件還不存在
  • 因此使用 vi 編輯一個空文件
  • 把複製的內容粘貼進去,這樣就有第二個配置文件了
  • 而後把 listen 後面的路徑修改一下,修改成第二個網站的socket文件路徑
  • slowlog 和 error_log 參數後面的路徑能夠與第一個網站一致
  • 這樣兩個網站的慢日誌和錯誤日誌就會寫入同一個日誌文件裏面
  • 也能夠設置爲不一樣的文件,這樣兩個網站的日誌就單獨寫入定義的日誌文件
  • 而後 open_basedir 後面的路徑修改成第二個網站須要使用的目錄路徑
  • 經過定義兩個單獨的 php-fpm 配置文件
  • 定義了兩個單獨的 open_basedir
  • 兩個網站的配置互相不干擾
  • 一個網站就算被黑客攻擊了,也不會干擾到另一個網站
  • 如圖,兩個配置文件的名稱也須要修改一下,不可以相同
  • 也就是 pool name
  • nginx 裏面的網站配置文件使用的 socket 文件路徑名稱也修改成一致的
  • php-fpm 重啓一下,nginx 重載一下
  • 如圖,bbs pool配置文件有兩個子進程
  • blog pool 配置文件也有兩個子進程
  • 經過設置兩個單獨的pool配置文件
  • 這兩個網站使用的pool進程分開的
  • 若是不分開,其中一方出現問題,會致使另外一個網站也用不了
  • 由於你們使用同一個 pool
  • 如今兩個網站使用的 pool 是獨立分開的
  • 其中一方出現問題就不會影響到另外一方
  • 生產環境中, display_error 的值應該設置爲 off
  • 不少參數既能夠在 php.ini 裏面定義,也能夠在 php-fpm配置文件裏面定義
  • 若是某一個參數,既在 php.ini 裏面定義了,又在 php-fpm配置文件裏面定義了
  • 以 php-fpm配置文件裏面定義的爲主
  • 兩個文件同時定義同一個參數,php.ini 文件優先級要低一些
  • 在 php-fpm 配置文件裏面
  • php_admin_value[xxx] 後面的值通常是 一串字符串,好比文件路徑之類的
  • php_admin_flag[xxx] 後面的值通常是 on,off 這樣的

mariadb密碼重置

  • vi /etc/my.cnf 編輯 mariadb 配置文件
  • 若是忘記了數據庫的 root 密碼
  • 想修改一個新的 root 密碼
  • 就編輯數據庫的配置文件
  • 在配置文件裏面添加一行代碼
  • 如圖, skip-grant
  • 保存退出
  • /etc/init.d/mysqld restart 重啓數據庫
  • 使用 mysql -uroot 就能夠不須要密碼直接root登陸數據庫了
  • 進入數據庫後
  • 首先切換到 mysql 數據庫,使用 use mysql
  • 而後使用 desc user; 查看 user 表全部字段
  • 如圖,authentication_string 字段是保存密碼的字段
  • 因此要修改密碼,就須要修改這個字段裏面的內容
  • update user set authentication_string=password("aming") where user='root';
  • 後面也能夠加上 and host='localhost' 這樣就只更新 localhost 的 root 用戶
  • 若是不加 host 那麼就更新全部的 root 用戶
  • 字符串 "aming" 就是新的密碼,user='root' 表示更新 root用戶的密碼
  • 更新完成後退出數據庫
  • 把 /etc/my.cnf 文件裏面添加的 skip-grant 代碼刪除
  • 保存退出
  • 而後 /etc/init.d/mysqld restart 重啓數據庫
  • 而後就可使用新的密碼登陸數據庫了
  • user+host 纔是一個用戶的惟一標識
  • 好比 root+localhost 和 root+aming01 並非同一個用戶
  • 除了 root 用戶密碼,這個方法也能夠用來修改普通用戶的密碼
  • mariadb 舊的版本,密碼保存的字段是在 password
  • 新的版本才使用了 authentication_string 字段
  • mysql 5.7 之前的版本使用的是 password
  • 5.7 之後的版本就是使用 authentication_string
  • mariadb 跟 mysql 版本是對應的

mariadb慢查詢日誌

  • 慢查詢日誌的目的是爲了分析數據庫的瓶頸點
  • 能夠知道哪一個查詢語句的查詢時間特別慢
  • 首先,進入數據庫
  • 執行 show variables like 'slow%';
  • 符號 % 是通配符,表示全部以 slow 開頭的
  • 如圖,slow_query_log 和 log_file 是跟慢日誌有關的參數
  • 要開啓慢日誌,要把 slow_query_log 從 off 設置爲 on
  • log_file 後面的值是 慢日誌的文件名稱
  • 如圖,搜索 datadir 字段
  • 能夠看到目錄是 /data/mysql/
  • 這個目錄是在 /etc/my.cnf 裏面設置的
  • 慢日誌的存放位置也在這個目錄裏面
  • 如圖,查找 long 開頭的字段
  • 找到 long_query_time 字段
  • 後面的值表示 10 秒
  • 意思是執行超過 10 秒的語句就是慢的語句
  • 會被記錄到慢日誌裏面
  • 不過通常設置爲 2 秒比較好,執行須要 2 秒的語句已經很慢了
  • vi /etc/my.cnf 編輯配置文件
  • 如圖,添加三行代碼
  • 第一行 slow_query_log = ON 這樣就是設置慢日誌爲打開狀態
  • 第二行 slow_query_log_file 後面設置的是慢日誌的絕對路徑
  • 慢日誌文件名能夠自定義
  • 第三行 long_query_time = 2 就是執行超過 2 秒的語句就會被記錄到慢日誌
  • 而後保存退出
  • 而後 /etc/init.d/mysqld restart 重啓數據庫
  • 而後進入數據庫
  • 模擬一個慢查詢
  • 執行 select sleep(5); 這樣模擬一個5秒的查詢
  • 如圖,查看慢日誌
  • 能夠看到,執行慢的語句是什麼,日誌有顯示
  • query_time 就是這個語句的執行時間
  • 還有一些別的信息
  • 如圖,還有兩個命令 show processlist;show full processlist;
  • 這個命令是查看數據庫正在運行的線程
  • 就是數據庫有什麼語句正在執行
  • 線程若是有不少,就表示數據庫很繁忙,也表示數據庫可能會很慢
  • 這兩個命令的區別
  • 若是有一個sql語句特別的長
  • 那麼 show processlist 只能顯示一部分sql語句
  • show full processlist 能夠顯示所有 sql語句
  • 如圖,還有一個參數 -e
  • 使用 -e 參數,後面接 "show processlist"
  • 這樣就能夠不進入數據庫的狀況下
  • 執行 show processlist 命令
  • 參數 -e 後面接 命令
  • 這樣就能夠不進入數據庫的狀況下執行-e後面的命令
相關文章
相關標籤/搜索