utilizzando una macchina virtuale come mySql server


1

sto sviluppando un programma java e ho bisogno di un database. Ora sto usando MAMP ed è abbastanza facile, ma avrei una macchina virtuale (server Ubuntu) e ho bisogno di collegare il mio programma java con questa macchina virtuale usando vitualBox.

la situazione:

  • Ho installato VirtualBox sul mio Mac e ho installato una macchina Ubuntu-server
  • impostare "bridge adapter" nelle impostazioni di rete di VB
  • Ho installato mysql su ubuntu-server e ho creato un semplice database (tutto funziona bene con Ubuntu)
  • facendo ifconfig da ubuntu ottengo l'ip: 192.168.1.217

quindi nel programma java ho creato questa funzione:

public static Connection connect(String host, int port, String dbName, String user, String passwd)
{
    Connection dbConnection = null;
    try
    {
        String dbString = null;
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        dbString = "jdbc:mysql://" + host + ":" + port + "/" + dbName;

        dbConnection = DriverManager.getConnection(dbString, user, passwd);

    }
    catch (Exception e)
    {
        System.err.println("Failed to connect with the DB");
        e.printStackTrace();
    }

    return dbConnection;
}

e nel main () uso:

Connection con = connect(1, "192.168.1.217", 3306, "Ciao", "root", "cocacola");

3306 era un valore predefinito. Non so se è corretto, funziona su mamp, ma ... come posso trovare la porta corretta che devo usare con VB?

quando eseguo il programma ottengo l'eccezione di cattura ... cosa c'è che non va?


Codice Java appart ... Si può effettivamente connettersi al server del database usando il proprio client MySQL preferito?
Álvaro González

Dovrai: 1) inoltrare le porte in virtualbox e 2) aprire quella porta nel firewall di ubuntu. Potrebbe essere meglio semplicemente eseguire mysql sul mac?
trojanfoe

@Alvaro G. Vicario: no non posso
ffmm

@trojanfoe: grazie, come posso farlo? nella casella virtuale non trovo nulla per aprire il post
ffmm

@trojanfoe - Non so se sia fuori tema - semplicemente perché al momento è probabile che sia un problema di codifica e un problema di impostazione del computer!
Dave

Risposte:


3

Controlla il tuo /etc/my.cnf/ o /etc/mysql/my.cnf file per bind_address. Il tuo MySQL si collega a localhost per impostazione predefinita, dovresti metterlo a 0.0.0.0.

Trova:

bind-address            = 127.0.0.1

Sostituire:

bind-address            = 0.0.0.0

Se non si dispone di un file my.cnf, è possibile crearlo. In tal caso, avresti bisogno almeno di questo:

[mysqld]
bind-address            = 0.0.0.0

ciao, io faccio quello che dici e ora ho un errore diverso: Impossibile connettersi con il DB java.sql.SQLException: null, messaggio dal server: "Host '192.168.1.77' non è consentito connettersi a questo server MySQL"
ffmm

Dovrai aggiungere le autorizzazioni corrette per l'utente che stai connettendo come. Se ti stai connettendo come utente "root", sarebbe qualcosa del genere: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.77';. Dovrai eseguirlo localmente su Ubuntu VM, quindi collegarti con il terminale mysql -u root -p ed eseguirlo lì.
wkoot

ora l'errore è: java.sql.SQLException: accesso negato per l'utente 'root'@'192.168.1.77' (utilizzando la password: YES)
ffmm

Prova a eseguire il tuo script senza password. Non c'era alcuna password associata all'utente root per questo IP. Quindi MySQL non ne ha assegnato uno con GRANT. Puoi anche usare questo con la tua password: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.77' IDENTIFIED BY 'your_password';
wkoot

molte grazie! Funziona!!! io "tik" la tua risposta! una piccola domanda: se riavvio il router l'ip cambia, quindi dovrei aggiungere una nuova connessione .. c'è un modo per aggirare questa roba?
ffmm

0

Il tuo metodo prende i parametri sbagliati. Confrontare

public static Connection connect(String host, int port, String dbName, String user, String passwd)

con

Connection con = connect(1, "192.168.1.217", 3306, "Ciao", "root", "cocacola");

Ciò significa, quando crei la stringa dbString che stai creando

jdbc:mysql://1:192.168.1.217/3306; 

Tuttavia, il sovraccarico non corrisponde nemmeno, quindi sono stupito che tu sia arrivato fin qui (anche se io faccio C # non Java quindi forse questo è OK)! La connessione connessa richiede 5 parametri, ma quando si chiama il metodo, si passa 6!

Penso al cambiamento

Connection con = connect(1, "192.168.1.217", 3306, "Ciao", "root", "cocacola"); 

a

Connection con = connect("192.168.1.217", 3306, "Ciao", "root", "cocacola");

1
Non riesce nemmeno a connettersi usando il suo client MySQL preferito, quindi ha comunque problemi di connettività.
trojanfoe

@trojanfoe Concordato. Anche se come è arrivato al punto di cattura quando la firma non corrisponde (è una cosa Java?)
Dave

Nessuna idea. Spesso le persone non pubblicano nemmeno il codice reale ...
trojanfoe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.