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后面的命令
相关文章
相关标签/搜索