数据库连接池与com.mysql.jdbc.exceptions.jdbc4.CommunicationsException异常

来源:互联网 发布:java老版手机游戏 编辑:程序博客网 时间:2024/06/06 13:20

  异常信息如下:

com.ibatis.common.jdbc.exception.NestedSQLException:   --- The error occurred in mit/datamodel/ibatis/person.xml.  --- The error occurred while executing query.  --- Check the select * from person where pID = ?.  --- Check the SQL Statement (preparation failed).  --- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:** BEGIN NESTED EXCEPTION ** com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionMESSAGE: Communications link failureLast packet sent to the server was 18912 ms ago.STACKTRACE:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureLast packet sent to the server was 18912 ms ago.    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)    at java.lang.reflect.Constructor.newInstance(Unknown Source)    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2873)    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2763)    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3299)    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2537)    at com.mysql.jdbc.ConnectionImpl.rollbackNoChecks(ConnectionImpl.java:4668)    at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:4553)    at com.ibatis.common.jdbc.SimpleDataSource.popConnection(SimpleDataSource.java:629)    at com.ibatis.common.jdbc.SimpleDataSource.getConnection(SimpleDataSource.java:222)    at com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransaction.init(JdbcTransaction.java:48)    at com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:89)    at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForObject(GeneralStatement.java:104)    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:566)    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:541)    at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)    at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:83)    at mit.datamodel.dataaccess.CommonDAO.searchForObject(CommonDAO.java:142)    at mit.datamodel.dataaccess.BasicDataAccess.queryObject(BasicDataAccess.java:46)    at mit.datamodel.dataaccess.PersonAccess.queryPatientById(PersonAccess.java:93)    at mit.business.service.PatientManagement.getPatientById(PatientManagement.java:335)    at mit.servlet.PatientServiceInvocation.PatientQuery(PatientServiceInvocation.java:110)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)    at java.lang.reflect.Method.invoke(Unknown Source)    at mit.business.service.BasicService.invokeService(BasicService.java:45)    at mit.servlet.BaseServlet.dispatcher(BaseServlet.java:63)    at mit.servlet.BaseServlet.doPost(BaseServlet.java:49)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)    at java.lang.Thread.run(Unknown Source)Caused by: java.net.SocketTimeoutException: Read timed out    at java.net.SocketInputStream.socketRead0(Native Method)    at java.net.SocketInputStream.read(Unknown Source)    at java.net.SocketInputStream.read(Unknown Source)    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2329)    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2774)    ... 50 more** END NESTED EXCEPTION **at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:185)at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForObject(GeneralStatement.java:104)at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:566)at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:541)at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:83)at mit.datamodel.dataaccess.CommonDAO.searchForObject(CommonDAO.java:142)at mit.datamodel.dataaccess.BasicDataAccess.queryObject(BasicDataAccess.java:46)at mit.datamodel.dataaccess.PersonAccess.queryPatientById(PersonAccess.java:93)at mit.business.service.PatientManagement.getPatientById(PatientManagement.java:335)at mit.servlet.PatientServiceInvocation.PatientQuery(PatientServiceInvocation.java:110)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at mit.business.service.BasicService.invokeService(BasicService.java:45)at mit.servlet.BaseServlet.dispatcher(BaseServlet.java:63)at mit.servlet.BaseServlet.doPost(BaseServlet.java:49)at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Unknown Source)Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:** BEGIN NESTED EXCEPTION ** com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionMESSAGE: Communications link failureLast packet sent to the server was 18912 ms ago.STACKTRACE:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureLast packet sent to the server was 18912 ms ago.    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)    at java.lang.reflect.Constructor.newInstance(Unknown Source)    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2873)    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2763)    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3299)    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2537)    at com.mysql.jdbc.ConnectionImpl.rollbackNoChecks(ConnectionImpl.java:4668)    at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:4553)    at com.ibatis.common.jdbc.SimpleDataSource.popConnection(SimpleDataSource.java:629)    at com.ibatis.common.jdbc.SimpleDataSource.getConnection(SimpleDataSource.java:222)    at com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransaction.init(JdbcTransaction.java:48)    at com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:89)    at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForObject(GeneralStatement.java:104)    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:566)    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:541)    at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)    at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:83)    at mit.datamodel.dataaccess.CommonDAO.searchForObject(CommonDAO.java:142)    at mit.datamodel.dataaccess.BasicDataAccess.queryObject(BasicDataAccess.java:46)    at mit.datamodel.dataaccess.PersonAccess.queryPatientById(PersonAccess.java:93)    at mit.business.service.PatientManagement.getPatientById(PatientManagement.java:335)    at mit.servlet.PatientServiceInvocation.PatientQuery(PatientServiceInvocation.java:110)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)    at java.lang.reflect.Method.invoke(Unknown Source)    at mit.business.service.BasicService.invokeService(BasicService.java:45)    at mit.servlet.BaseServlet.dispatcher(BaseServlet.java:63)    at mit.servlet.BaseServlet.doPost(BaseServlet.java:49)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)    at java.lang.Thread.run(Unknown Source)Caused by: java.net.SocketTimeoutException: Read timed out    at java.net.SocketInputStream.socketRead0(Native Method)    at java.net.SocketInputStream.read(Unknown Source)    at java.net.SocketInputStream.read(Unknown Source)    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2329)    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2774)    ... 50 more** END NESTED EXCEPTION **at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)at java.lang.reflect.Constructor.newInstance(Unknown Source)at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)at com.mysql.jdbc.Util.getInstance(Util.java:381)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:985)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1113)at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4038)at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4004)at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at com.ibatis.common.jdbc.SimpleDataSource$SimplePooledConnection.invoke(SimpleDataSource.java:958)at com.sun.proxy.$Proxy4.prepareStatement(Unknown Source)at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at com.ibatis.common.jdbc.logging.ConnectionLogProxy.invoke(ConnectionLogProxy.java:53)at com.sun.proxy.$Proxy4.prepareStatement(Unknown Source)at com.ibatis.sqlmap.engine.execution.SqlExecutor.prepareStatement(SqlExecutor.java:494)at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:176)at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)... 39 more

  com.ibatis.common.jdbc.exception.NestedSQLException是iBATIS实现的嵌套异常,继承自SQLException。从业务逻辑Service层方法调用开始,沿着异常堆栈跳着跟踪下:

