테스트나 스트레스 테스트 등으로 인해 MySQL 에 무한 인서트 등을 해야할 때가 간혹 있습니다. 매우 간단한 5줄(...) 짜리 코드지만, 간단히 소개해봅니다.

소스코드 설치 버전 MySQL + anaconda3 으로 테스트 진행했습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
import MySQLdb # 접속을 위해 MySQLdb 임포트
# 관련 참고 URL : http://mysql-python.sourceforge.net/MySQLdb.html#mysqldb
 
treeHit = 0
db = MySQLdb.connect(db='DB이름',
port=포트번호,host='localhost'
user="접속계정명",
password="접속비밀번호"
unix_socket="소켓이있을경우-로컬접속일경우명시없으면빼도됨"
# 앞으로 빼내서 커넥션을 한번만 수행하도록 테스트진행.
 
while interval < 50000# 몇회만큼 수행할지 결정
    interval = interval +1
    db.autocommit('on'# 오토커밋은 ON으로 변경한다. 이 옵션이 없으면 commit 없이 문장을 수행하므로 불편하다.
    db.query("""INSERT INTO test (contents,date_val) VALUES ( CEILING(RAND()*100),now());""")
    db.query("""INSERT INTO test2 (contents,date_val) VALUES ( CEILING(RAND()*100),now());""")
 
 
cs




Django + MySQL 사용시 MySQL connect library 설치 방법

Django는 2.0 이후 버전부터 default library로 mysqlclient를 사용한다. 하지만 이 버전 사용시 mysql의 라이브러리를 참조해야 하는데, 해당 정보를 가져오지 못해 에러가 나는 경우가 발생한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
root@localhost  ~
$ pip install mysqlclient  
Collecting mysqlclient
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7f73b141fdd8>: Failed to establish a new connection: [Errno -2] 이름 혹은 서비스를 알 수 없습니다',)'/simple/mysqlclient/
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.12
kimgn@localhost  ~
$ pip install mysql-python
Collecting mysql-python
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb16050e400>: Failed to establish a new connection: [Errno -2] 이름 혹은 서비스를 알 수 없습니다',)'/simple/mysql-python/
  Using cached MySQL-python-1.2.5.zip
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-xfi5tabw/mysql-python/setup.py", line 13, in <module>
        from setup_posix import get_config
      File "/tmp/pip-build-xfi5tabw/mysql-python/setup_posix.py", line 2, in <module>
        from ConfigParser import SafeConfigParser
    ModuleNotFoundError: No module named 'ConfigParser'
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-xfi5tabw/mysql-python/
root@localhost  ~
 
 
cs


이 현상으로 인해 ipython을 통해 MySQLdb를 임포트해본 결과 임포트가 정상적으로 되지 않는다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
In [2]: import MySQLdb
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-2-dd22983d5391> in <module>()
----> 1 import MySQLdb
 
~/anaconda3/lib/python3.6/site-packages/MySQLdb/__init__.py in <module>()
     17 from MySQLdb.release import __version__, version_info, __author__
     18 
---> 19 import _mysql
     20 
     21 if version_info != _mysql.version_info:
 
ImportError: libmysqlclient.so.20: cannot open shared object file: No such file or directory
 
해당 에러를 해결하기 위해서는 플러그인 라이브러리를 가져오기 위한 변수를 export 해주어야 한다.(참고 블로그 : http://k-flow.tistory.com/93)
 
vi ~/.bashrc
혹은 
vi /etc/profile.d/임의의sh파일
아래 문구 추가
 
 export LD_LIBRARY_PATH="MSQL라이브러리경로:$LD_LIBRARY_PATH"
 
cs


crontab등의 수행시 반영하고 싶을 경우는 crontab -e 후 해당 내용 반영

이후 수행하면 정상적으로 반영됨을 확인할 수 있다.


mysql_config 파일을 찾지 못해 설치 못되는 경우도 발생한다.


위와 같은 경우에는 PATH에 해당 경로를 삽입해주면 된다.

 export PATH="....MSQL바이너리경로:$LD_LIBRARY_PATH"

'IT etc. > Python OR Django' 카테고리의 다른 글

MySQL에 무한 인서트 하기  (0) 2018.01.03

+ Recent posts