【自学java笔记#第四十一天#】mabatis day03 bug记录

1、2003 can't connect to mysql 10051

问题简述:虚拟机无法连接到网络,导致Navicat无法远程连接到mysql数据

解决方案:将虚拟机的网络适配器更改为-->其他模式(NAT模式等)-->再改回桥接模式

不用重启,立马解决问题

2、进入虚拟机端的数据库,报错:access denied for user root@localhost

解决办法:不用命令:mysql -u root -p;

直接用命令:mysql -u -p成功进入数据库:

 3、重新运行昨天已测试完成的程序,eclipse又报错了:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

 尝试了网友们给出的各种建议:

①更改mysql数据库的wait_timeout和interactive_timeout两个变量的值;

ysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set wait_timeout=1814400;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'wait_timeout';
+---------------+---------+
| Variable_name | Value   |
+---------------+---------+
| wait_timeout  | 1814400 |
+---------------+---------+
1 row in set (0.02 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'interactive_timeout';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2
Current database: *** NONE ***

+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
+---------------------+-------+
1 row in set (0.00 sec)

mysql> set interactive_timeout=604800;
Query OK, 0 rows affected (0.00 sec)

mysql> set global interactive_timeout=604800;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'interactive_timeout';
+---------------------+--------+
| Variable_name       | Value  |
+---------------------+--------+
| interactive_timeout | 604800 |
+---------------------+--------+
1 row in set (0.00 sec)

②重启mysql数据库;

在jdbc连接url的配置中,你可以附上“autoReconnect=true”,但这仅对mysql5以前的版本起作用。 

我们可以将数据库连接池的 validateQuery、testOnBorrow(testOnReturn)打开,这样在 每次从连接池中取出且准备使用之前(或者使用完且在放入连接池之前)先测试下当前使用是否好用,如果不好用,系统就会自动destory掉。 
或者testWhileIdle项是设置是否让后台线程定时检查连接池中连接的可用性。

但后两种方法,一个因为版本不符(我的mysql版本是5.1.46),另一个eclipse直接报错说不能设置这样的值而作罢。

完成以上所有的这些步骤之后,还是报最开始一样的错误。

气急攻心的我直接用这个项目的所有数据又新建了另一个项目,程序能正常跑起来。我回过头来再运行这个项目时,发现也能跑起来了。

具体是什么原理我暂时还不清楚,看明天的课程是否会讲解吧!

 

posted @ 2020-05-01 22:34  一只奶鹿  阅读(320)  评论(0)    收藏  举报