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.