來源:https://blog.csdn.net/Powerful_Fyphp
php-fpm主配置文件路徑:/usr/local/php-fpm/etc/php-fpm.confmysql
#位於安裝php安裝目錄下的etc/目錄中,該文件中最後一行將配置文件指向:include=/usr/local/php-fpm/etc/php-fpm.d/*.conflinux
php-fpm子配置文件路徑:/usr/local/php-fpm/etc/php-fpm.d/www.confnginx
#php全部配置由子配置文件定義sql
php-fpm配置文件www.conf介紹:數據庫
1.定義進程pool名字:安全
在查看php進程時顯示:服務器
2.listen:指監聽的地址與端口curl
與nginx配置文件中對應:socket
3.修改listen監聽內容爲socket文件:
將listen.mode對應的默認權限0660修改成0666:
修改nginx配置文件爲socket文件路徑:
重載php-fpm便可生成socket文件:
重載nginx:
[root@linux ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@linux ~]# nginx -s reload
驗證:
[root@linux ~]# curl -x127.0.0.1:80 www.blog.com -I HTTP/1.1 200 OK
#http狀態碼200,成功
4.php進程相關的配置:
#master:主進程 www:子進程
pm = dynamic 動態模式(子進程不固定,根據實際需求動態增減) pm.max_children = 5 最大進程數(最多容許多少個子進程存在) pm.start_servers = 2 啓動php服務時,默認啓動2個子進程 pm.min_spare_servers = 1 空閒時,最少不能少於幾個子進程 pm.max_spare_servers = 3 空閒時,最多不能多於幾個子進程 pm.max_requests = 500 每一個子進程最多處理多少個請求(達到500後,子進程會本身結束掉,避免進程一直存在致使內存溢出)
5.php網站錯誤日誌相關的配置:
php_flag[display_errors] = off (默認關閉,on開啓,錯誤信息會顯示在網頁上) php_admin_value[error_log] = /var/log/php.www.log 指定錯誤日誌路徑 php_admin_flag[log_errors] = on 錯誤日誌開關 php_admin_value[error_reporting] = E_ALL 錯誤日誌級別(記錄全部信息) #須要手動建立日誌文件:touch /var/log/php.www.log ,chmod 777 !$
6.php慢查詢日誌slowlog:
記錄執行時間較長的php腳本日誌,能夠用於分析php性能問題 slowlog = /var/log/php.slow 定義慢查詢日誌 request_slowlog_timeout = 3 定義超時時間,將執行時間大於3秒的php腳本信息記錄到日誌中
7.限制php服務的受權目錄:
在php.ini文件中定義:open_basedir = /data/www/www.test.com:/tmp 在php-fpm中定義,編輯www.conf文件: php_admin_value[open_basedir] = /data/www/www.test.com:/tmp #當配置了受權目錄後,php服務就只有受權目錄的權限,如該服務器有多個網站,受權多個網站目錄便可,但該配置是針對全部網站進行配置,當單個網站有被攻擊時,其他網站也會有危險,因此須要在php-fpm配置文件中定義多個pool來單獨設置某個網站
8.php-fpm中配置多個pool:
過濾www.conf配置文件中的註釋行和空行:
[root@linux ~]# grep -v '^;' /usr/local/php-fpm/etc/php-fpm.d/www.conf | grep -v '^$'
#複製輸出的配置內容
定義第一個網站www.test1.com的配置文件:vi test1.conf,添加更改複製的內容
[test1] user = php-fpm group = php-fpm listen = /tmp/test1.socket listen.mode = 0666 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 slowlog = /var/log/php.slow request_slowlog_timeout = 1 php_flag[display_errors] = off php_admin_value[error_log] = /var/log/php.www.log php_admin_flag[log_errors] = on php_admin_value[error_reporting] = E_ALL php_admin_value[open_basedir] = /data/www/www.test1.com:/tmp
定義第二個網站www.test2.com的配置文件:vi test2.conf,添加更改複製的內容
[test2] user = php-fpm group = php-fpm listen = /tmp/test2.socket listen.mode = 0666 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 slowlog = /var/log/php.slow request_slowlog_timeout = 1 php_flag[display_errors] = off php_admin_value[error_log] = /var/log/php.www.log php_admin_flag[log_errors] = on php_admin_value[error_reporting] = E_ALL php_admin_value[open_basedir] = /data/www/www.test2.com:/tmp
#須要注意listen監聽的地址端口或socket文件不能相同,接下來便可根據服務器上的單個網站來設定不一樣的受權目錄等各類配置
補充: 1.php.ini中的配置能夠經過php-fpm的配置文件來設置: 例: php.ini中log_errors = on →php-fpm中:php_admin_flag[log_errors] php.ini中open_basedir = /xxx/xxx →php-fpm中:php_admin_value[open_basedir] = /xxx/xxx #開關類的配置php-fpm中用php_admin_flag[],值之類的配置用php_admin_value[] 當php.ini中的配置與php-fpm的配置文件中的配置同時存時,php-fpm會覆蓋php.ini
2.查看php.ini文件路徑: 1) /usr/local/php-fpm/bin/php -i |head 2)phpinfo: 在網站目錄下建立phpinfo.php文件,添加以下內容:
<?php phpinfo(); ?>
重啓php-fpm服務後訪問:域名/phpinfo.php便可顯示全部php-fpm配置,但該操做存在安全隱患,能夠編輯php.ini文件修改disable_functions = phpinfo ,禁掉該頁面或直接在非測試環境中刪掉phpinfo.php文件
知道密碼的狀況下修改root密碼:
[root@linux ~]# mysqladmin -uroot -p123456 password "test123"
#將原密碼123456修改成test123
不知道root密碼的狀況下修改密碼:
1.編輯/etc/my.cnf:
[root@linux ~]# vi /etc/my.cnf
2.在[mysqld]下添加skip-grant:
3.重啓mysql後便可經過mysql -uroot方式登陸:
[root@linux ~]# service mysqld restart Restarting mysqld (via systemctl): [ 肯定 ] [root@linux ~]# mysql -uroot MariaDB [(none)]>
4.進入mysql庫修改user表的authentication_string字段便可:
MariaDB [(none)]> use mysql; Database changed MariaDB [mysql]> update user set authentication_string=password("123456") where user='root'; Query OK, 4 rows affected (0.001 sec) Rows matched: 4 Changed: 4 Warnings: 0
#將root用戶的密碼修改成123456,如需指定host,加上and host='xxx'便可 注意: 在較高版本的mysql/mariaDB中,root用戶密碼存放於authentication_string字段,普通用戶存放於Password字段 較老版本的mysql/mariaDB中,全部密碼存放於Password字段
5.退出mysql,刪除/etc/my.cnf中添加的skip-grant重啓mysql服務便可登陸:
[root@linux ~]# mysql -uroot -p123456 MariaDB [(none)]>
MySQL/MariaDB慢查詢日誌配置:
#慢查詢日誌用於分析數據庫的瓶頸點
查看慢查詢日誌開關:
MariaDB [(none)]> show variables like 'slow_query%'; +---------------------+----------------+ | Variable_name | Value | +---------------------+----------------+ | slow_query_log | OFF | | slow_query_log_file | linux-slow.log | +---------------------+----------------+ 2 rows in set (0.001 sec)
#慢查詢日誌狀態爲關,慢查詢日誌文件名:linux-slow.log
查看慢查詢日誌路徑:
MariaDB [(none)]> show variables like 'datadir'; +---------------+--------------+ | Variable_name | Value | +---------------+--------------+ | datadir | /data/mysql/ | +---------------+--------------+ 1 row in set (0.001 sec)
查看慢查詢日誌超時時間:
MariaDB [(none)]> show variables like 'long%'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.001 sec)
#執行超過10秒是sql語句將記錄到慢查詢日誌中
編輯etc/my.cnf添加以下內容配置mysql慢查詢日誌:
slow_query_log = ON slow_query_log_file = /data/mysql/linux-slow.log long_query_time = 3
#定義慢查詢日誌狀態爲ON以及日誌路徑,超時時間3秒
重啓mysql服務:
[root@linux ~]# service mysqld restart Restarting mysqld (via systemctl): [ 肯定 ]
測試:
MariaDB [(none)]> select sleep(6); +----------+ | sleep(6) | +----------+ | 0 | +----------+ 1 row in set (6.008 sec)
查看慢查詢日誌:
[root@linux ~]# cat /data/mysql/linux-slow.log /usr/local/mysql/bin/mysqld, Version: 10.3.18-MariaDB-log (MariaDB Server). started with: Tcp port: 0 Unix socket: /tmp/mysql.sock Time Id Command Argument # Time: 191022 21:27:04 # User@Host: root[root] @ localhost [] # Thread_id: 10 Schema: QC_hit: No # Query_time: 6.007324 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 # Rows_affected: 0 Bytes_sent: 63 SET timestamp=1571750824; select sleep(6);
#日誌會記錄執行時間Query_time:6秒和執行的語句:select sleep(6);
查看mysql隊列:
MariaDB [(none)]> show processlist; +----+-------------+-----------+------+---------+------+--------------------------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+-------------+-----------+------+---------+------+--------------------------+------------------+----------+ | 1 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 | | 2 | system user | | NULL | Daemon | NULL | InnoDB purge coordinator | NULL | 0.000 | | 3 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 | | 4 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 | | 5 | system user | | NULL | Daemon | NULL | InnoDB shutdown handler | NULL | 0.000 | | 11 | root | localhost | NULL | Query | 0 | Init | show processlist | 0.000 | +----+-------------+-----------+------+---------+------+--------------------------+------------------+----------+ 6 rows in set (0.000 sec)
#查看正在執行的sql隊列,相似在操做系統中查看進程,info列顯示具體sql語句,如顯示不完整可以使用 show full processlist;
不登陸數據庫查看sql隊列加上-e參數:
mysql -uroot -p123456 -e "show processlist";