[MySQL][Admin] - 기본으로 제공되는 프로그램들

MySQL설치 후 제공하는 프로그램들이 여러가지가 있습니다. 개인적으로 생각하기엔 잘 알려지지 않은것들도 있다고 생각합니다. 이번기회에 제공되는 프로그램들을 정리해보면서 어떤것들이 있고 이런 유용한 기능들이 있다는것을 공유해보고 싶어서 이렇게 실습을 통해 정리해 보고자 합니다.

 

■ MySQL서버 서버 시작에 관련된 프로그램들

+ mysqld

MySQL 핵심 프로그램으로 data 디렉토리를 읽어 제어하는 메인 프로세스 입니다. MySQL에서 가장 중요한 프로그램이라 있습니다. 프로그램이 수행할 있는 목록을 확인해보고 싶다면 다음과 같이 명령을 입력해 보시면 됩니다.

shell> mysqld --verbose --help

 

+ mysqld_safe

MySQL 소스 설치 한번 실행해 보았던 명령어입니다. MySQL 서버를 수행할 쓰는 명령어입니다. Shell Script 작성되어 있습니다. 단독으로 수행하는게 아니라 몇가지 옵션을 받아서 수행합니다. 대표적인 옵션은 다음과 같습니다.

--base-dir : mysql 설치 디렉토리 입니다.

--data-dir : data 디렉토리 입니다.

--defaults-file : my.cnf 위치를 지정합니다.

--port : 사용할 port 지정합니다.

--user : mysql서버를 실행할 user 입력합니다.

 

그외 많은 옵션을 보고 싶으시다면 다음을 참고하시면 됩니다.

https://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html

 

+ mysql.server

mysqld_safe 이용하여 mysql 서버를 손쉽게 실행하고 종료할 있는 스크립트입니다.

간단하게

mysql.server start

mysql.server stop

으로 시작과 종료를 있습니다.

보통은 스크립트를 /etc/init.d mysqld 라는 이름으로 재명명해서 복사하고 사용합니다.

shell > cp mysql.server /etc/init.d/mysqld

shell > /etc/init.d/mysqld start 혹은 /etc/init.d/mysql stop

 

+ mysql_multi

mysqld_multi 이용해서 여러목적의 서버를 시작할 있습니다. 통신포트를 다르게 하여 목적에 따른 서버를 여러대를 띄울 있습니다. 하나의 호스트안에 여러 MySQL 인스턴스를 띄울 있게 되는 것입니다.

목적에 맞게 개발기, 검증 서버로 2대를 띄워서 사용할 수도 있으며, 마이너 패치시 검증용으로 띄워서 테스트를 해볼 있습니다. 서버 사양만 조금 된다면 사용해볼만한 기능입니다.

 

시작과 종료 방법

shell> mysqld_multi start 17
shell> mysqld_multi stop 8,10-13

 

기능은 별도 페이지로 좀더 상세하게 다루어 보도록 하겠습니다.

https://myinfrabox.tistory.com/12

 

클라이언트 프로그램들

+ mysql

MySQL 서버에 접속하기 위한 가장 대표적인 터미널 클라이언트 프로그램입니다.

- 기본 접속 방법 접속 옵션들

터미널에서 MySQL 접속하기 위해 실행하는 대표적인 프로그램입니다. 서버에 접속해서 DDL, DML,  DCL, 시스템 명령어, 서버 상태등등을 체크하고 확인합니다.

기본적으로 mysql 이용해서 서버에 접속하는 방법은 다음과 같습니다.

shell > mysql -u user1 -p -h 100.100.100.100
Enter password:

이렇게 하면 -p 옵션으로 인해 암호를 물어봅니다. 이때 암호를 입력하면 로그인이 됩니다. 로그인이 완료되면 아래와 같은 프롬프트가 뜨게 됩니다.

mysql >

프롬프트가 보이면 비로소 명령을 수행할 있는 상태가 것입니다.  이곳에 select,insert, update delete같은 dml부터 테이블을 생성하고 삭제하는 DDL, 그리고 MySQL 여러 명령어를 수행할 있는 상태가 되는 것입니다. 위의 예제에서 사용된 옵션은 다음과 같습니다.

