linux-deploy 安装MySQL,报错解决 ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause'

报错:

linux-deploy 安装MySQL,报错解决 ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause'
 ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause'

很诡异的错误。。。能正常启动和登入
error.log 中没有错误提示

查找原因:

启用一般日志
vi /etc/mysql/mysql.conf.d/mysqld.cnf
将general_log=1 注释去掉 
linux-deploy 安装MySQL,报错解决 ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause'

登入mysql  
命令 show variables like 'general%'
查看一般日志已启用,我的已被关闭请无视,并获得日志保存地址
linux-deploy 安装MySQL,报错解决 ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause'
查看一般日志:
vi /var/lib/mysql/localhost.log
看到如下命令:
 SELECT count(*) FROM mysql.user WHERE user='root' and password=''

linux-deploy 安装MySQL,报错解决 ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause'
这也解释了为什么会报这个错

原因分析:这是在做启动mysql的一个root账户检查,但是由于5.7以后mysql.user表中的password字段被修改为了authentication_string,但是这个sql语句并没有更改,所以报错。。。。

所以解决办法就是找到这个sql语句,将其中的password 改为authentication_string 就可以了


方法:
打开配置文件下的debian-start
vi /etc/mysql/debian-start
如图:

linux-deploy 安装MySQL,报错解决 ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause'

check_root_accounts
其中一个方法为,将该命令注释掉, 但是不完美,,
我们的目的是修改sql 语句,该文件中有个source 文件
用vi 打开该source文件

vi /usr/share/mysql/debian-start.inc.sh

找到check_root_accounts 这个函数

linux-deploy 安装MySQL,报错解决 ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause'

将password 改为authentication_string

我这是已修改过的
保存退出,
重启后再也没有error 1504了
而且从general日志中也可以看到,
如果不修该语句,check_for_crashed_tables,也不会执行


最后别忘了关闭general日志,将general_log=1 注释掉即可

end!