DBMS 2

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

mysqlhotcopy, mysqlimport, mysqlshow, mysql_zap, perror, replace

DBMS 2
MySQL 가이드
클라이언트 및 유틸리티 프로그램
mysqlhotcopy, mysqlimport, mysqlshow, mysql_zap, perror, replace
작성자
admin
작성일
2021-02-19 10:59
조회
818

mysqlhotcopy - 데이터 베이스 백업 프로그램

Mysqlhotcopy는 Perl 스크립트로서 Tim Bunce이 작성한 프로그램이다. 이것은 데이터 베이스 백업을 빠르게 실행하기 위해 LOCK TABLES, FLUSH TABLES, 그리고 cp 또는 scp를 사용한다. 이것은 데이터 베이스 또는 단일 테이블을 백업하는데 가장 빠른 방법이기는 하지만, 데이터 베이스 디렉토리가 설치되어 있는 동일 머신에서만 구동을 한다. Mysqlhotcopy는 MyISAM 및 ARCHIVE 테이블 백업만을 할 수 있다. 이것은 유닉스와 NetWare에서 구동이 된다.



shell> mysqlhotcopy db_name [/path/to/new_directory] 

shell> mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory


레귤러 수식과 매치가 되는 주어진 데이터 베이스에 있는 테이블을 백업한다:



shell> mysqlhotcopy db_name./regex/ 

테이블 이름에 대한 레귤러 수식은 (‘~’)를 앞에 사용해서 이름을 무시하도록 할 수 있다:



shell> mysqlhotcopy db_name./~regex/ 


mysqlhotcopy는 아래의 옵션을 지원한다:


  • --help, -?
    도움말을 출력하고 빠져 나온다.
  • --addtodest
    목적 디렉토리(존재 한다면)의 이름을 변경하지 않는다; 단순히 파일을 여기에 추가만 한다.
  • --allowold
    목적 디렉토리가 있으면 종료를 하지 않는다; _old 접미사를 추가해서 이것의 이름을 변경 시킨다.
  • --checkpoint=db_name.tbl_name
    체크 포인트 엔트리를 지정 데이터 베이스 db_name 와 테이블 tbl_name에 삽입한다.
  • --chroot=path
    mysqld이 연산을 하는 chroot 자일(jail)의 베이스 디렉토리. path 값은 mysqld에 주어지는 --chroot 옵션과 매치가 되어야 한다.
  • --debug
    디버그 결과 값을 활성화 시킨다.
  • --dryrun, -n
    액션(action)을 실행하지 않고 레포트만 한다.
  • --flushlog
    모든 테이블이 잠긴 후에 로그를 플러시한다.
  • --host=host_name, -h host_name
    로컬 서버에 TCP/IP접속을 만들기 위해 사용할 로컬 호스트의 호스트 이름. 디폴트로는, 유닉스 소켓 파일을 사용해서 localhost에 접속을 하게 된다.
  • --keepold
    실행을 마친 후에 이전(변경된) 목적 디렉토리를 삭제하지 않는다.
  • --method=command
    파일 복사를 위한 방법 (cp 또는 scp).
  • --noindices
    백업에 전체 인덱스 파일을 포함 시키지 않는다. 이렇게 하면 백업 파일이 작아지고 속도가 빨라진다. 다시 읽혀지는 테이블에 대한 인덱스는 나중에 myisamchk -rq를 사용해서 구조를 변경 시킬 수가 있다.
  • --password=password, -ppassword
    서버에 접속을 할 때 사용할 패스워드. 이 옵션의 경우에는 다른 MySQL 프로그램과는 달리 패스워드를 반드시 지정해야 한다는 점을 알아두기 바란다. 여러분은 옵션 파일을 사용해서 패스워드를 지정할 수 있다.
  • --port=port_num, -P port_num
    로컬 서버에 접속을 할 때 사용할 TCP/IP 포트 번호.
  • --quiet, -q
    에러가 아니면 침묵 모드를 유지한다.
  • --record_log_pos=db_name.tbl_name
    마스터 및 슬레이브의 상태를 지정 데이터 베이스 db_name 과 테이블 tbl_name에 기록한다.
  • --regexp=expr
    주어진 레귤러 수식과 매치가 되는 이름을 사용해서 모든 데이터 베이스를 복사한다.
  • --resetmaster
    모든 테이블을 잠근 다음에 바이너리 로그를 리셋 시킨다.
  • --resetslave
    모든 테이블을 잠근 다음에 master.info 파일을 리셋 시킨다.
  • --socket=path, -S path
    접속에 사용할 유닉스 소켓 파일.
  • --suffix=str
    복사된 데이터 베이스의 이름에 사용할 접미사.
  • --tmpdir=path
    임시 디렉토리. 디폴트는 /tmp.
  • --user=user_name, -u user_name
    서버에 접속을 할 때 사용할 MySQL 사용자 이름.