--user, -u : 사용자

--password, -p : 암호 프롬프트

--host, -h : 접속할 서버의 IP

외에도 많은 접속 옵션을 제공합니다. 많은 옵션은 아래를 참고하시면 됩니다.

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

mysql 프로그램은 이외에도 정말 많은 기능을 제공합니다. 별도 페이지에서 좀더 자세히 설명드리겠습니다.

 

+ mysqladmin

이름에서도 느껴지듯 MySQL 서버에 관리 명령을 내리는 프로그램입니다. 데이터베이스를 만들기도 하고 삭제도 가능하며, 클라이언트 접속 상태, log관리, 관리자 암호 변경등 많은 일을 합니다.

사용법은 다음과 같습니다.

shell > mysqladmin [옵션들] 명령어

 

대표적인 명령을 정리해보면 다음과 같습니다.

mysqladmin create [db] : 데이터베이스만들기

mysqladmin : drop [db] : 데이터베이스 삭제

mysqladmin flush <명령어> : hosts, logs, privileges flush 관련된 명령어들

mysqladmin kill <thread id> : 쓰레드 kill

mysqladmin password : 암호 바꾸기

mysqladmin <관리명령어> : ping, processlist, refresh, shutdown등등 서버 관리에 관련된 여러가지 명령어

이외에도 많은 기능을 제공합니다. 다른 옵션들과 명령어들을 확인하고 싶으시면 다음 페이지를 참고 합니다.

https://dev.mysql.com/doc/refman/5.7/en/mysqladmin.html

 

+ mysqlcheck

테이블 유지보수, 관리 프로그램입니다. 테이블을 검사하고, 고치고, 분석하고, 최적화하는 프로그램입니다. Read Lock Write Lock 걸리며 해당 테이블을 검사시 이용할 없습니다. 프로그램은 MySQL 업그레이드 시에도 내부적으로 사용됩니다. 또한 mysql 명령인 CHECK TABLE, REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE 명령이 상황에 따라 자동적으로 수행됩니다. 또한 모든 스토리지 타입이 지원되지는 않습니다. 예를 들어 메모리 스토리지 엔진 테이블은 실행이 되지 않고 에러를 출력합니다.

 

사용법은 다음과 같습니다.

1. 특정 db 특정 테이블만 체크할때

shell> mysqlcheck [options] db_name [tbl_name ...]

2. 특정 데이터베이스만의 모든 테이블을 체크할때.

shell> mysqlcheck [options] --databases db_name ...

3. 모든 데이터베이스안의 모든 테이블을 체크할때.

shell> mysqlcheck [options] --all-databases

 

예제>

1. checkdb라는 데이터베이스의 t1 테이블을 검사합니다.

shell> mysqlcheck --defaults-file=/etc/my.cnf --user=root -p checkdb t1;
Enter password:
checkdb.t1                                         OK

2. checkdb라는 데이터베이스 모두를 검사합니다.

shell > mysqlcheck --defaults-file=/etc/my.cnf --user=root -p --databases checkdb
Enter password: 
checkdb.t1                                         OK
checkdb.t2                                         OK

3. 모든 데이터베이스안의 모든 테이블을 검사합니다.

shell > mysqlcheck --defaults-file=/etc/my.cnf --user=root -p --all-databases
Enter password: 
checkdb.t1                                         OK
checkdb.t2                                         OK
checkdb2.t3                                        OK
checkdb2.t4                                        OK
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
...

 

옵션의 대부분은 접속과 접속을 하기 위한 환경 변수가 대부분입니다. 다음의 페이지를 참고하여 자신에게 맞는 옵션을 선택해서 사용하시면 됩니다.

https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html

 

+ mysqlshow

database에 대해 정보를 보여주는 프로그램으로서 database, table, column등의 정보를 출력합니다. 데이터베이스, 테이블의 스키마 구조를 확인 있습니다. 사용법은 다음과 같습니다.

shell> mysqlshow [options] [db_name [tbl_name [col_name]]]

 

사용 예제 :

