1 서문
최근 MySQL 데이터베이스 인스턴스의 백업 및 복원을 연구하면서 이전 데이터 구성과 새 인스턴스의 my.cnf 구성이 일치하지 않는지 확인하기 위해 backup-my.cnf를 사용했습니다. innodb_data_file_path 매개변수가 수정되었는지 여부. my.cnf를 어떻게 구문 분석하나요? 그래서 Python에서 제공하는 ConfigParser 모듈을 공부했습니다. 이 모듈은 기본적으로 요구 사항을 충족하면서 공통 구성 파일에 대한 읽기 및 수정 작업을 완료할 수 있습니다.
2 사용 방법
2.1 구성 파일 형식
구성 파일은 주로 섹션 영역으로 구성되며 섹션에서 option=value 또는 option:value를 사용하여 매개 변수를 구성할 수 있습니다.
[섹션1 이름]
option1=값 1
....
optionN= 값 N
[섹션2 이름]
option1=값 1
....
optionN=valueN
일반적인 my.cnf 형식은 다음과 같습니다
[mysqld]
innodb_log_files_in_group = 2
innodb_page_size = 16384
innodb_log_block_size = 512
innodb_data_file_path = ibdata1:2G:autoextend
innodb_log_file_size = 53687091 2
2.2 ConfigParser 모듈
Python의 ConfigParser 모듈은 RawCnfigParser, ConfigParser, SafeConfigParser의 3가지 클래스를 정의합니다. 그 중 RawCnfigParser는 가장 기본적인 구성 파일 읽기 클래스입니다. ConfigParser와 SafeConfigParser는 RawCnfigParser를 기반으로 자체 확장을 만들었습니다.
ConfigParser 클래스를 예로 소개합니다. ConfigParser 모듈의 작업은 주로 다음과 같습니다.
a ConfigParser 인스턴스 초기화
b 구성 읽기
c 구성 수정
구성 파일을 읽는 일반적인 방법
cf.read(filename) 구성 파일 내용 읽기
cf.sections() 모든 섹션을 가져와서 목록 형식으로 반환
cf. options(section) 지정된 섹션 아래의 모든 옵션을 가져옵니다
cf.items(section) 지정된 섹션 아래의 모든 키-값 쌍을 가져와서 튜플 형식으로 반환합니다
cf.get(section, option) 지정된 섹션의 option 값을 가져와서 문자열 형식으로 반환합니다.
cf.getint(section, option) option 값을 가져옵니다. 지정된 섹션에 옵션을 추가하고 int 유형으로 반환
cf.has_option(section,option) 섹션에 지정된 옵션이 있는지 확인하고 있으면 True를 반환하고, 없으면 False를 반환합니다
cf.has_section(section) 섹션이 있는지 확인하고 True이면 반환, False 반환 없음
구성 파일 수정을 위한 일반적인 방법
cf. add_section(section) 구성 파일에 새 섹션 추가
cf.set(section, option, value) 섹션에서 옵션 설정
cf.remove_section( 섹션) 지정된 섹션 삭제
cf.remove_option(section , option) 지정된 섹션의 옵션 삭제
참고 구성 파일을 수정하려면 다음이 필요합니다. 구성 파일에 내용을 쓰려면 write를 호출하세요.
2.3 예
접거나 열려면 (여기)를 클릭하세요
#!/usr/bin/python2.6
#coding:utf8
가져오기 ConfigParser
old_mycnf_file='backup-my.cnf'
new_mycnf_file='my.cnf'
cf =ConfigParser.ConfigParser()
cf.read(new_mycnf_file)
sec=cf.sections()
'섹션:', 초 인쇄
opts = cf.options("mysqld")
'옵션:', opts
인쇄
kvs = cf.items("mysqld")
for kv in kvs:
kv 인쇄
innodb_data_file_path=cf.get('mysqld','innodb_data_file_path')
innodb_log_file_size=cf.get('mysqld','innodb_log_file_size')
'innodb_data_file_path: ',innodb_data_file_path
print 'innodb_log_file_size:',innodb_log_file_size
"수정 후" 인쇄
cf.set('mysqld', 'innodb_data_file_path','ibdata1:1G:autoextend')
cf.write(open(new_mycnf_file, "w"))
cf.read(new_mycnf_file)
PRINT 'Innodb_data_path:', InnoDB_DATA_F ILE_PATH
yangyidba: Yangyi $ Python writecnf 테스트. py
섹션: ['mysqld']
옵션: ['innodb_log_files_in_group', 'innodb_page_size', 'innodb_log_block_size', 'innodb_data_file_path', 'innodb_ log_file_size' , 'ibdata1']
('innodb_log_files_in_group', '2')
('innodb_page_size', '16384')
( 'innodb_log_block_size', '512')
('innodb_data_file_path', 'ibdata1:2G:autoextend')
('innodb_log_file_size', '536870912')
('ibdata1', '2g:autoextend = ibdata1:2G:autoextend')
innodb_data_file_path : ibdata1:1G:autoextend
innodb_log_file_size : 536870912
수정 후
innodb_data_file_path : ibdata1:1G:autoextend
세 가지 요약
ConfigParser 모듈에서 제공하는 기능에 따르면 기본적으로 다음을 충족할 수 있다. 일상 업무의 요구 사항 구성 파일 수정 작업. 보다 자세한 내용은 공식 문서를 참고하시기 바랍니다.