강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
기술문서 : MYSQL튜닝기술mysqld_safe 2편
조회 : 4,511  


기술문서 : MYSQL튜닝기술mysqld_safe

 

 

 

 

ㅇ 제작자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 성수

 

ㅇ 본강좌의 자세한 정보 : 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의 실행시 기본값이 아닌 지정된 값으로 시작할 수 있습니다.

 

back_log                        50                     

basedir                         /usr/local/mysql/

binlog_cache_size               32768           

bulk_insert_buffer_size         8388608         

character_set                   euc_kr          

character_sets                  euc_kr dec8 dos german1 hp8 koi8_ru latin1 latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5

concurrent_insert               ON              

connect_timeout                 5               

convert_character_set                           

datadir                         /usr/local/mysql/data/

default_week_format             0               

delay_key_write                 ON              

delayed_insert_limit            100             

delayed_insert_timeout          300             

delayed_queue_size              1000            

flush                           OFF             

flush_time                      0               

ft_boolean_syntax               + -><()~*:""& 

ft_min_word_len                 4               

ft_max_word_len                 254             

ft_max_word_len_for_sort        20              

ft_stopword_file                (built-in)      

have_bdb                        NO              

have_crypt                      YES             

have_innodb                     YES             

have_isam                       YES             

have_raid                       NO               

have_symlink                    YES             

have_openssl                    NO              

have_query_cache                YES             

init_file                                       

innodb_additional_mem_pool_size 1048576          

innodb_buffer_pool_size         8388608         

innodb_data_file_path           ibdata1:10M:autoextend

innodb_data_home_dir                            

innodb_file_io_threads          4               

innodb_force_recovery           0                

innodb_thread_concurrency       8               

innodb_flush_log_at_trx_commit  1               

innodb_fast_shutdown            ON              

innodb_flush_method                             

innodb_lock_wait_timeout        50              

innodb_log_arch_dir             ./              

innodb_log_archive              OFF             

innodb_log_buffer_size          1048576         

innodb_log_file_size            5242880         

innodb_log_files_in_group       2               

innodb_log_group_home_dir       ./              

innodb_mirrored_log_groups      1               

innodb_max_dirty_pages_pct      90              

interactive_timeout             28800           

join_buffer_size                131072          

key_buffer_size                 8388600         

language                        /usr/local/mysql/share/mysql/english/

large_files_support             ON              

local_infile                    ON              

locked_in_memory                OFF             

log                             OFF             

log_update                      OFF             

log_bin                         OFF             

log_slave_updates               OFF             

log_slow_queries                OFF             

log_warnings                    OFF             

long_query_time                 10              

low_priority_updates            OFF             

lower_case_table_names          OFF             

max_allowed_packet              1048576         

max_binlog_cache_size           4294967295      

max_binlog_size                 1073741824      

max_connections                 1000             

max_connect_errors              10              

max_delayed_threads             20              

max_heap_table_size             16777216        

max_join_size                   4294967295      

max_relay_log_size              0               

max_seeks_for_key               4294967295      

max_sort_length                 1024            

max_user_connections            0               

max_tmp_tables                  32              

max_write_lock_count            4294967295      

myisam_max_extra_sort_file_size 268435456       

myisam_max_sort_file_size       2147483647      

myisam_repair_threads           1               

myisam_recover_options          OFF             

myisam_sort_buffer_size         8388608         

net_buffer_length               16384           

net_read_timeout                30              

net_retry_count                 10               

net_write_timeout               60              

new                             OFF             

open_files_limit                0               

pid_file                        /usr/local/mysql/data/file.superuser.co.kr.pid

log_error                                        

port                            3306            

protocol_version                10              

read_buffer_size                131072          

read_only                       OFF             

read_rnd_buffer_size            262144          

rpl_recovery_rank               0               

query_cache_limit               1048576         

query_cache_size                0               

query_cache_type                ON              

server_id                       0               

slave_net_timeout               3600            

skip_external_locking           ON              

skip_networking                 OFF             

skip_show_database              OFF             

slow_launch_time                2               

socket                          /tmp/mysql.sock 

sort_buffer_size                2097144         

sql_mode                        0               

table_cache                     256              

table_type                      MYISAM          

thread_cache_size               0               

thread_stack                    196608          

tx_isolation                    REPEATABLE-READ 

timezone                        KST             

tmp_table_size                  33554432         

tmpdir                          /tmp/           

version                         4.0.14          

wait_timeout                    300

 

 

 

 

ㅇ 제작자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 성수

 

ㅇ 본강좌의 자세한 정보 : http://www.superuser.co.kr/linuxcommandbible/

 

 

 

 


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1374


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
박성수
파파
헐렁고수