mysql数据库中有一个参数--init_connect
根据文档描述该参数是在非super privilege用户连接数据库时隐式执行的动作(也就是sql语句)。
比如:
[mysqld] init_connect='SET autocommit=0'表示,一般用户连接数据库时隐式执行“SET autocommit=0”这条语句。
并且还说明,服务器会丢弃语句执行产生的结果。
而且,如果该语句的语法有错误,那么一般用户连接数据库会因此而失败。
但我测试了一下,用户是可以连接数据库的,只是执行任何语句都会报错:
(root@192.168.1.77)[(none)]> select 1;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 7
Current database: *** NONE ***
ERROR 1184 (08S01): Aborted connection 7 to db: 'unconnected' user: 'root' host: 'cmsTestLocal' (init_connect command failed)
(root@192.168.1.77)[(none)]>
也就是说,该参数定义的语句是用户建立连接之后,执行第一个语句之前隐式执行的。
并且语法错误的话,确实可以使客户端被动断开和数据库的连接。