1. 특정 데이터베이스에 대해서 알아볼때

shell > mysqlshow --defaults-file=/etc/my.cnf --user=root -p checkdb
Enter password: 
Database: checkdb
+--------+
| Tables |
+--------+
| t1     |
| t2     |
+--------+

 

2. 특정 데이터베이스의 특정 테이블에 대해서 알아볼때

shell > mysqlshow --defaults-file=/etc/my.cnf --user=root -p checkdb t1
Enter password: 
Database: checkdb  Table: t1
+-------+----------+-------------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type     | Collation         | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+----------+-------------------+------+-----+---------+-------+---------------------------------+---------+
| c1    | int(11)  |                   | YES  |     |         |       | select,insert,update,references |         |
| c2    | char(20) | latin1_swedish_ci | YES  |     |         |       | select,insert,update,references |         |
+-------+----------+-------------------+------+-----+---------+-------+---------------------------------+---------+

 

3. 특정 데이터베이스-특정 테이블-특정 컬럼에 대해서 알아볼때

shell > mysqlshow --defaults-file=/etc/my.cnf --user=root -p checkdb t1 c1
Enter password: 
Database: checkdb  Table: t1  Wildcard: c1
+-------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type    | Collation | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
| c1    | int(11) |           | YES  |     |         |       | select,insert,update,references |         |
+-------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+

 

옵션의 대부분은 접속과 접속을 하기 위한 환경 변수가 대부분입니다. 다음의 페이지를 참고하여 자신에게 맞는 옵션을 선택해서 사용하시면 됩니다.

https://dev.mysql.com/doc/refman/5.7/en/mysqlshow.html

 

 

+ mysqlslap

MySQL진단 프로그램. 서버에 다수의 가상 클라이언트를 붙이고 부하를 줘서 성능에 대해 진단해주는 프로그램입니다. 스테이지에 대해 사용한 시간을 분석해줍니다.

옵션중에 --create 혹은 --query sql문법을 포함한 스트링 문자열 이거나 파일입니다. 만약 특정 파일일경우 그안에는 sql문법이 라인으로 되어 있어야 합니다. --delimeter옵션을 사용할거라면 특정 문자를 지정해서 구분자를 명시해주어야 합니다. 파일안에는 주석같은게 없어야 하고 순수 내용만 있어야 합니다.

mysqlslap 3가지 스텝으로 진행됩니다.

1. 스키마, 테이블 그리고 선택사항으로 프로시저나 테스트에 필요한 데이터를 만듭니다. 스텝에서는 하나의 클라이언트를 사용합니다.

2. 부하테스트를 진행합니다. 이때는 많은 클라이언트가 접속을 합니다.

3. 정리단계입니다. 필요하다면 접속종료와 테이블 삭제를 합니다. 스텝에서는 하나의 접속만 남아있게 됩니다.

 

사용방법 :

shell> mysqlslap [options]

 

사용예제입니다.

1. 자신이 만든 SQL문을 수행하고, 50개의 접속을 생성합니다. 한번의 수행마다 50개의 select문법을 200 날리는 예제입니다.

shell > mysqlslap --defaults-file=/etc/my.cnf --user=root -p --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" --query="SELECT * FROM a" --concurrency=50 --iterations=200
Enter password: 
Benchmark
        Average number of seconds to run all queries: 0.007 seconds
        Minimum number of seconds to run all queries: 0.006 seconds
        Maximum number of seconds to run all queries: 0.054 seconds
        Number of clients running queries: 50
        Average number of queries per client: 1

이렇게 하면 내부적으로 mysqlslap이라는 데이터베이스를 만들고 위와 같은 테스트를 통해서 결과를 출력해 줍니다. 테스트가 완료되면 mysqlslap 데이터베이스는 삭제 됩니다.

 

2. 테이블과 데이터를 자동으로 생성하고 테스트하는 방법입니다. int컬럼 2, char컬럼 3개를 가지는 테이블을 만들고 그안의 데이터는 자동으로 생성합니다. 그리고 동시에 5개의 클라이언트가 붙습니다. 한번의 수행마다 컬럼 작업을 5개의 클라이언트가 수행하고 이런작업을 200 수행합니다.