mysqlhotcopy는 옵션 파일에서 [client] 와 [mysqlhotcopy] 옵션 그룹을 읽는다.

mysqlhotcopy를 실행하기 위해서는, 여러분이 백업을 하는 테이블에 대한 파일에 접속을 해야 하고, 그러한 테이블에 대한 SELECT 권한, RELOAD 권한 (FLUSH TABLES를 실행하기 위해서), 그리고 LOCK TABLES 권한 (테이블을 잠그기 위해서)을 가지고 있어야 한다.

--checkpoint 와 --record_log_pos 옵션에 필요한 테이블의 구조에 관한 정보를 포함해서 mysqlhotcopy에 대한 추가적인 정보를 얻고자 한다면, perldoc를 사용하도록 한다:



shell> perldoc mysqlhotcopy 


mysqlimport - 데이터 임포트 (Import) 프로그램

mysqlimport 클라이언트 프로그램은 LOAD DATA INFILE SQL 명령문에 대해서 명령어 라인 인터 페이스를 제공한다. mysqlimport에 대한 대부분의 옵션은 LOAD DATA INFILE 신텍스 구문과 직접적으로 상관이 된다. Section 13.2.5, “LOAD DATA INFILE 신텍스”를 참조할 것.

mysqlimport는 다음과 같이 호출한다:



shell> mysqlimport [options] db_name textfile1 [textfile2 ...] 

명령어 라인에서 지정을 한 각각의 텍스트 파일의 경우, mysqlimport는 파일 이름에서 확장자를 떼어 낸 다음에 그 값을 파일의 내용물을 임포트 할 테이블 이름으로 판단한다. 예를 들면, patient.txt, patient.text, 그리고 patient는 모두 patient 라는 이름의 테이블에 임포트가 된다.

mysqlimport는 아래의 옵션을 지원한다:


    • --help, -?
      도움말을 출력하고 빠져 나온다.
    • --character-sets-dir=path
      문자 셋이 설치되어 있는 디렉토리. Section 5.11.1, “데이터 및 정렬을 위해 사용되는 문자 셋”을 참조할 것.
    • --columns=column_list, -c column_list
      이 옵션은 콤마로 구분된 컬럼 이름 리스트를 자신의 값으로 가져간다. 컬럼 이름의 순서는 데이터 파일 컬럼을 테이블 컬럼과 어떻게 매치를 시켜야 하는지를 나타낸다.
    • --compress, -C
      클라이언트와 서버가 압축을 지원한다면 두 서버간에 전달되는 정보를 압축한다.
    • --debug[=debug_options], -# [debug_options]
      디버깅 로그를 작성한다. debug_options 스트링은 'd:t:o,file_name'.
    • --default-character-set=charset_name
      디폴트 문자 셋으로 charset_name를 사용한다. Section 5.11.1, “데이터 및 정렬을 위해 사용되는 문자 셋”을 참조할 것.
    • --delete, -D
      텍스트 파일을 임포팅 하기 전에 테이블을 비운다.
    • --fields-terminated-by=..., --fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escaped-by=..., --lines-terminated-by=...
      이 옵션들은 LOAD DATA INFILE에 대해서 상응되는 구문들과 같은 의미를 가지고 있다. Section 13.2.5, “LOAD DATA INFILE 신텍스”를 참조할 것.
    • --force, -f
      에러를 무시한다. 예를 들면, 만일 텍스트 파일에 대한 테이블이 존재하지 않는다면, 남아 있는 파일들에 대한 처리를 계속 진행한다. --force를 사용하지 않으면, 테이블이 존재하지 않을 경우에는 mysqlimport가 종료된다.
    • --host=host_name, -h host_name
      주어진 호스트 상에 있는 MySQL 서버에 데이터를 임포트 한다. 디폴트 호스트는 localhost.
    • --ignore, -i
      --replace 옵션에 대한 설명을 보여 준다.
    • --ignore-lines=N
      데이터 파일의 첫 번째 N 라인을 무시한다.
    • --local, -L
      클라이언트 호스트로부터 로컬에서 입력 파일을 읽는다.
    • --lock-tables, -l
      텍스트 파일을 처리하기 전에 쓰기를 위해 모든 테이블을 잠근다. 이것은 모든 테이블이 서버에서 동기화 되도록 해 준다.
    • --low-priority
      테이블을 읽을 때 LOW_PRIORITY 를 사용한다.
    • --password[=password], -p[password]
      서버에 접속을 할 때 사용할 패스워드. 만일 여러분이 축약형 옵션 폼 (-p)을 사용한다면, 패스워드와 옵션 사이에는 스페이스를 두지 말아야 한다. 명령어 라인에서 --password 또는 -p 옵션 다음에 패스워드를 지정하지 않으면, 프롬프트가 나오게 된다.
      --port=port_num, -P port_num
