1. 无法远程访问mysql
远程访问必须同时满足以下条件: 1.检查mysql用户权限,保证是 username @ %,也就是允许从所有主机访问。root一般默认为localhost访问,所以可以新建一个权限受限的用户,并允许其从远程登录。 2.mysqld服务必须监听所有ip,控制台执行sudo netstat -anolp,输出如下:
其中,:::3306 表示mysqld正在从所有地址监听3306端口,这是对的,不能是只从127.0.0.1上监听。 3.客户端连接时,端口要和第2条中的mysqld监听端口保持一致。 4.重点来了。阿里云轻量应用服务器中防火墙要让3306通过,同时如果你使用了宝塔面板,开启了防火墙,也要设置允许3306入站。如下图:
这两个防火墙必须同时开启。
2. 数据库插入时,遇到DEFINER不匹配的错误
错误内容:
errstr: SQLSTATE[HY000]: General error: 1449 The user specified as a definer ('user'@'%') does not exist
MySQL中的用户权限由用户名+登录主机+mysql数据库访问权限组成。同一个用户名,允许的登录主机不一样,那么mysql会认为权限检查不匹配。所以上面的提示很明确了,没找到 user @ % 这个用户,解决办法是新建一个具有这样权限的用户。如果不想新建,那么可以去查一下数据库中有哪些视图,触发器,存储过程是被这个权限的用户定义的,具体命令可以问一下AI。比如:
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS
WHERE DEFINER = 'username@hostname';
找到以后,在phpAdmin中可以很容易修改为你想要设置的用户,以后就不会报错了。