记一次宝塔运维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';
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'@'%';
大工告成。