?
    • 접속에 사용할 TCP/IP 포트 번호. --protocol={TCP|SOCKET|PIPE|MEMORY}
?
    • 사용할 접속 프로토콜. --replace, -r
?
    • --replace 와 --ignore 옵션은 유니크 키 값에 존재하는 열을 복제(duplicate)하는 입력 열 처리를 제어한다. 만일 여러분이 --replace를 지정하면, 새로운 열이 동일한 유니크 키 값을 가지고 있는 현재의 열을 대체한다. 만일 --ignore를 지정하면, 유니크 키 값에 존재하는 열을 복제하는 입력 열은 무시가 된다. 만일 두 가지 중에 어느 것도 지정을 하지 않으면, 복제 키 값이 발견될 때 에러가 발생하고, 텍스트 파일의 나머지는 무시가 된다. --silent, -s
?
    • 침묵 모드. 에러가 발생할 때에만 결과 값을 만든다. --socket=path, -S path
?
    • localhost에 접속을 하는 경우에 사용되는, 유닉스 소켓 파일, 또는 윈도우 네임드 파이프의 이름. --user=user_name, -u user_name
?
    • 서버에 접속할 때 사용되는 MySQL 사용자 이름. --verbose, -v
?
    • 버보스 모드. 프로그램이 실행하는 것에 대한 정보를 자세히 출력한다. --version, -V
?
  • 버전 정보를 출력하고 빠져 나온다.

아래에서는 mysqlimport의 사용 사례를 보여 준다



shell> mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test 

shell> ed

a

100 Max Sydow

101 Count Dracula

.

w imptest.txt

32

q

shell> od -c imptest.txt

0000000 1 0 0 \t M a x S y d o w \n 1 0

0000020 1 \t C o u n t D r a c u l a \n

0000040

shell> mysqlimport --local test imptest.txt

test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0

shell> mysql -e 'SELECT * FROM imptest' test

+------+---------------+

| id | n |

+------+---------------+

| 100 | Max Sydow |

| 101 | Count Dracula |

+------+---------------+


mysqlshow - 데이터 베이스, 테이블, 그리고 컬럼 정보 표시하기

mysqlshow 클라이언트는 어떤 데이터 베이스가 있고, 어떤 테이블, 어떤 테이블 컬럼 또는 인덱스가 있는지를 쉽게 보여주는 프로그램이다.

mysqlshow는 몇몇 SQL SHOW 명령문에 대해서 명령어 라인 인터 페이스를 제공한다. Section 13.5.4, “SHOW 신텍스”를 참조할 것. 이와 같은 명령어를 직접 사용해서도 동일한 정보를 얻을 수가 있다. 예를 들면, 여러분은you can issue them from the mysql 클라이언트 프로그램에서 이것들을 입력할 수가 있다.

mysqlshow는 아래와 같이 호출한다:



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

  • 만일 아무런 데이터 베이스도 주어지지 않으면, 데이터 베이스 이름 리스트가 나오게 된다.
  • 만일 아무런 테이블도 주어지지 않으면, 데이터 베이스 있는 모든 매칭 테이블이 나오게 된다.
  • 만일 아무런 컬럼도 주어지지 않으면, 매칭되는 모든 컬럼과 컬럼 타입이 나오게 된다.

결과 값으로는 여러분이 권한을 가지고 있는 데이터 베이스, 테이블, 또는 컬럼만을 출력한다.

