Não é possível replicar a conexão local do banco de dados mysql

1

Estou executando um programa Java composto por um projeto Java Eclipse (Mars.2) que requer a inserção de dados em um banco de dados baseado no MySQL. Quando eu o executo em uma máquina virtual de 32 bits rodando o Ubuntu 14.04 LTS que tem o mysql 5.5.55 instalado, ele roda sem nenhum problema.

No entanto, quando tento portar o projeto para um host (não uma máquina virtual) de 64 bits, tem o Eclipse Oxygen.1 e executa a mesma distribuição do Ubuntu e o mysql 5.5.58 instalado (eu tinha 5.5.57 instalado anteriormente, mas o problema permanece o mesmo) Eu recebo a seguinte exceção:

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.access0(URLClassLoader.java:73)
    at java.net.URLClassLoader.run(URLClassLoader.java:368)
    at java.net.URLClassLoader.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.access0(URLClassLoader.java:73)
    at java.net.URLClassLoader.run(URLClassLoader.java:368)
    at java.net.URLClassLoader.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.access0(URLClassLoader.java:73)
    at java.net.URLClassLoader.run(URLClassLoader.java:368)
    at java.net.URLClassLoader.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)

Meu palpite é que a exceção StackOverflow é devido a tentar estabelecer conexões com o banco de dados por muitas vezes, então acredito que isso está acontecendo porque há alguma falha na conectividade com o banco de dados.

O arquivo de configuração my.cnf é exatamente o mesmo em ambas as máquinas (não preciso alterar nenhum IP porque estou usando a interface de loopback em ambos os casos), portanto, presumo que isso não esteja relacionado a isso. Além disso, o código que estou usando é exatamente o mesmo em ambos os casos. Alguém tem uma ideia do que poderia estar acontecendo?

ATUALIZAÇÃO: Tomei várias ações para resolver esse problema, mas nenhuma delas funcionou. Entre eles, executei com sucesso o exemplo descrito no link em ambas as máquinas, o que me faz pensar que esse problema não é por causa do conector JDBC (ambos funcionaram bem, apesar de serem versões diferentes; eles são adicionados ao caminho de construção no Eclipse), as diferenças do sistema operacional, o próprio banco de dados (verifiquei o conteúdo de vários colunas no exemplo e aquele que eu estou usando e eles são os mesmos) ou a versão do servidor MySQL (uma máquina tem 5.5.55 e 64 bits quando o problema acontece é 5.5.58, mas ambos funcionam bem) .

No entanto, notei que, se eu excluir completamente o banco de dados (executando DROP DATABASE mydatabase) em ambas as máquinas, obtenho resultados diferentes. Naquele em que funciona, obtenho uma exceção dizendo que o banco de dados ao qual estou tentando me conectar é desconhecido (faz sentido), enquanto a outra máquina fornece exatamente a mesma exceção, como se o banco de dados nunca tivesse existido. Isso também acontece se eu alterar o nome do banco de dados para um que não existe de propósito (a máquina em funcionamento diz que é desconhecido, a máquina que não trabalha lança a mesma exceção). Poderia ser um problema relacionado às permissões que o Eclipse tem em uma das máquinas?

    
por Jesus 14.12.2017 / 12:33

1 resposta

3

Você não pode simplesmente copiar arquivos mysql de uma versão para outra e esperar que os bancos de dados funcionem. Você precisa primeiro exportar o banco de dados:

mysqldump -u root -p yourdatabasename > yourdatabase.sql

E, na máquina de destino, crie um novo banco de dados:

CREATE DATABASE mynewdb;

e importe o banco de dados dumpted:

mysql -u root -p mynewdb  < yourdatabase.sql

Somente desta forma, é garantido que o banco de dados pode ser migrado entre diferentes versões ou sistemas operacionais.

    
por paxt 14.12.2017 / 12:41