2 建立连接

📅 2026/6/24 12:24:14
2 建立连接
1. 连接器池化技术对于访问数据库来说建立连接的代价是比较昂贵的因为每个连接对应一个用来交互的线程频繁的创建关闭连接比较耗费资源有必要建立数据库连接池以提高访问的性能连接建立 TCP 以后需要做权限验证验证成功后可以进行执行 SQL。如果这时管理员账号对这个用户的权限做了修改也不会影响已经存在连接的权限只有再新建的连接才会使用新的权限设置MySQL 服务器可以同时和多个客户端进行交互所以要保证每个连接会话的隔离性事务机制整体的执行流程2. 权限信息grant 语句会同时修改数据表和内存判断权限的时候使用的是内存数据flush privileges 语句本身会用数据表磁盘的数据重建一份内存权限数据所以在权限数据可能存在不一致的情况下使用这种不一致往往是由于直接用 DML 语句操作系统权限表导致的所以尽量不要使用这类语句3. 连接状态客户端如果长时间没有操作连接器就会自动断开时间是由参数 wait_timeout 控制的默认值是 8 小时。如果在连接被断开之后客户端再次发送请求的话就会收到一个错误提醒Lost connection to MySQL server during query数据库里面长连接是指连接成功后如果客户端持续有请求则一直使用同一个连接短连接则是指每次执行完很少的几次查询就断开连接下次查询再重新建立一个为了减少连接的创建推荐使用长连接但是过多的长连接会造成 OOM解决方案定期断开长连接使用一段时间或者程序里面判断执行过一个占用内存的大查询后断开连接之后要查询再重连KILLCONNECTIONidMySQL5.7版本可以在每次执行一个比较大的操作后通过执行 mysql_reset_connection 来重新初始化连接资源这个过程不需要重连和重新做权限验证但是会将连接恢复到刚刚创建完时的状态SHOW PROCESSLIST查看当前 MySQL 在进行的线程可以实时地查看 SQL 的执行情况其中的 Command 列显示为 Sleep 的这一行就表示现在系统里面有一个空闲连接Sending data 状态表示 MySQL 线程开始访问数据行并把结果返回给客户端而不仅仅只是返回给客户端是处于执行器过程中的任意阶段。由于在 Sending data 状态下MySQL 线程需要做大量磁盘读取操作所以是整个查询中耗时最长的状态