만일 마직막 인수가 쉘 또는 SQL 와일드 카드 문자 (‘*’, ‘?’, ‘%’, or ‘_’)를 가지고 있다면, 와일드 카드와 매치가 되는 이름만이 나오게 된다. 만일 데이터 베이스의 이름에 밑줄(underscore)이 들어가 있으면, 이러한 이름들은 올바?레시(어떤 유닉스 쉘에서는 이줄 백슬레시가 필요함)를 사용해서 이스케이스 되어야 한다. ‘*’ 및 ‘?’ 문자는 SQL에서 ‘%’ 과 ‘_’ 와일드 카드 문자로 변환된다. 이것은 여러분이 테이블 이름에 ‘_’ 가 있는 테이블을 위해서 컬럼을 출력하고자 할 때 혼란스러움을 야기 시킬 수도 있는데, 그 이유는 이와 같은 경우, mysqlshow는 이 패턴과 매치되는 테이블 이름만을 출력하기 때문이다. 이 문제는 명령어 라인에서 여분의 ‘%’를 추가해서 이것을 구분 인수로 사용하면 간단하게 해결할 수가 있다.

mysqlshow은 아래의 옵션을 지원한다:


  • --help, -?
    도움말을 출력하고 빠져 나온다.
  • --character-sets-dir=path
    문자 셋이 설치되어 있는 디렉토리. Section 5.11.1, “데이타 및 정렬을 위해 사용되는 문자 셋”을 참조할 것.
  • --compress, -C
    클라이언트 및 서버가 압축을 지원하면 둘 사이에 전달되는 정보를 압축한다.
  • --count
    테이블 당 열 수를 보여준다. 이것은 non-MyISAM 테이블에 대해서는 속도가 느리다. 이 옵션은 MySQL 5.0.6에서 추가되었다.
  • --debug[=debug_options], -# [debug_options]
    디버깅 로그를 작성한다. debug_options 스트링은 'd:t:o,file_name'.
  • --default-character-set=charset_name
    charset_name 를 디폴트 문자 셋으로 사용한다. Section 5.11.1, “데이타 및 정렬을 위해 사용되는 문자 셋”를 참조할 것.
  • --host=host_name, -h host_name
    주어진 호스트에 있는 MySQL 서버에 접속을 한다.
  • --keys, -k
    테이블 인덱스를 보여준다.
  • --password[=password], -p[password]
    서버에 접속을 할 때 사용하는 패스워드.
  • --port=port_num, -P port_num
    접속을 위해서 사용할 TCP/IP 포트 번호.
  • --protocol={TCP|SOCKET|PIPE|MEMORY}
    접속 프로토콜.
  • --show-table-type, -t
    테이블 타입을 가리키는 컬럼을 보여준다. SHOW FULL TABLES과 동일하다. 이 타입은 BASE TABLE 또는 VIEW가 된다. 이 옵션은 MySQL 5.0.4에서 추가되었다.
  • --socket=path, -S path
    localhost에 접속할 때 사용하는 유닉스 소켓 파일 또는 윈도우의 네임드 파이프 이름.
  • --status, -i
    각 테이블의 추가적인 정보를 출력한다.
  • --user=user_name, -u user_name
    서버에 접속할 때 사용하는MySQL 사용자 이름.
  • --verbose, -v
    버보스 모드(Verbose mode). 프로그램이 실행하는 정보를 자세히 보여준다. 이 옵션을 여러 번 사용하면 보다 많은 정보를 얻을 수가 있다.
  • --version, -V
    버전 정보를 출력하고 빠져 나온다.

mysql_zap - 패턴과 일치하는 프로세스 죽이기(Kill)

mysql_zap은 패턴과 일치하는 프로세스를 죽이는 프로그램이다. 이것은 ps 명령어 및 유닉스 신호를 사용하기 때문에, 유닉스와 유닉스와 유사한 시스템에서 구동이 된다.

mysql_zap은 아래와 같이 호출한다:



shell> mysql_zap [-signal] [-?Ift] pattern 

ps 명령어로부터 나오는 결과 값이 패턴을 가지고 있다면 프로세스는 매치가 된다. 디폴트로는, mysql_zap은 각 프로세스에 대해서 확답을 묻는다. y로 답을 하면 그 프로세스를 죽이라는 것이며, 또는 q 는 mysql_zap를 종료하라는 것이다. 이외의 다른 응답에 대해서는, mysql_zap는 프로세스를 죽이지 않는다.

