Невозможно реплицировать локальное соединение базы данных mysql

Я использую Java-программу, включенную в проект Eclipse Java (Mars.2), которая требует вставки данных в базу данных на основе MySQL. Когда я запускаю его в 32-битной виртуальной машине, работающей под управлением Ubuntu 14.04 LTS, на которой установлен mysql 5.5.55, он работает без проблем.

Однако, когда я пытаюсь перенести проект на хост (не виртуальную машину), который имеет 64 бита, имеет Eclipse Oxygen.1 и работает с тем же дистрибутивом Ubuntu, и на нем установлен mysql 5.5.58 (у меня был 5.5.57, установленный ранее, но проблема остается той же) Я получаю следующее исключение:

Exception in thread "Thread-2" java.lang.StackOverflowError
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)

Я предполагаю, что исключение StackOverflow связано с попыткой установить соединения с базой данных слишком много раз, поэтому я считаю, что это происходит из-за сбоя в соединении с базой данных.

Файл конфигурации my.cnf абсолютно одинаков на обеих машинах (мне не нужно менять какой-либо IP-адрес, поскольку в обоих случаях я использую интерфейс обратной связи), поэтому я предполагаю, что это не связано с этим. Кроме того, код, который я использую, абсолютно одинаков в обоих случаях. Кто-нибудь имеет представление о том, что может происходить?

ОБНОВЛЕНИЕ: Я предпринял несколько действий, чтобы решить эту проблему, но ни одно из них не сработало. Среди них я успешно выполнил пример, который описан в http://www.vogella.com/tutorials/MySQLJava/article.html на обеих машинах, что заставляет меня думать, что эта проблема не потому, что либо JDBC-коннектора (оба работали нормально, несмотря на то, что они разные версии; они добавляются в путь сборки в Eclipse), различия в операционной системе, сама база данных (я проверил содержимое нескольких столбцов в примере и тот, который я использую, и они одинаковы) или версия сервера MySQL (одна машина имеет 5.5.55, а 64-битная, когда возникает проблема, - 5.5.58, но обе они работают нормально).

Однако я заметил, что если я полностью удаляю базу данных (выполняя DROP DATABASE mydatabase) на обеих машинах, я получаю разные результаты. В той, где это работает, я получаю исключение, сообщающее, что база данных, к которой я пытаюсь подключиться, неизвестна (имеет смысл), тогда как другая машина выдает точно такое же исключение, как если бы база данных никогда не существовала вообще. Это также происходит, если я изменяю имя базы данных на имя, которое специально не существует (рабочая машина говорит, что она неизвестна, нерабочая машина выдает то же исключение). Может ли это быть проблема, связанная с разрешениями, которые Eclipse имеет на одной из машин?

1
задан 8 January 2018 в 19:40

1 ответ

Вы не можете просто скопировать файлы mysql из одной версии в другую и ожидать, что базы данных будут работать. Сначала необходимо экспортировать базу данных:

mysqldump -u root -p yourdatabasename > yourdatabase.sql

А затем на конечном компьютере создайте новую базу данных:

CREATE DATABASE mynewdb;

и импортируйте базу данных с дампами:

mysql -u root -p mynewdb  < yourdatabase.sql

Только таким образом гарантируется, что база данных может быть перенесена между различными версиями или операционными системами.

3
ответ дан 8 January 2018 в 19:40

Другие вопросы по тегам:

Похожие вопросы: