Не удается подключиться к локальному серверу MySQL через скрипт приложений (JDBC)
пожалуйста, смотрите изменения ниже, я оставляю оригинальный вопрос, чтобы помочь другим.
Я пытаюсь подключиться к локальному серверу MySQL через скрипт приложений и JDBC, но я продолжаю получать одну из двух ошибок. Этот код:
function connectTest() {
var conn = Jdbc.getConnection("jdbc:mysql://localhost", "root", "xxx");
}
выдает ошибку Failed to establish a database connection. Check connection string, username and password.
этот код:
function connectTest() {
var conn = Jdbc.getConnection("jdbc:mysql://localhost:3306", "xxx", "pass");
}
выдает ошибку Invalid argument: url
.
я попробовал множество комбинаций и не могу заставить его работать. Попытки входа в систему из приложений Скрипты не отображаются в журнале доступа для MySQL (т. е. если я пытаюсь войти локально с неправильной информацией, я вижу [Note] Access denied for user 'host'@'localhost' (using password: YES)
. Я предоставил соответствующие права доступа к root:
mysql> show grants for 'root'@'%';
+-------------------------------------------------------------+
| Grants for root@% |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
должен ли я сделать что-то еще, чтобы подвергнуть локальную БД скрипту internet / Google Apps?
EDIT:
теперь я могу получить доступ к запрещенной заметке из журнала MySQL (например,Access denied for user 'root'@'12.123.12.123' (using password: YES)
), но приложение все равно не может подключиться. Я попытался добавить bind-address
С моим публичным IP, но MySQL не запускается, я получаю ([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: я изменил bind-address=0.0.0.0, и это позволяет мне получить ошибки запрещенного доступа в журнале БД, но все равно не повезло с подключением. Я успешно подключился к другим открытым MySQL DB в интернете (например, ensembldb.ensembl.org: 3306), но я все еще не могу подключиться к своей локальной БД.
1 ответов
наконец-то понял, вот как я заставил его работать:
-
редактировать мои.КНФ с (этот файл может находиться в нескольких разных местах и может даже не существовать, я кладу здесь
/usr/local/etc/
:[mysqld] bind-address=0.0.0.0 skip-host-cache skip-name-resolve
открыть порт 3306 в интернет (для Xfinity, это означало, что будет http://10.0.0.1/ > нажав "дополнительно" слева > "переадресация портов" > "Добавить устройство" внизу, найдите устройство MySQL и нажмите добавлять)
-
предоставьте соответствующее разрешение в MySQL и
FLUSH PRIVILEGES;
. Вы можете сделать это с помощьюGRANT ALL PRIVILEGES ON *.* TO <USER>@'%' IDENTIFIED BY '<PASSWORD>'
, но это позволяет любой IP, скрипт Python ниже предоставит IP-адреса Google. Вы должны проверить этот список IP против документации Google для 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)