at mit.business.service.PatientManagement.getPatientById(PatientManagement.java:335)at mit.datamodel.dataaccess.CommonDAO.searchForObject(CommonDAO.java:142)at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:83)at com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:89)at com.ibatis.common.jdbc.SimpleDataSource.popConnection(SimpleDataSource.java:629)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2537)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3299)  at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2873)    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2329)    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)    at java.net.SocketInputStream.read(Unknown Source)at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)

  所以最根本的原因是由于数据库连接关闭所以抛出java.net.SocketTimeoutException: Read timed out,调用返回到checkErrorPacket方法,方法中抛出SQLError.createCommunicationsException创建CommunicationsException异常。因为DataSource类型配置的”SIMPLE”,所以获取数据库连接调用SimpleDataSource类的popConnection方法,从连接池空闲链表获取,问题还是出在连接池的使用上。MySQL服务”wait_timeout”默认值是28800s,即意味着如果一个数据库连接的空闲时间超过8个小时,MySQL将自动断开连接,而连接池中并没有校验此连接的有效性而依然持有此连接,当下一次使用此连接时,就会出现com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
  所以解决办法是对症下药,对连接进行有效性监测,更改iBATIS配置文件如下。这个系统使用的人员有限,并发量很小,连接池中最大连接数为5,最大空闲连接数为3就够用了,减少资源浪费。在数据库连接池回收连接时,如果空闲连接数大于等于3则将真正调用conn.getRealConnection().close();关闭此连接,否则使用SimplePooledConnection重新封装连接放入空闲链表中,供下个数据库请求线程申请。

<dataSource type="SIMPLE">    <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>    <property name="JDBC.ConnectionURL" value="jdbc:mysql:xxx?autoReconnect=true"/>    <property name="JDBC.Username" value="root"/>    <property name="JDBC.Password" value="xxx"/>    <!-- 池中最大连接数 -->    <property name="Pool.MaximumActiveConnections" value="8"/>    <!-- 池中最大空闲连接数 -->    <property name="Pool.MaximumIdleConnections" value="3"/>    <!-- 池中,连接被获取的最大时间,当下一个数据库任务申请MySQL连接而无空闲时,连接数已达到    MaximumActiveConnections连接池强制收回超过这个时间限定的连接使用。(毫秒) -->    <property name="Pool.MaximumCheckoutTime" value="60000"/>    <!-- 连接池中无连接可使用时,等待的时间。(毫秒) -->    <property name="Pool.TimeToWait" value="10000"/>    <!-- 连接状态检测语句 -->    <property name="Pool.PingQuery" value="select 1 from user"/>    <!-- 开启状态检测 -->    <property name="Pool.PingEnabled" value="true"/>    <!-- 对持续连接时间超过设定值(毫秒)的连接进行检测,0不检测 -->    <property name="Pool.PingConnectionsOlderThan" value="0"/>    <!-- 对空闲时间超过半小时的连接进行有效性检测 -->    <property name="Pool.PingConnectionsNotUsedFor" value="1800000"/></dataSource>

  延长MySQL wait_timeout变量值可有可无,考虑工作人员放假等时间,设置为2星期,重启MySQL服务时需要重新设置。也可写在配置MySQL配置文件中,但是需要重启MySQL服务,生产环境不现实。
这里写图片描述

0 0
原创粉丝点击