今天遇到一个MySql client 无法连接的问题,错误是说在init-connect执行失败,找了好长时间,一开始以为是权限问题。后来在网上查询资料,原因是因为设置了 connect-init 的环境变量,作用是用来给SQL审计表(也就是自己指定的一张表)里面保存一条用户的登录记录,这个步骤出了问题。
每次使用帐号登录到mysql客户端,使用任何一条mysq指令,就会立即断开连接,使用root用户登录后,使用下面的命令来查看是否有设置审计功能,后面一条sql是用来设置变量。
mysql> show variables like 'init_connect%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| init_connect | |
+---------------+-------+
1 row in set (0.00 sec
mysql> set global init_connect='insert into db_monitor.accesslog(thread_id,log_time,localname,matchname) values(connection_id(),now(),user(),current_user());';
查看后,我发现是因为insert语句给定的数据库名称不存在,重新修改为正确的数据库名称并给用户设置对应的insert权限后,链接就正常了。