解决 PHP 7.2.8 + MySQL 8.0.12 连接失败的问题

今天花3个小时解决了一个升级 PHP + MySQL 导致的连接问题,最后用 caching_sha2_password 插件解决的。

这两天又反复遇到这个问题,先写解决方案:

1. 使用 caching_sha2_password  插件

修改用户密码,并且用插件生成,可以解决 WordPress 的问题。

ALTER USER 'user'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

2. 修改 my.cnf,使用原生密码

使用 Laravel + MySQL 8.0 的时候,遇到

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

修改 /etc/mysql/my.cnf (我是 Ubuntu 16.04),添加下面一行:

[mysqld]
default_authentication_plugin= mysql_native_password

然后重置密码:

ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
继续阅读“解决 PHP 7.2.8 + MySQL 8.0.12 连接失败的问题”

Failed to start php-fpm.service: Unit php-fpm.service is masked.

升级服务器到 Ubuntu 18.04 后,php 的源也升级到 7.2,此时 php7.1 的一些模块已经没了,所以要换用 7.2 的功能。

周末手一抖把服务器从 17.10 升级到了 18.04,然后博客就挂掉了。

根据提示信息,nginx 应该正常工作,问题多半出在 PHP 上。service --status-all 之后,果然 php7.1-fpm 没有启动。然后照常 service php7.1-fpm start,咦,奇怪,报错了:

Failed to start php7.1-fpm.service: Unit php7.1-fpm.service is masked.

换用 service php-fpm start 也一样,区别就是 service 名字不太一样。然后 Google 之,没找到很靠谱的说法,但是找到一个类似的情况,发生于使用 do-release-upgrade 升级到 16.04 时,php5-fpm 启动不了,报类似的错误,解决方案是升级到 php7。

如此一来我也试试好了,因为直接 apt install php-fpm 会解析出来 php7.2,所以我尝试 service php7.2-fpm start,果然可以。既然如此,干脆升级到 7.2 好了,反正我也没啥特殊要求。

于是修改站点配置文件,把 php 接口指向 7.2 的 socket,然后安装几个欠缺的模块,终于又把博客跑起来了。

上 HTTPS

现在工具链如此成熟,上 https 简直容易到死。

为啥

  1. 更安全。现在经常在公共场合工作,如果登录博客走 http,太不安全。
  2. 更稳定。国内运营商劫持简直丧心病狂,只能 https 解燃眉之急。
  3. 更有逼格。好歹是个工作十几年的老油条,自己博客连个 https 都没,浏览器一直报告“不安全”,看着太低端。

怎么上

简直容易到死。我之所以选在这个时间上 https,就是想等工具链成熟。现在何止成熟,简直傻瓜。

  1. 免费证书有好几家,我选择 Let’s Encrypt,无他,他们家名字好记。
  2. 进入官网,选择 “Get Started” 进入下一页
  3. 简单阅读一下,他们建议使用命令行工具 Certbot
  4. 听人劝吃饱饭,那就用,进入官网,选择 Software -> Nginx,System -> Ubuntu 17.04,自动跳转到使用步骤。
  5. 然后安装 Certbot
  6. certbot --nginx(其实不带参数也行,它会自动检查),启动配置向导,跟着一步一步来。它会自动配置证书、自动修改 nginx、还可以更新证书,基本上一路回车就行。
  7. 修改 /etc/crontab,配置自动更新。按理说证书有效期为90天,差不多3个月更新就行。然而 crontab 只能按月配置,这样算起来一年有好几天会出问题,所以我干脆配置奇数月的第一天更新。

问题

  1. 七牛云需要独立的证书,申请中。
  2. 友言也挂了,看来要用回 WordPress 自己的评论,或者干脆 Disqus。

Ubuntu 16.04 搭建 LNMP 开发环境

根据软件版本变化不断更新,如何在 Ubuntu 上搭建 LNMP 环境,以及可能遇到的坑,以及如何进行安全性设置。作为本博客第一篇收费文章,看能不能收到钱。

前天帮人配了台机器,未来可能还要帮人配。在学会用 Docker 之前,先写一篇记录下怎么搭建环境吧。

这篇收费!¥4.99,请阅后自觉打钱。

继续阅读“Ubuntu 16.04 搭建 LNMP 开发环境”

PHP通过Sql生成带特定索引的数组

虽不明,但觉厉。

不明白原理,从别人代码中看到的,蛮好用,不过似乎性能不好:

SELECT id, sum(rmb) AS rmb, sum(device) AS device
FROM log_table
WHERE date>'2012-10-20'
GROUP BY id

这样一段Sql,用PHP自带的pdo这样请求:

$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE|PDO::FETCH_GROUP);

可以得到一个数组,使用sql中第一个字段也就是id为索引,每个元素为一个含两个属性(rmb, device)的对象。换成json写法大概是这样:

// 以前
[{id: 1, rmb: 1, device: 1}, {id: 2, rmb: 2, device:2}]

// 现在
{'1': {rmb: 1, device: 1}, '2': {rmb: 2, device: 2}}

这样再操作会方便很多。

浅谈Git在Web部署上的运用

近期尝试在服务器上实现Git部署方式,发现还蛮简单,效果也不错,写篇日志记录下。

Git是个好东西自不用说,对比SVN来,它有以下好处:

  1. 分支操作速度快,便于制定开发流程
  2. 每个节点都是完整的代码库,可以不受中心版本库的制约
  3. 使用开源类库框架一样可以随心所欲修改并且进行版本管理

做Web开发的时候,我一直想用Git进行部署。因为之前要么FTP,要么直接在服务器上修改,都会产生各种问题。最近尝试了下,发现还挺简单,记录下来。

继续阅读“浅谈Git在Web部署上的运用”

Ubuntu下使用Tasksel安装LAMP

做个笔记,在Ubuntu下使用tasksel安装LAMP。环境是Virtual Box + Ubuntu 11.10 + 10G硬盘 + 1G内存 + 无限CPU。

最近开始学习搞服务器,各种不会,哎呀,学习的快感还满足的。

做个笔记,在Ubuntu下使用tasksel安装LAMP。环境是Virtual Box + Ubuntu 11.10 + 10G硬盘 + 1G内存 + 无限CPU。

继续阅读“Ubuntu下使用Tasksel安装LAMP”