shell > mysqlslap --defaults-file=/etc/my.cnf --user=root -p --concurrency=5 --iterations=200 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql
Benchmark
        Average number of seconds to run all queries: 0.010 seconds
        Minimum number of seconds to run all queries: 0.008 seconds
        Maximum number of seconds to run all queries: 0.037 seconds
        Number of clients running queries: 5
        Average number of queries per client: 0

이렇게 하면 내부적으로 마찬가지로 mysqlslap이라는 데이터베이스를 만들고 위와 같은 테스트를 통해서 결과를 출력해 줍니다. 테스트가 완료되면 mysqlslap 데이터베이스는 삭제 됩니다.

생성된 실제 테이블을 확인해보면 다음과 같이 테이블이 생성됩니다.

mysql> show tables;
+---------------------+
| Tables_in_mysqlslap |
+---------------------+
| t1                  |
+---------------------+
1 row in set (0.00 sec)

mysql> desc t1;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| intcol1  | int(32)      | YES  |     | NULL    |       |
| intcol2  | int(32)      | YES  |     | NULL    |       |
| charcol1 | varchar(128) | YES  |     | NULL    |       |
| charcol2 | varchar(128) | YES  |     | NULL    |       |
| charcol3 | varchar(128) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> select * from t1;
+---------+---------+-----------------------------------+-----------------------------------+-----------------------+
| intcol1 | intcol2 | charcol1                          | charcol2                          | charcol3              |
+-------------------+-----------------------------------+-----------------------------------+-----------------------+
| 1804283 |  84886  | xvtvmC9127qJNm06sGB8R92q2j7vT     | 97RGHZdRF48B2oz3m8gMBAl11W        | teTLfGCvE4zTZwWvgM    |
...........
| 1367744 |  441924 | xvtvmC9127qJNm06sGB8R92q2j7vT     | 4iCRchy51r3WQEEdvNyMxDvZHEe       | jbJlpd9pgvCr0iKmDcT4  |
+--------+--------+-------------------------------------+-----------------------------------+-----------------------+

데이터의 일부만 발췌했습니다.

 

3. 자신이 직접 시나리오 파일을 만들어 수행하는 방법입니다. 특정파일안에 테이블 생성, 데이터 입력, 그리고 DML조작(select, insert, update, delete) 이후 테이블 삭제등을 만들어 시나리오 파일을 부하에 직접 이용하는 것입니다. 파일은 마지막에 세미콜론(;) 반드시 있어야 하며 세미콜론(;) 이용해서 하나의 명령으로 인식합니다.

먼저 ddl 파일을 만듭니다.

shell > vi create.sql
create table t1 (c1 int, c2 char(20));
create table t2 (c1 int, c2 char(20));
insert into t1 values(1,'1');
insert into t2 values(2,'1');
insert into t1 values(1,'2');
insert into t2 values(1,'2');

그리고 테이블을 호출할 dml 파일을 만듭니다.

shell > vi query.sql
select * from t1;
select * from t2;

 

그리고 mysqlslap프로그램을 호출합니다. 테이블 생성정보는 create.sql 있습니다. 쿼리 정보는 query.sql 있습니다. 동시접속 정보는 5이며 반복적으로 200 수행합니다. 파일안의 구분자는 ; 입니다.

shell > mysqlslap  --defaults-file=/etc/my.cnf --user=root -p --concurrency=5 --iterations=4000 --query=query.sql --create=create.sql --delimiter=";"
Enter password: 
Benchmark
        Average number of seconds to run all queries: 0.001 seconds
        Minimum number of seconds to run all queries: 0.001 seconds
        Maximum number of seconds to run all queries: 0.051 seconds
        Number of clients running queries: 5
        Average number of queries per client: 2

이렇게 하면 동시 부하가 5세션이에 일어나며 같은 작업을 200 수행합니다. 그리고 위의 결과가 나오게 됩니다.

 

부하가 진행되는 동안 마찬가지로 데이터를 확인해 보겠습니다.

