来源: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";