2017-05-14 18 views
6

Proszę zobaczyć zmiany poniżej, pozostawiam oryginalne pytanie, aby pomóc innym.Nie można połączyć się z lokalnym serwerem MySQL za pośrednictwem Apps Script (JDBC)

Próbuję połączyć się z lokalnym serwerem MySQL za pośrednictwem Apps Script i JDBC, ale ciągle pojawia się jeden z dwóch błędów. Ten kod:

function connectTest() { 
    var conn = Jdbc.getConnection("jdbc:mysql://localhost", "root", "xxx"); 
} 

Daje błąd Failed to establish a database connection. Check connection string, username and password.

ten kod:

function connectTest() { 
    var conn = Jdbc.getConnection("jdbc:mysql://localhost:3306", "xxx", "pass"); 
} 

daje błąd Invalid argument: url.

Próbowałem dziesiątki kombinacji i nie mogę go uruchomić. Próby zalogowania się ze Skryptów Aplikacji nie pojawiają się w dzienniku dostępu do MySQL (tj. Jeśli próbuję zalogować się lokalnie z niepoprawnymi informacjami, widzę [Note] Access denied for user 'host'@'localhost' (using password: YES). Mam przyznane odpowiednie prawa dostępu do roota:

mysql> show grants for 'root'@'%'; 
+-------------------------------------------------------------+ 
| Grants for [email protected]%           | 
+-------------------------------------------------------------+ 
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION | 
+-------------------------------------------------------------+ 
1 row in set (0.00 sec) 

Czy muszę zrobić coś innego, aby odsłonić lokalnego DB do internetu/Google Apps Script

EDIT:

jestem teraz w stanie uzyskać dostępu odmówiono notatka z dziennika MySQL (np Access denied for user 'root'@'12.123.12.123' (using password: YES)), ale aplikacja nadal nie może się połączyć. Próbowałem dodać bind-address z moim publicznym adresem IP, ale MySQL nie uruchomi się, otrzymam ([ERROR] Can't start server: Bind on TCP/IP port: Can't assign requested address)

function connectTest() { 
    var conn = Jdbc.getConnection("jdbc:mysql://12.123.12.123:3306", "root", "xxx"); 
} 

EDIT2: Zmieniłem bind-address = 0.0.0.0 i że nie pozwoli mi uzyskać dostępu odmówiono błędy w dzienniku DB, ale nadal nie ma szczęścia podłączenia. Udało mi się połączyć z innymi otwartymi bazami danych MySQL w Internecie (np. Ensembldb.ensembl.org:3306), ale nadal nie mogę połączyć się z moją lokalną bazą danych.

+0

Chyba masz problem, ponieważ adres IP jest poza zakresem danego IP waha się na białej liście. Więcej informacji można znaleźć w dokumentacji - [Ustawienia innych baz danych] (https://developers.google.com/apps-script/guides/jdbc#setup_for_other_databases). Mam nadzieję że to pomoże. –

+0

@Mr.Rebot nie powinien "rootować" @ "%" 'zezwala na wszystkie adresy IP? – howMuchCheeseIsTooMuchCheese

+1

Nie publikuj publicznego adresu IP własnego serwera, i proszę, proszę, nie łącz się z tym przy użyciu konta root! Nie dodawaj do białej listy wszystkich adresów "' ''%'' '', ale tylko te z serwerów google (wykonaj @ link Mr.Rebot). Może to trochę więcej pracy, ale będziesz bezpieczniejszy! – mTorres

Odpowiedz

6

wreszcie go, oto jak mam go do pracy:

  1. Edycja my.cnf (z tego pliku może znajdować się kilka różnych miejsc, a może nawet nie istnieć, kładę moje tutaj /usr/local/etc/:

    [mysqld] 
    bind-address=0.0.0.0 
    skip-host-cache 
    skip-name-resolve 
    
  2. Otwórz port 3306 do internetu (za Xfinity, oznaczało zamiar http://10.0.0.1/> kliknięcie „Advanced” na lewym> „Port Forwarding”> „Dodaj urządzenie” na dole, odnaleźć urządzenia MySQL działa na a kliknij Dodaj) open port

  3. Udziel odpowiedniej zgody w MySQL i FLUSH PRIVILEGES;. Możesz to zrobić z GRANT ALL PRIVILEGES ON *.* TO <USER>@'%' IDENTIFIED BY '<PASSWORD>', ale to pozwala na dowolny adres IP, skrypt w Pythonie poniżej przydzieli adresy IP Google. Powinieneś sprawdzić tę listę IP przed dokumentacją Google dla JDBC.

    from sqlalchemy import create_engine, MetaData 
    
    conString = 'mysql+pymysql://<USER>:<PASSWORD>@localhost:3306/<DB>' 
    mysql = create_engine(conString) 
    
    ips = ['64.18.0.0 - 64.18.15.255', 
    '64.233.160.0 - 64.233.191.255', 
    '66.102.0.0 - 66.102.15.255', 
    '66.249.80.0 - 66.249.95.255', 
    '72.14.192.0 - 72.14.255.255', 
    '74.125.0.0 - 74.125.255.255', 
    '173.194.0.0 - 173.194.255.255', 
    '207.126.144.0 - 207.126.159.255', 
    '209.85.128.0 - 209.85.255.255', 
    '216.239.32.0 - 216.239.63.255'] 
    
    for ip in ips: 
        ip2 = ip.replace(' - ', '/') 
        try: 
         sql = "CREATE USER '<USER>'@'" + ip2 + "' identified by '<PASSWORD>';" 
         mysql.execute(sql) 
        except: 
         print ip2 
        sql = "GRANT ALL PRIVILEGES ON <DB>.* TO '<USER>'@'" + ip2 + "';" 
        mysql.execute(sql) 
    
Powiązane problemy