mysql_config_editor

설명

MySQL에서 제공하는 계정 정보를 안전하게 보관하고 관리할 수 있는 유틸리티.

계정 정보를 암호화된 파일(.mylogin.cnf)에 저장하며, 기본 저장 경로는 현재 사용자의 홈 디렉토리다. 해당 파일은 소유자만 읽을 수 있도록 권한이 설정되어 보안성이 높다.

저장된 정보는 --login-path 옵션으로 호출하여 MySQL 서버에 연결할 수 있어, 명령줄에서 계정 정보를 직접 입력하지 않아도 된다.

사전 설치

mysql client 패키지에 포함되어 있다.

# redhat-based 7 series
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
sudo yum install -y mysql-community-client
 
# debian-based
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb \
&& sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
 
sudo apt-get update
sudo apt-get install -y mysql-client
 
# mac
brew install mysql-client

사용법

4가지 옵션을 제공한다.

  • set — 로그인 정보 설정
  • print — 로그인 정보 출력
  • remove — 특정 항목 제거
  • reset — 전체 삭제

set — 로그인 정보 설정

로컬호스트 root 계정 접속 정보를 설정하는 예제:

mysql_config_editor set --login-path="root" --host="localhost" --user="root" --password
  • --login-path: 해당 접속 정보를 호출할 때 사용하는 명칭
  • --password: 값을 옵션에 직접 전달하는 것은 불가능하며, 프롬프트를 통해 별도로 입력해야 한다

설정 후 확인:

mysql_config_editor print --login-path="root"

.mylogin.cnf 파일은 암호화되어 있어 직접 읽을 수 없지만, print 명령으로 password를 제외한 정보를 확인할 수 있다.

설정된 접속 정보로 MySQL 접속:

mysql --login-path="root"
# 특정 login-path 출력
mysql_config_editor print --login-path="root"
 
# 설정된 전체 login-path 출력
mysql_config_editor print --all

remove — 특정 항목 제거

실수로 불필요한 항목을 추가했을 때 해당 항목만 제거할 수 있다.

예를 들어 hostsocket을 동시에 설정한 경우, login-path 호출 시 두 값이 모두 적용된다:

mysql_config_editor set --login-path="root" --host="localhost" --user="root" --socket="test" --password
mysql_config_editor print --login-path="root"

socket 항목만 제거:

mysql_config_editor remove --login-path="root" --socket
mysql_config_editor print --login-path="root"

reset — 전체 삭제

설정된 모든 정보를 삭제한다:

mysql_config_editor reset

.mylogin.cnf 파일 자체는 남아있고, 파일 내용만 삭제된다.

응용

DB 관리자가 로컬 또는 리모트 환경에서 MySQL 접속을 간편하게 만들 때 유용하다. 로컬 환경에서 실행되는 스크립트에서 호출하여 커넥션을 생성하는 방식으로 활용할 수 있다.

주요 장점:

  1. 스크립트에 MySQL 접속 정보를 직접 기재하지 않아도 된다.
  2. 관리자 패스워드를 주기적으로 변경할 때 수정 포인트를 최소화할 수 있다.

Python3에서 login-path로 커넥션 정보 전달하기

pip3 install mysql-connector-python
pip3 install myloginpath
#!/usr/bin/env python3.9
# -*- coding: utf-8 -*-
 
import mysql.connector
import myloginpath as myloginpath
 
# login-path를 사용하여 MySQL 서버에 연결
cnx = mysql.connector.connect(**myloginpath.parse('root'))
 
# 연결된 MySQL 서버의 정보 출력
print('Connected to MySQL Server version:', cnx.get_server_info())
print('Host:', cnx.server_host)
print('User:', cnx.server_user)
 
# 커서 생성 및 쿼리 실행
cursor = cnx.cursor()
query = 'SELECT user, host FROM mysql.user'
cursor.execute(query)
 
# 쿼리 실행 결과 출력
for (user, host) in cursor:
    print(f'{user}, {host}')
 
# 커넥션 닫기
cursor.close()
cnx.close()