만일 -signal 옵션을 주게 되면, 이것은 각 프로세스에 전달하기 위한 신호의 이름 또는 번호를 지정하는 것이다. 이 옵션을 주지 않게 되면, mysql_zap는 우선 TERM (signal 15)를 시도하고 그 다음에 KILL (signal 9)를 시도한다.

mysql_zap는 아래의 옵션을 지원한다:


  • --help, -?, -I 도움말을 출력하고 빠져 나온다.
  • -f 강제 모드(Force mode). mysql_zap은 아무런 확답 없이 각 프로세스를 죽이고자 시도한다.
  • -t 테스트 모드. 각 프로세스를 죽이는 대신에 각각에 대한 정보를 출력한다.

perror - 에러 코드 설명

대부분의 시스템 에러의 경우, MySQL은 내부 텍스트 메시지와 더불어, 아래의 스타일 중의 한 형태로 시스템 에러 코드를 출력하다:



message ... (errno: #) 

message ... (Errcode: #)


여러분은 시스템 설명서 또는 perror 유틸리티를 사용해서 각 에러 코드가 의미하는 내용을 알아 볼 수가 있다.

perror는 시스템 에러 코드 또는 스토리지 엔지(테이블 핸들러) 에러 코드에 대한 설명을 출력한다.

perror는 아래와 같이 호출한다:



shell> perror [options] errorcode ... 



예제:



shell> perror 13 64

Error code 13: Permission denied

Error code 64: Machine is not on the network


MySQL 클러스터 에러 코드에 대한 에러 메시지를 얻기 위해서는, perror를 --ndb 옵션과 함께 사용한다:



shell> perror --ndb errorcode 

시스템 에러 메시지의 의미는 여러분이 사용하는 OS에 관련이 되어 있다는 점을 알기 바란다. 주어진 에러 코드는 OS별로 틀리게 나올 수도 있다.



perror는 아래의 옵션을 지원한다: 

  • --help, --info, -I, -?
    도움말을 출력하고 빠져 나온다.
  • --ndb
    MySQL 클러스터 에러 코드에 대한 에러 메시지를 출력한다.
  • --silent, -s
    침묵 모드(Silent mode). 에러 메시지만을 출력한다.
  • --verbose, -v
    버보스 모드 (Verbose mode). 에러 코드와 메시지를 출력한다. 이것이 디폴트 임.
  • --version, -V
    버전 정보를 출력하고 빠져 나온다.

replace - 스트링-대체 유틸리티

replace 유틸리티 프로그램은 파일 또는 표준 입력 값에서 스트링을 변경 시킨다.

아래의 방법 중에 하나를 사용해서 replace를 호출한다:



shell> replace from to [from to] ... -- file [file] ... 

shell> replace from to [from to] ... < file


from 은 변경을 고려하는 스트링을 의미하며 to 는 대체할 스트링을 의미한다. 하나 또는 여러 쌍의 스트링이 존재할 수 있다.

-- 옵션을 사용해서 스트링 대체가 어디에서 끝이 나고 파일 이름이 어디에서 시작이 되는지를 가리킬 수가 있다. 이와 같은 경우, 명령어 라인에서 지정된 파일은 그 자리에서 수정이 되며, 따라서 여러분은 변환을 하기 전에 원본을 복사하는 것이 좋다. replace는 실제로 수정이 되는 입력 파일에 대한 내용을 출력한다.

만일 - 옵션이 주어지지 않으면, replace는 표준 입력 값을 읽게 되고 표준 결과 값을 작성하게 된다.

replace는 유한 상태 머신(finite state machine)을 사용해서 보다 긴 스트링을 우선 매치한다. 이것은 스트링을 스왑(swap)하기 위해서도 사용될 수 있다. 예를 들면, 아래의 명령어는 주어진 파일 file1 과 file2에 있는 a 와 b를 스왑한다.



shell> replace a b b a -- file1 file2 ... 

replace 프로그램은 msql2mysql에 의해서 사용될 수 있다. Section 22.9.1, “msql2mysql - Convert mSQL Programs for Use with MySQL”를 참조할 것.

replace는 아래의 옵션을 지원한다:


  • -?, -I
    도움말을 출력하고 빠져 나온다.
  • -# debug_options
    디버깅 로그를 작성한다. debug_options 스트링은 'd:t:o,file_name'.
  • -s
    침묵 모드(Silent mode).
  • -v
    버보스 모드(Verbose mode).
  • -V
    버전 정보를 출력하고 빠져 나온다.
출처 : MySQL 코리아