mysql> show tables;
+---------------------+
| Tables_in_mysqlslap |
+---------------------+
| t1                  |
| t2                  |
+---------------------+

mysql> desc t1;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| c1    | int(11)  | YES  |     | NULL    |       |
| c2    | char(20) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from t1;
+------+------+
| c1   | c2   |
+------+------+
|    1 | 1    |
|    1 | 2    |
+------+------+
2 rows in set (0.00 sec)

테이블 데이터를 확인해 보면 insert쿼리를 날렸던 데이터가 들어가 있는걸 확인해보실 있습니다.

 

좀더 자세한 내용은 다음 페이지를 참고하시면 됩니다. 옵션의 대부분은 접속과 접속을 하기 위한 환경 변수가 대부분이지만 자신에게 맞는 옵션을 선택해서 사용하시면 됩니다.

https://dev.mysql.com/doc/refman/5.7/en/mysqlslap.html

 

 

관리 유틸리티 프로그램들

+ innochecksum

InnoDB파일 체크썸 유틸리티입니다. InnoDB 테이블 스페이스 파일을 읽어들여 문제가 있는지 없는지,  손상이 되었는지에 대해 계산하고 검사하여 각각의 페이지가 이상이 없는지 여부를 판단합니다. 사용방법은 다음과 같습니다.

shell> innochecksum [options] file_name

먼저 데이터 디렉토리로 이동 테스트를 합니다. 만약 현제 디렉토리에서 하고 싶다면 ibd파일 위치를 절대경로 혹은 상대 경로로 입력해 줍니다.

shell > innochecksum /usr/local/mysql/data/t1.ibd

 

- 기본 테스트

shell> innochecksum t1.ibd --log=test.log
shell > cat test.log
InnoDB File Checksum Utility.
Filename = t1.ibd
Innochecksum: checking pages in range 0 to 5
page::0; log sequence number:first = 2628762; second = 2628762
page::0; old style: calculated = 2931493321; recorded = 4168728489
page::0; new style: calculated = 1235888764; crc32 = 4168728489; recorded = 4168728489
page::1; log sequence number:first = 2625679; second = 2625679
page::1; old style: calculated = 433836595; recorded = 1662692925
page::1; new style: calculated = 2699779533; crc32 = 1662692925; recorded = 1662692925
page::2; log sequence number:first = 2628762; second = 2628762
page::2; old style: calculated = 3293334578; recorded = 3963093276
page::2; new style: calculated = 2913705765; crc32 = 3963093276; recorded = 3963093276
page::3; log sequence number:first = 2628762; second = 2628762
page::3; old style: calculated = 1577514149; recorded = 550063751
page::3; new style: calculated = 2527689163; crc32 = 550063751; recorded = 550063751
page::4; log sequence number:first = 0; second = 0
Page::4 is empty and uncorrupted
page::5; log sequence number:first = 0; second = 0
Page::5 is empty and uncorrupted

 

- 페이지 갯수 확인

shell > innochecksum --count t1.ibd --log=test.log               
Number of pages:6

 

- 페이지를 검사할 시작구간 정하기

shell > innochecksum --start-page=3 t1.ibd --log=test.log 
shell > cat test.log 
InnoDB File Checksum Utility.
Filename = t1.ibd
Innochecksum: checking pages in range 3 to 5
page::3; log sequence number:first = 2628762; second = 2628762
page::3; old style: calculated = 1577514149; recorded = 550063751
page::3; new style: calculated = 2527689163; crc32 = 550063751; recorded = 550063751
page::4; log sequence number:first = 0; second = 0
Page::4 is empty and uncorrupted
page::5; log sequence number:first = 0; second = 0
Page::5 is empty and uncorrupted

 

- 페이지를 검사할 끝구간 정하기

