记一次宝塔运维MySQL 商城报错处理 Syntax error or access violation: 1143 SELECT command denied to user ''@127.0.0.1

由于必须必须使用mysql:5.7,但是服务器上已经安装mysql:5.6,此时已经占用3306端口。

此时方案是安装mysql:5.7,然后将端口转发3307。

 

首先安装Docker,再获取mysql:5.7镜像。

docker pull mysql:5.7

然后执行

docker run -d -p 3306:3307 --privileged=true  -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

完成后,再次打开系统后台,爆出第一个错

this is incompatible with sql_mode=only_full_group_by 

看样子应该是需要修改mysql的sql-mode.修改配置文件,重启mysql即可

执行

docker exec -ti {容器ID} /bin/bash   进入容器

docker exec -ti mysql /bin/bash

yum install vim 安装vim

vim /etc/my.cnf

 

在 [mysqld] 下添加

sql_mode={你想要的sql_mode,可以先用 select @@sql_mode 查询出现有的sql_mode 去掉你不想要的,然后复制进来即可}

sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 

处理这些问题,最后发现最难解决的问题。

Syntax error or access violation: 1143 SELECT command denied to user ''@127.0.0.1

 

起初看这个问题,应该是此用户没有权限。这样,我们创建这个用户,然后赋予权限即可。

进入容器后,进入mysql

mysql -u root -p

输入密码 

 

# 创建一个用户名为root,密码为 123456 的用户。

create user 'root'@'%' identified by '123456';

 

这次我们执行这个为空的用户,为下。这个%为外网也可访问的用户

create user ''@'%' identified by '123456';

 

# 使root用户获得所有权限

grant all privileges on *.* to 'root'@'%';

 

这次我们执行

grant all privileges on *.* to ''@'%';

# 刷新授权才会生效

flush privileges;

 

完成后,发现系统还是报错。

 

最后使用了一些魔法,终于找到问题。

解决方案如下:

您在此特定模式(例如视图)中定义了一个对象,其中 DEFINER 设置为匿名用户,并且该用户没有执行和提供状态信息的必要权限。

关键词:视图,于是登录navicat premium,查看视图。的确爆出同样的错误。
但是此时是有指定的用户名的。
SELECT command denied to user 'aidb'@127.0.0.1
于是创建该用户即可
create user 'aidb'@'%' identified by '123456';

grant all privileges on *.* to 'aidb'@'%';

 

大工告成。