2013-05-09 29 views
8

Sto provando a creare un database remoto utilizzando mysql su una macchina Ubuntu che esegue 12.04.OperationalError: (OperationalError) (2003, "Impossibile connettersi al server MySQL su '192.168.129.139' (111)") Nessuno Nessuno

Ha un utente root con accesso remoto abilitato e nessuna password. Ho avviato il server.

uscita del

sudo netstat -tap | grep mysql 

mostra

tcp  0  0 localhost:mysql   *:*      LISTEN  13246/mysqld 

ho creato un database chiamato nwtopology utilizzando (come detto radice non ha ancora una password.)

create database nwtopology 
grant all privileges on *.* to [email protected] 
FLUSH PRIVILEGES; 

Da la macchina client che esegue anche Ubuntu 12.04 Io uso uno script python per connettermi al database mysql remoto usando sqlal Chemy.

from pox.core import core 
import pox.openflow.libopenflow_01 as of 
import re 
import datetime 
import time 
from sqlalchemy import create_engine, ForeignKey 
from sqlalchemy import Column, Date, Integer, String 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship, backref 
from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 
from sqlalchemy.sql.expression import exists 

log = core.getLogger() 
engine = create_engine('mysql://[email protected]/nwtopology', echo=False) 
Base = declarative_base() 
Session = sessionmaker(bind=engine) 
session = Session() 

class SourcetoPort(Base): 
    """""" 
    __tablename__ = 'source_to_port' 
    id = Column(Integer, primary_key=True) 
    port_no  = Column(Integer) 
    src_address = Column(String,index=True) 

    #----------------------------------------- 
    def __init__(self, src_address,port_no): 
     """""" 
     self.src_address = src_address 
     self.port_no  = port_no 

La chiamata a create_engine() ha esito negativo con il seguente errore.

POX 0.1.0 (betta)/Copyright 2011-2013 James McCauley, et al. 
Traceback (most recent call last): 
    File "/home/karthik/ms_thesis/pox/pox/boot.py", line 89, in do_import2 
    __import__(name, globals(), locals()) 
    File "/home/karthik/ms_thesis/pox/custom/tutorial.py", line 39, in <module> 
    Base.metadata.create_all(engine) 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 2515, in create_all 
    tables=tables) 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 2230, in _run_visitor 
    conn = self.contextual_connect(close_with_result=False) 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 2340, in contextual_connect 
    self.pool.connect(), 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 210, in connect 
    return _ConnectionFairy(self).checkout() 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 371, in __init__ 
    rec = self._connection_record = pool._do_get() 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 697, in _do_get 
    con = self._create_connection() 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 174, in _create_connection 
    return _ConnectionRecord(self) 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 256, in __init__ 
    self.connection = self.__connect() 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 316, in __connect 
    connection = self.__pool._creator() 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/strategies.py", line 80, in connect 
    return dialect.connect(*cargs, **cparams) 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 280, in connect 
    return self.dbapi.connect(*cargs, **cparams) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect 
    return Connection(*args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 187, in __init__ 
    super(Connection, self).__init__(*args, **kwargs2) 
OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.129.139' (111)") None None 

Non riesco a capire perché questo sta accadendo? Qualsiasi aiuto è molto apprezzato?

+3

L'errore sta dicendo che non c'è nessun server MySQL in ascolto sulla porta 'mysql' sull'host 192.168.129.139. In effetti, probabilmente non c'è nulla che ascolti su quella porta. (Puoi verificarlo con, ad esempio, 'nc 192.168.129.139 3306' nella shell, o'socket.create_connection' in Python.) – abarnert

+0

Se stai chiedendo _why_ nessun server sta ascoltando lì ... questa non è una domanda Python, o una domanda di programmazione; hai configurato qualcosa di sbagliato e probabilmente vorrai andare su http://serverfault.com per un aiuto. – abarnert

+2

Nel frattempo, tre ovvie possibilità: (1) 192.168.129.139 non è l'indirizzo della macchina che esegue MySQL. (2) MySQL non è in esecuzione sulla stessa porta a cui stai tentando di connettersi. Credo che la porta predefinita sia 3306 (e il mio '/ etc/services' è d'accordo ...), ma è possibile configurarla per l'esecuzione su qualsiasi porta e si può passare qualsiasi porta alla chiamata di connessione. (3) Il servizio MySQL sta ascoltando l'interfaccia sbagliata, ad esempio, sta ascoltando su localhost e stai cercando di connettersi su eth0 o viceversa. – abarnert

risposta

12

Sembra che mysql sia configurato per l'ascolto solo su localhost.

È possibile verificare questo eseguendo telnet 192.168.129.139 3306 dal computer client.

Motivo più probabile: mysqld è configurato per farlo.

Prova a seguire Configuration step described here:

Modificare il file /etc/mysql/my.cnf per configurare MySQL per ascoltare le connessioni da host di rete, cambiare la direttiva bind-address per l'indirizzo IP del server. Ad esempio Sostituisci 192.168.0.5 con l'indirizzo appropriato. Se non ci sono tali voci - decommentalo o crea una nuova riga.

bind-address   = 192.168.0.5 

quindi riavviare mysqld

sudo service mysql restart 

Poi prova con telnet o eseguendo l'applicazione, ancora una volta. Anche netstat avrebbe la seconda voce per mysqld.

+0

+1 Grazie per un contorno chiaro.Se qualcuno lo fa e ancora non riesce a connettersi (e sta eseguendo Ubuntu), controlla le impostazioni del firewall e consenti la porta 3306 come porta. –

+0

Ho anche dovuto creare un nuovo utente con privilegi sufficienti che potessero connettersi dall'esterno (vedere [qui] (http://stackoverflow.com/questions/1559955/host-xxx-xx-xxx-xxx-is-not- permesso-to-connect-a-questo-mysql-server)). – MBR

+0

Ho seguito ciò che è stato dato nella risposta, ma non riuscivo ancora a farlo funzionare. Ho quindi capito che il parametro "bind-address" si trova nel file "/etc/mysql/mysql.conf.d/mysqld.cnf". Ha commentato lì e ha funzionato! – Yahya

Problemi correlati