shell > innochecksum --end-page=3 t1.ibd --log=test.log 
cat test.log 
InnoDB File Checksum Utility.
Filename = t1.ibd
Innochecksum: checking pages in range 0 to 3
page::0; log sequence number:first = 2628762; second = 2628762
page::0; old style: calculated = 2931493321; recorded = 4168728489
page::0; new style: calculated = 1235888764; crc32 = 4168728489; recorded = 4168728489
page::1; log sequence number:first = 2625679; second = 2625679
page::1; old style: calculated = 433836595; recorded = 1662692925
page::1; new style: calculated = 2699779533; crc32 = 1662692925; recorded = 1662692925
page::2; log sequence number:first = 2628762; second = 2628762
page::2; old style: calculated = 3293334578; recorded = 3963093276
page::2; new style: calculated = 2913705765; crc32 = 3963093276; recorded = 3963093276
page::3; log sequence number:first = 2628762; second = 2628762
page::3; old style: calculated = 1577514149; recorded = 550063751
page::3; new style: calculated = 2527689163; crc32 = 550063751; recorded = 550063751

 

- 특정 페이지 검사

shell > innochecksum --page=3  t1.ibd --log=test.log 
cat test.log 
InnoDB File Checksum Utility.
Filename = t1.ibd
Innochecksum: checking pages in range 3 to 3
page::3; log sequence number:first = 2628762; second = 2628762
page::3; old style: calculated = 1577514149; recorded = 550063751
page::3; new style: calculated = 2527689163; crc32 = 550063751; recorded = 550063751

 

- 페이지 타입 확인하기

shell > innochecksum --page-type-summary  t1.ibd --log=test.log 
File::t1.ibd
================PAGE TYPE SUMMARY==============
#PAGE_COUNT     PAGE_TYPE
===============================================
       1        Index page
       0        Undo log page
       1        Inode page
       0        Insert buffer free list page
       2        Freshly allocated page
       1        Insert buffer bitmap
       0        System page
       0        Transaction system page
       1        File Space Header
       0        Extent descriptor page
       0        BLOB page
       0        Compressed BLOB page
       0        Other type of page
===============================================
Additional information:
Undo page type: 0 insert, 0 update, 0 other
Undo page state: 0 active, 0 cached, 0 to_free, 0 to_purge, 0 prepared, 0 other

 

많은 옵션과 상세 설명은 다음 페이지를 참고하시면 됩니다.

https://dev.mysql.com/doc/refman/5.7/en/innochecksum.html

 

+ myisam_ftdump

MyISAM테이블의 텍스트 인덱스에 대한 정보를 보여줍니다. 사용방법은 다음과 같습니다

shell> myisam_ftdump [options] tbl_name index_num

만약 다음과 같은 테이블로 생성이 되어 있다면...

CREATE TABLE mytexttable
(
  id   INT NOT NULL,
  txt  TEXT NOT NULL,
  PRIMARY KEY (id),
  FULLTEXT (txt)
) ENGINE=MyISAM;

 

만약 데이터 디렉토리의 해당 데이터 베이스가 현제 디렉토리라면 다음과 같이 확인합니다.

shell> myisam_ftdump mytexttable 1

만약 다른 디렉토리라면 전체 디렉토리를 입력해 주어야 합니다.

shell> myisam_ftdump /usr/local/mysql/data/test/mytexttable 1

결과는 다음과 같습니다.

