Я запускаю Ubuntu и в конечном счете пытаюсь подключить Tomcat к своей базе данных MySQL с помощью JDBC.
Это работало ранее, но после перезагрузки экземпляру теперь не удается соединиться.
mysql
командаЯ довольно плохо знаком с этим, и я не уверен, что еще протестировать. Я не знаю, должен ли я заглядывать и т.д./соединяет интерфейсом и если я сделал, что искать. Это странно, потому что это раньше работало, но после перезагрузки это снижается так, я, должно быть, изменил что-то.... :).
Я понимаю, что тайм-аут указывает, что сервер не отвечает, и я предполагаю, что это - потому что запрос на самом деле не проходит. Я установил MySQL через Кв. - добираются и Tomcat вручную.
Процессы MySqld
root@88:/var/log/mysql# ps -ef | grep mysqld
root 21753 1 0 May27 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql 21792 21753 0 May27 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root 21793 21753 0 May27 ? 00:00:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root 21888 13676 0 11:23 pts/1 00:00:00 grep mysqld
Netstat
root@88:/var/log/mysql# netstat -lnp | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 21792/mysqld
unix 2 [ ACC ] STREAM LISTENING 1926205077 21792/mysqld /var/run/mysqld/mysqld.sock
Игрушечный класс соединения
root@88:~# cat TestConnect/TestConnection.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestConnection {
public static void main(String args[]) throws Exception {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Got driver");
con = DriverManager.getConnection(
"jdbc:mysql:///localhost:3306",
"uname", "pass");
System.out.println("Got connection");
if(!con.isClosed())
System.out.println("Successfully connected to " +
"MySQL server using TCP/IP...");
} finally {
if(con != null)
con.close();
}
}
}
Игрушечный вывод класса соединения
Примечание: Это - та же ошибка, которую я получаю от Tomcat.
root@88:~/TestConnect# java -cp mysql-connector-java-5.1.12-bin.jar:. TestConnection
Got driver
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 1 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at TestConnection.main(TestConnection.java:14)
Caused by: 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.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
... 12 more
Caused by: java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
... 13 more
Вывод Telnet
root@88:~/TestConnect# telnet localhost 3306
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection timed out
Netstat показывает, что MySQL действительно прослушивает порт 3306 на всех локальных адресах. Поскольку telnet не может подключиться к 127.0.0.1, там есть брандмауэр, который останавливает вас - попробуйте запустить sudo ufw default allow
, чтобы эффективно отключить его, или sudo ufw allow 3306
] и посмотрите, внесет ли он какие-нибудь изменения.
Строка подключения должна быть
jdbc:mysql://localhost:3306
вместо
jdbc:mysql:///localhost:3306
Также по умолчанию в unix / linux связь клиент / сервер осуществляется через файл сокета unix, а не через tcp / ip. Следовательно, вы не можете подключиться по Telnet к порту 3306 на вашем локальном компьютере.
Как выглядит ваш файл / etc / hosts? У вас есть такая запись?
127.0.0.1 localhost
Можете ли вы попробовать telnet:
telnet 127.0.0.1 3306 or telnet 127.0.0.1:3306
или JDBC подключиться к:
jdbc:mysql://127.0.0.1:3306
Вы всегда использовали одну и ту же подпись для метода getConnection , или это одна из вещей, которые вы изменили до того, как она перестала работать? ('///' в строке предполагает, что это было недавнее добавление.)
Если это новый код, вы можете попробовать следующую строку подключения:
String dbUrl = "jdbc: mysql: // localhost: 3306 / [db]? User = [пользователь] & пароль = [пароль] "; Connection conn = DriverManager.getConnection (dbUrl);
Это пример формата на странице документации mysql.com:
http://dev.mysql.com/doc/refman/5.0/es/connector-j -usagenotes-basic.html