Не удается подключиться к localhost с помощью mysql-connector-python, ошибка 1130
Я пытаюсь подключиться к локальной базе данных MySQL из Pyhton с помощью mysql-connector-python
, Сервер mysql настроен для разрешения только локальных подключений. Это работает со многими другими приложениями, но не в моем скрипте Python. Я использую следующее:
db_config = {'host': 'localhost', 'user': 'aaa', 'password': 'xxx', 'database': 'aaa'}
conn = mysql.connector.connect(**db_config)
и я получаю следующую ошибку:
mysql.connector.errors.DatabaseError: 1130: Host 'static-xxx-xxx-xxx-xxx.net.upcbroadband.cz' is not allowed to connect to this MySQL server
где static-xxx-xxx-xxx-xxx.net.upcbroadband.cz
это имя хоста, соответствующее моему общедоступному статическому IP-адресу.
Я пытался изменить host
параметр для 127.0.0.1
, но это не помогло.
Интересно, когда я пытаюсь войти с терминала: mysql -h localhost -u aaa -p
, нет проблем, однако, когда я делаю: mysql -h 127.0.0.1 -u aaa -p
Я получаю ту же ошибку,
ERROR 1130 (HY000): Host 'static-xxx-xxx-xxx-xxx.net.upcbroadband.cz' is not allowed to connect to this MySQL server
Возможно ли, что mysql-connector-python
как-то конвертирует localhost в публичный ip?
1 ответ
Оказывается, MASQUERADE
был настроен для всех внешних пакетов:
sudo iptables --table nat --list
[...]
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.0.0.0/8 anywhere
MASQUERADE all -- anywhere anywhere
Когда я удалил его sudo iptables -t nat -D POSTROUTING -j MASQUERADE
проблема была решена.
Я на самом деле понял это при попытке
mysql -h localhost --protocol=TCP
что снова привело к ошибке 1130 при разрешении локального хоста на публичное имя хоста. Это означает, что, если я правильно понимаю, что mysql-connector-python
по умолчанию использует TCP вопреки mysql
команда.