shell > myisam_ftdump mytexttable 1
Total rows: 0
Total words: 0
Unique words: 0
Longest word: 0 chars ((3c)
Median length: 0
Average global weight: -nan
Most common word: 0 times, weight: 0.000000 (~8c)

 

자세한 옵션과 사용법은 다음을 참고하시기 바랍니다.

https://dev.mysql.com/doc/refman/5.7/en/myisam-ftdump.html

 

+ myisamchk

MyISAM 형식의 테이블에 대해서 고치고 유지보수하는 명령어입니다. 자세한 내용은 다음 페이지 참고 부탁드립니다.

https://dev.mysql.com/doc/refman/5.7/en/myisamchk.html

 

+ myisamlog

MyISAM 테이블이 로그를 확인하는 명령어입니다 다음페이지를 참고 부탁드립니다.

https://dev.mysql.com/doc/refman/5.7/en/myisamlog.html

 

+ myisampack

MyISAM 테이블을 압축합니다. 최대 40%~70%까지 압축이 가능하다고 합니다.

자세한 내용은 아래 페이지를 참고 부탁드립니다.

https://dev.mysql.com/doc/refman/5.7/en/myisampack.html

 

+ mysql_config_editor

접속 환경 생성 편집 프로그램입니다. MySQL서버가 여러대 있을때, 혹은 서버에 인스턴스가 여러개 실행되고 있을때 모두 외우기란 힘들 것입니다. 물론 서버 정보를 메모해 두거나 Query Tool 접속할때는 접속정보가 저장되어 있기 때문에 상관없지만 터미널로 접속을 해야 경우가 있습니다. 이때 접속정보를 모른다면 낭패를 수도 있습니다. 

이럴때 접속정보를 쉽게 작성하는 방법이 있습니다. 바로 mysql_config_editor 이용하면 쉽게 관리할 있습니다.

mysql_config_editor프로그램을 이용하면 로그인한 디렉토리에 .mylogin.cnf 이란 파일명으로 저장이 됩니다. 파일은 숨김 파일로 작성되기 때문에 ls 명령어에 반드시 -a 옵션을 붙여서 모두 보기로 하셔야 보입니다. 파일은 MySQL에서는 login path file이라 부릅니다.

 

login path file 다음의 내용으로 구성되어 있습니다. 파일안의 내용은 host, user, password, port, socket으로 구성되어 있습니다. 접속에 필요한 정보 모두가 들어가 있다고 보셔도 됩니다. 그러나 파일은 이진 파일로 되어 있어 열어보셔도 내용은 알수 없습니다. 그냥 아래 내용으로 구성되어 있다고 생각하시면 됩니다. 물론 따로 확인할 있는 명령어가 있습니다.

 

예제 샘플을 보겠습니다.

[client]
user = mydefaultname
password = mydefaultpass
host = 127.0.0.1

[mypath]
user = myothername
password = myotherpass
host = localhost

 

터미널에서 mysql 이란 기본적인 명령만 입력하면 mysql 환경파일의 client 읽어들입니다. /etc/my.cnf 보통 client라는 섹션이 있는데 이곳을 읽어들이는 겁니다. 만약 디렉토리에 .mylogin.cnf파일이 디렉토리에 존재하고 특정 login path 입력하면 디렉토리에서 .mylogin.cnf파일의 로그인 패스를 읽어들여 로그인을 시도하게 됩니다.

이렇게 명령을 입력하면 됩니다.

shell> mysql --login-path=mypath

이렇게 하면 위의 예제에 있는 [mypath]라는 접속정보를 읽어들여 서버로 접속을 하게 되는 것입니다.

login path 여러개를 등록시켜 놓으면 서버 정보를 모르더라도 .mylogin.cnf파일을 보면 어떤 서버에 접속할 있는지 알게 되는것입니다. 또한 로그인한 디렉토리에만 저장되기 때문에 다른 사람들은 알수가 없습니다. 또한 파일 자체가 위에서도 얘기했듯이 이진파일로 저장되기 때문에 안전하게 보관할 있습니다.

 

만약 .mylogin.cnf 파일이름이 싫거나 보안상의 이유로 다른 이름으로 지정하고 싶으시면 환경변수를 지정해서 사용하셔도 됩니다.

.bash_profile 다음 환경변수를 입력합니다.

shell> export MYSQL_TEST_LOGIN_FILE=myserverinfo.cnf

 

이제 생성 방법을 알아보겠습니다.

shell> mysql_config_editor set --login-path=client \
--host=localhost --user=localuser --password
Enter password: 

암호를 입력해 줍니다.

shell> mysql_config_editor set --login-path=remote \
--host=remote.example.com --user=remoteuser --password
Enter password:

암호를 입력해 줍니다.

기본적인 client remote라는 login path 생성하는 예제입니다. mysql_config_editor 입력하시고 set 입력하면 새로 설정하겠다는 의미입니다. 나머지 옵션들에 맞게 입력하시고 마지막으로 암호를 입력해 주시면 됩니다.

 

새롭게 만들어 주었다면 확인을 해봐야 하겠습니다. 다음의 명령어로 확인을 해볼 있습니다.

shell> mysql_config_editor print --all

[client]
user = localuser
password = *****
host = localhost

[remote]
user = remoteuser
password = *****
host = remote.example.com

 

제거를 하는 방법은 다음과 같습니다.

shell> mysql_config_editor remove --login-path=remote
shell > mysql_config_editor print --all   

[client]
user = localuser
password = *****
host = localhost

이렇게 등록해 두시면 터미널에 들어오신다 하더라도 접속정보를 모른다 하더라도 손쉽게 접근하실 있습니다.

 

+ mysqldumpslow

slow query log 파일을 요약정리해서 출력해주는 프로그램입니다. 사전에 지정해둔 특정시간 이상으로 쿼리가 수행될때 MySQL에서는 슬로우 쿼리라고 부릅니다. 그리고 슬로우 쿼리를 로깅하는 파일을 Slow query log라고 합니다. 그런데 슬로우 쿼리가 많이 기록되다보면 보기 어려운 경우가 있습니다. 이럴때 프로그램을 이용해서 요약본으로 수가 있습니다.

사용법은 다음과 같습니다.

shell> mysqldumpslow [options] [log_file ...]

 

사용예제입니다.

shell> mysqldumpslow

Reading mysql slow query log from /usr/local/mysql/data/mysqld57-slow.log
Count: 1  Time=4.32s (4s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost
 insert into t2 select * from t1

Count: 3  Time=2.53s (7s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost
 insert into t2 select * from t1 limit N

Count: 3  Time=2.13s (6s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost
 insert into t1 select * from t1

 

보시는바와 같이 어떤 쿼리가 많이 수행되었는지 그리고 수행된 쿼리는 무엇인지, 접속유저는 누구인지등을 확인해 보실 있습니다.

 

사용해볼만한 옵션들은 다음과 같습니다.

-n : 몇개까지 출력할지 보여줍니다. 10개의 쿼리만 출력하고 싶다면 10 입력하시면 됩니다.

-g : 리눅스나 유닉스의 grep 패턴. 특정단어가 포함된 결과만 출력합니다. 원하는 쿼리나 특정 테이블명만 알고 있을때 이용하면 편리합니다.

-r : 정렬순서를 역순으로 정리합니다. 기본값은 오름차순입니다. 많은 순으로 뽑고싶다면 붙여야 옵션입니다.

-s : 출력시 정렬방법을 정의합니다.

t, at: 쿼리 수행 시간 혹은 같은 쿼리가 여러개 있을경우 평균 쿼리 시간으로 정렬합니다.

l, al: 락이 걸린 시간이 혹은 같은 락이 여러개 있을경우 평균 락이 걸린 시간

r, ar: 전송 로우 혹은 평균 전송 로우수

c : 갯수별로 정렬

 

좀더 상세한 옵션 설명은 다음 페이지를 참고하시면 됩니다.

https://dev.mysql.com/doc/refman/5.7/en/mysqldumpslow.html

 

 

정리하며...

이렇게 MySQL 홈페이지에서 나와있는 내용을 토대로 제공하는 기본 프로그램을 알아보았습니다. 이중에서 mysqlbackup mysqlpump라는 백업 프로그램이 있는데 중요한 내용이 많고 반드시 어떻게 전략적으로 사용할지 알아야 하는 내용이라 별도 포스트로 작성하겠습니다. mysqlbinlog또한 백업, 복구에 중요하고 또한 데이터 손실시 복구할 있는 유일한 내용이라 중요한 내용이 많습니다. 그래서 이것도 별도 페이지로 작성하겠습니다.

이외에도 MyISAM 관련 프로그램이 몇개 소개되어 있습니다. 하지만 현제는 InnoDB 절대적으로 많이 쓰이고 있고 거의 MyISAM 특수한 경우가 아닌이상 쓰이지 않으므로 여기에서는 별도로 다루지는 않겠습니다. 하지만 MyISAM의 프로그램 내용이 필요하신분은 별도로 말씀 부탁드립니다.

 

※도움이 되셨다면 광고클릭 한번 부탁드립니다.※

 

Designed by JB FACTORY