기술문서 : MYSQL튜닝기술mysqld_safe 2편
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 7,992 조회
- 0 추천
- 목록
본문
기술문서 : MYSQL튜닝기술mysqld_safe 편<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
ㅇ 제작자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><?xml:namespace prefix = st2 ns = "urn:schemas:contacts" />박성수
ㅇ 본강좌의 자세한 정보 : http://www.superuser.co.kr/linuxcommandbible/ |
---------- 목 차 -------------
1 : MYSQL 데이터베이스를 실행하는 mysqld_safe에 대하여
2 : mysqld_safe으로 MYSQL 실행하기
3 : MYSQL 시작시 포트번호 지정하여 시작하기
4 : MYSQL 시작시 grant table권한없이 실행하기
5 : MYSQL의 root패스워드를 잊어버렸을 때 복구하기
6 : 여러가지 옵션들 지정하여 MYSQL 실행하기
7 :“too many connections” 에러발생시 mysqld_safe의 실행옵션으로 해결하는 방법
8 : MYSQL 보안을 위한 MYSQL전용관리계정으로 MYSQL 시작하기
9 : MYSQL 주로그(에러로그)파일 관리하기
10 : MYSQL의 쿼리로그를 남기려면
11 : MYSQL 바이너리(BINARY)로그 파일 활용
12 : MYSQL 튜닝 및 원인분석을 위한 SLOW로그파일 활용—지정된 시간이상 질의를 계속하는 질의문 잡아내기
5 : MYSQL의 root패스워드를 잊어버렸을 때 복구하기
필자와 같은 서버관리자들께서도 간혹 경험해 보셨겠지만 MYSQL데이터베이스를 관리하다보면 MYSQL root패스워드 잊어버리는 경우가 있습니다. 특히 여러대의 서버를 혼자서 관리하시는 분들이라면 이런 경우는 그렇게 흔하지 않게 경험해 보실 수 있습니다. 이런 경우에 유일하게 MYSQL root패스워드를 복구할 수 있는 방법이 있습니다.
앞에서 설명한 바와 같이 mysqld_safe으로 MYSQL을 시작할 때에 --skip-grant-table옵션을 사용하여 MYSQL의 grant table권한을 생략하여 실행한 후에 MYSQL의 root계정으로 패스워드 없이 접속하여 원하는 패스워드로 변경하는 방법입니다.
MYSQL의 root계정 패스워드를 잊어버렸을 경우의 복구절차는 다음과 같습니다.
1단계 : 실행중인 MYSQL을 종료한다.
2 단계 : “./mysqld_safe --skip-grant-table &” 로 table grant권한없이 MYSQL을 실행한다.
3 단계 : 패스워드없이 MYSQL root계정으로 MYSQL에 접속한다.
4 단계 : update문으로 mysql데이터베이스의 user테이블에 있는 MYSQL root사용자의 패스워드를 변경한다.
5 단계 : “flush privileges”명령어로 변경된 MYSQL데이터들을 동기화한다.
6 단계 : MYSQL을 빠져나와서 실행했던 MYSQL을 종료한다.
7 단계 : 일반적인 방법으로 MYSQL을 실행한다.
8 단계 : 정상적인 방법으로 패스워드를 사용하여 MYSQL의 root계정으로 접속하여 확인한다.
위의 단계별로 직접 MYSQL의 root패스워드를 복구해 보도록 하겠습니다.
1단계 : 실행중인 MYSQL을 종료한다.
현재 실행되어 있는 MYSQL의 root패스워드를 잊어버렸기 때문에 실행된 실행중인 MYSQL을 종료합니다. 종료할 때에는 아래 예와 같이 killall명령어를 이용하여 종료할 수 있습니다.
[root@file bin]# ps -ef | grep mysqld root 4351 4113 0 22:46 pts/0 00:00:00 /bin/sh ./mysqld_safe mysql 4364 4351 0 22:46 pts/0 00:00:00 [mysqld] root 4409 4113 0 23:15 pts/0 00:00:00 grep mysqld [root@file bin]# [root@file bin]# killall mysqld [root@file bin]# 040213 23:15:37 mysqld ended
[1]+ Done ./mysqld_safe [root@file bin]# |
실행중인 MYSQL을 종료하는 정상적인 방법은 “mysqladmin -u root -p shutdown”을 이용하는 것입니다. 하지만 이 방법은 MYSQL의 root패스워드를 알아야만 가능한 방법이기 때문에 MYSQL의 root패스워드를 알지 못하는 현재 상황에서는 부득이하게 killall을 이용하여 MYSQL을 종료합니다.
2 단계 : table grant권한없이 MYSQL을 실행한다.
앞의 예에서 배웠던 대로 table grant권한없이 MYSQL을 다음과 같이 실행합니다. 이렇게 실행된 후에는 패스워드없이 MYSQL 접속을 할 수 있습니다.
[root@file bin]# ./mysqld_safe --skip-grant-table & [1] 4433 [root@file bin]# Starting mysqld daemon with databases from /usr/local/mysql/data
[root@file bin]# ps -ef | grep mysqld root 4433 4113 0 23:18 pts/0 00:00:00 /bin/sh ./mysqld_safe --skip-grant-table mysql 4449 4433 3 23:18 pts/0 00:00:00 [mysqld] root 4459 4113 0 23:18 pts/0 00:00:00 grep mysqld [root@file bin]# |
3 단계 : 패스워드없이 MYSQL root계정으로 MYSQL에 접속한다.
아래 예를 보신 바와 같이 패스워드없이 MYSQL의 root계정으로 MYSQL에 접속을 하였습니다.
[root@file bin]# ./mysql -u root mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 1 to server version: 4.0.14
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> |
4 단계 : update문으로 MYSQL root사용자의 패스워드를 변경한다.
아래와 같이 MYSQL의 root계정 패스워드를 ‘111111’으로 변경하였습니다. 이때 update문을 사용하여 변경할 수 있습니다.
mysql> update user set password=password('111111') where user = 'root'; Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0
mysql> |
5 단계 : “flush privileges”으로 MYSQL데이터들을 동기화한다.
다음과 같이 “flush privileges”명령어로 MYSQL의 데이터들을 동기화 시킵니다. 이것의 의미는 방금 변경된 MYSQL의 root패스워드를 MYSQL의 캐쉬공간에서 디스크로 저장하여 MYSQL 종료후에도 그대로 적용되도록 하기 위함입니다.
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
mysql> |
6 단계 : MYSQL을 빠져나와서 실행했던 MYSQL을 종료한다.
이제 아래와 같이 MYSQL을 빠져나온 후에 table grant권한없이 실행하였던 MYSQL을 종료합니다.
mysql> exit Bye [root@file bin]# [root@file bin]# killall mysqld [root@file bin]# 040213 23:26:21 mysqld ended
[1]+ Done ./mysqld_safe --skip-grant-table [root@file bin]# |
이로써 MYSQL의 root패스워드가 ‘111111’으로 변경 되었습니다. 이제 변경된 패스워드로 접속을 하여 확인해 보도록 하겠습니다.
7 단계 : 일반적인 방법으로 MYSQL을 실행한다.
이제 MYSQL의 root패스워드가 ‘111111’으로 변경 되었으므로 일반적인 방법으로 MYSQL을 다음과 같이 실행하였습니다.
[root@file bin]# ./mysqld_safe & [1] 4469 [root@file bin]# Starting mysqld daemon with databases from /usr/local/mysql/data
[root@file bin]# |
8 단계 : 패스워드를 사용하여 MYSQL의 root계정으로 접속하여 확인한다.
이제 변경된 MYSQL의 root패스워드(‘111111’)를 사용하여 MYSQL로 접속을 하였습니다. 이로써 MYSQL의 root패스워드가 ‘111111’으로 변경되었음을 확인 하였습니다.
[root@file bin]# ./mysql -u root -p mysql Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 1 to server version: 4.0.14
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> mysql> exit Bye |
이렇게 MYSQL의 root패스워드를 잊어버렸을 경우에는 복구(변경)이 가능합니다. 참고로 일반사용자의 MYSQL패스워드를 잊어버렸다면 MYSQL root계정으로 MYSQL에 접속한 다음 update문으로 변경해 주시면 됩니다.
6 : 여러가지 옵션들 지정하여 MYSQL 실행하기
MYSQL 시작시에 사용하는 mysqld_safe명령어에는 MYSQL실행환경을 결정하는 다양한 옵션들을 사용할 수 있습니다. 옵션을 사용할 때에는 -O 다음에 MYSQL 환경변수와 그 값을 함께 지정하시면 됩니다.
필자는 현재 서버와 서비스의 환경에 맞는 MYSQL서비스를 하기 위하여 MYSQL변수의 값을 다음과 같이 설정하여 실행하고자 합니다.
max_connections=1000 (MYSQL에 최대 연결가능한 프로세스 수) table_cache=256 (MYSQL이 사용할 테이블캐쉬의 크기) wait_timeout=300 (MYSQL접속시에 타임아웃시킬 최대 연결대기 지속시간) |
위와 같은 조건으로 MYSQL을 시작해 보도록 하겠습니다.
[root@file bin]# ./mysqld_safe -O max_connections=1000 -O table_cache=256 -O wait_timeout=300 & [1] 4302 [root@file bin]# Starting mysqld daemon with databases from /usr/local/mysql/data
[root@file bin]# [root@file bin]# ps -ef | grep mysqld root 4302 4113 0 22:41 pts/0 00:00:00 /bin/sh ./mysqld_safe -O max_connections=1000 -O table_cache=256 -O wait_timeout=300 mysql 4333 4302 2 22:41 pts/0 00:00:00 [mysqld] root 4343 4113 0 22:41 pts/0 00:00:00 grep mysqld [root@file bin]# |
이번 예에서는 mysqld_safe명령어로 MYSQL을 시작할 때에 -O옵션을 사용하여 MYSQL의 여러가지 환경변수들의 값을 지정하여 실행할 수 있다는 것을 알아 보았습니다.
위의 예에서 보았던 MYSQL의 환경변수외에도 다음과 같이 수많은 MYSQL의 환경변수들이 있다는 것을 알아두시기 바랍니다. 아래 표에서 왼쪽의 값이 MYSQL의 환경변수명이며 오른쪽의 값은 각 변수의 기본값들 입니다. 아래 표를 참조한 후에 위의 예와 같이 -O옵션을 사용하면 MYSQL의 실행시 기본값이 아닌 지정된 값으로 시작할 수 있습니다.
관련자료
-
이전
-
다음