내가 사용하는 Local Desktop 에서 회사 서버(Local)의 DataBase 에 접속하고자 한다
로컬이란 내 desktop 으로부터 자유로이 connect(SSH) 가능한 192.168 로 시작하는 IP 주소를 의미한다.
당연히 접근하려는 서버에 database 가 깔려있어야 하고 Database 는 activate 상태여야 한다.
bind-address
, port
등 mysql 상태 체크vim /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl status mysql
Ctrl+c
로 나올 수 있다sudo ufw status
ifconfig
에서 inet
확인127.0.0.1
의 DNS 주소 확인vim /etc/hosts
에서 127.0.0.1
이 localhost
로 되어있는지 확인import pymysql
from sshtunnel import SSHTunnelForwarder
import getpass
ssh_pw=getpass.getpass() # ssh 비밀번호
mysql_pw=getpass.getpass() # mysql 비밀번호
if __name__ == '__main__':
with SSHTunnelForwarder(
('192.168.0.160', 22),
ssh_username='flower',
ssh_password=ssh_pw,
remote_bind_address=('localhost', 3306),
local_bind_address=('localhost', 3306),
) as tunnel:
conn = pymysql.connect(
user='root',
password=mysql_pw,
host='localhost',
port=tunnel.local_bind_port,
database='name of database',
)
cursor = conn.cursor()
cursor.execute('select * from table limit 50')
results = cursor.fetchall()
for result in results:
print(result)
cursor.close()
conn.close()
ssh -L 3306:localhost:3306 flower@192.168.0.160
ssh -p {portnum} -L 3306:localhost:3306 flower@192.168.0.160
import mysql.connector
import getpass
mysql_pw=getpass.getpass() # mysql 비밀번호
mysql_db = mysql.connector.connect(
host="127.0.0.1",
port=3306,
user="root",
password=mysql_pw,
database="name of database"
)
mysql_db.is_connected() # 접속 되었는지 상태체크, True : db접속상태
cursor = mydb.cursor()
cursor.execute('select * from table limit 50')
result = cursor.fetchall()
for row in result:
print(row)
cursor.close()
mysql_db.close()
mysql_db = mysql.connector.connect( host="127.0.0.1", port=3306, user="root", password=mysql_pw, database="name of database" )
위
host
에서 "127.0.0.1" 대신 "localhost" 라고 쓰면 간혹 오류가 날 수가 있다. 그건 아마 당신의/var/run/mysqld/
에mysqld.sock
이 없어서 그럴가능성이 있다.localhost
는 unix socket 을 이용하는 것이고 127.0.0.1 은 network socket 을 이용하는 것이다.