关于用户权限
用户权限是在建立连接后获取的。这意味着用户在获取连接后,管理员对其权限进行修改。该用户在此之前获取到的连接权限是不会更新的。
关于连接
连接完成后,未使用时处于空闲状态。连接长时间处于空闲状态,连接器就会将它自动断开。这个参数由wait_timeout控制,默认为8小时。
数据库长连接是指客户端在获取连接后,持续有请求发生,则一直使用同一个连接。短连接是指每次执行很少的几次查询就断开连接,下次查询再重新建立连接。
建立连接是个比较复杂的操作,通常尽量使用长连接。
使用长连接的问题
mysql在使用过程中,使用的临时内存是管理在连接对象中的。这些资源在连接断开的时候才会被释放。如果长连接累积下来,可能导致占用内存过大,被系统强行杀掉(触发OOM),从现象看则是mysql异常重启。
那么怎么解决这个问题呢?
可以采用两种方案:
- 定期断开长连接。使用一段时间,或者程序判断执行过一个占用内存的大查询后断开连接。
- 使用mysql 5.7及以后版本,执行一个占用内存过大的操作后,通过执行mysql_reset_connection来初始化连接资源。