mySql 서버와 같은 가상 머신 사용


1

Java 프로그램을 개발 중이며 데이터베이스가 필요합니다. 이제 MAMP를 사용하고 있으며 꽤 쉽지만 가상 머신 (우분투 서버)이 있고 vitualBox를 사용하여 Java 프로그램을이 가상 머신에 연결해야합니다.

그 상황:

  • Mac에 VirtualBox를 설치하고 우분투 서버 시스템을 설치했습니다.
  • VB의 네트워크 설정에서 "브리지 어댑터"설정
  • 우분투 서버에 mysql을 설치하고 간단한 데이터베이스를 만들었습니다 (모두 우분투에서 잘 작동합니다)
  • 우분투로 ifconfig를하고 ip를 얻습니다 : 192.168.1.217

그래서 자바 프로그램 에서이 기능을 만들었습니다.

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;
}

그리고 main ()에서 다음을 사용합니다.

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

3306이 기본값입니다. 나는 정확한지 모르겠다. VB와 함께 사용해야하는 올바른 포트를 어떻게 찾을 수 있습니까?

프로그램을 실행하면 캐치 예외가 발생합니다. 무엇이 잘못 되었나요?


Java code appart ... 좋아하는 MySQL 클라이언트를 사용하여 데이터베이스 서버에 실제로 연결할 수 있습니까?
Álvaro González

1) virtualbox에서 포트를 전달하고 2) 우분투 방화벽에서 해당 포트를 엽니 다. Mac에서 mysql을 실행하는 것이 더 좋을까요?
trojanfoe

@Alvaro G. Vicario : 아니요, 못합니다
ffmm

@trojanfoe : 감사합니다. 어떻게해야합니까? 가상 상자에서 게시물을 열 무언가를 찾을 수 없습니다
ffmm

@trojanfoe-주제가 아닌지 모르겠습니다. 현재로서는 코딩 문제와 컴퓨터 설정 문제 일 수 있기 때문입니다!
Dave

답변:


3

bind_address에 대한 /etc/my.cnf/또는 /etc/mysql/my.cnf파일을 확인하십시오 . MySQL은 기본적으로 localhost에 바인딩되므로 0.0.0.0으로 설정해야합니다.

검색:

bind-address            = 127.0.0.1

바꾸다:

bind-address            = 0.0.0.0

my.cnf 파일이 없으면 만들 수 있습니다. 이 경우 최소한 다음이 필요합니다.

[mysqld]
bind-address            = 0.0.0.0

안녕, 나는 당신이 말하고 지금 다른 오류가 있습니다 : DB java.sql.SQLException에 연결하지 못했습니다 : null, 서버에서 메시지 : "호스트 '192.168.1.77'이 MySQL 서버에 연결할 수 없습니다"
ffmm

연결하려는 사용자에게 올바른 권한을 추가해야합니다. 사용자 "root"로 연결하는 경우 다음과 같습니다 GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.77';.. 우분투 VM에서 로컬로 이것을 실행해야하므로 터미널 연결과 연결 mysql -u root -p하십시오.
wkoot

이제 오류는 다음과 같습니다. java.sql.SQLException : 사용자 'root'@'192.168.1.77'에 대한 액세스가 거부되었습니다 (비밀번호 사용 : YES)
ffmm

비밀번호없이 스크립트를 실행 해보십시오. 이 IP의 루트 사용자와 연관된 비밀번호가 없습니다. 따라서 MySQL은 GRANT로 할당하지 않았습니다. 암호와 함께 사용할 수도 있습니다. GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.77' IDENTIFIED BY 'your_password';
wkoot

고마워요! 효과가있다!!! 나는 당신의 대답을 '틱'합니다! 약간의 질문 : 라우터를 다시 시작하면 IP 변경이 발생하므로 새로운 연결을 추가해야합니다.
ffmm

0

메소드가 잘못된 매개 변수를 사용합니다. 비교

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

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

이것은 문자열 dbString을 만들 때 만들고 있음을 의미합니다.

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

그러나 오버로드가 일치하지 않으므로이 멀리까지 도달 한 것에 놀랐습니다 (C #은 Java가 아니므로 이것이 가능할 수도 있습니다)! Connection Connect는 5 개의 매개 변수를 취하지 만 메소드를 호출하면 6을 전달합니다!

나는 변화를 생각한다

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

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

1
그는 좋아하는 MySQL 클라이언트를 사용하여 연결할 수도 없으므로 어쨌든 연결 문제가 있습니다.
trojanfoe

@trojanfoe 동의합니다. 시그니처가 일치하지 않을 때 시도 어획량까지 어떻게 도달 했습니까 (Java입니까?)
Dave

몰라. 사람들은 종종 실제 코드를 게시하지도 않습니다.
trojanfoe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.