본문으로 바로가기

12장. 고급 mysql 관리

1. 권한 변경하기

- 서버에게 권한이 수정되었음을 알리는 명령어 : flush privileges

- 운영체제에게 알리기 : mysqladmin flush-privileges

                        또는 : mysqladmin reload

* php의 addslashes()와 stripslashes()함수를 사용했을 때 문제가 발생할 수 이쓴ㄴ 문자열을 처리. 두 함수를 꼭 사용해야하며, mysql에 데이터를 보내기 전에 꼭 필터링해야함. 숫자 데이터 값이 실제로 숫자인지 확인하기위해서는 dobleval()을 사용한다.


2. show로 정보 얻기

- show databeses : 데이터베이스 보기

- show tables : 데이터 베이스에 있는 테이블 보기

- show table from books : show tables문으로 특정 데이터 베이스의 테이블 보기

- show columns from orders from books : 어떤 테이블의 열 리스트 얻어 오기

- show columns from books.orders :  만약 데이터베이스 파라미터를 생략하면 show columns 문은 현재 사용중인 데이터베이스에서 검색. 그리고 "테이블 이름.열이름" 으로 사용

- show grants for bookorama : show문을 사용하여 사용자의 권한을 볼수 있다


3. describe로 열 정보 얻기

- show colums문 대신 describe 문을 사용함

- decribe table [column];

  : 모든 열에 대한 정보 혹은 column에 명시된 특별한 열에 대한 정보 제공


4. explanin과 결합한 쿼리 동작 이해하기

- explain table : describe table이나 show columns form table과 같은 결과

- 쿼리를 ; 대신 \G로 끝내면 출력내용이 정리되어 볼수있음


5. mysql 데이터 베이스 백헙하기

- lock tables table lock_type [, table lock_type ... ]

   : lock_type은 read나 wrige가 될수 있음. 만약 백업용으로 사용한다면 read이면 됨.

   : flush tables;를 해주어 백업하기 전에 인덱스를 모두 업데이트 하도록 한다.

- mysqldump --opt --all-databases > all.sql

   : all.sql에 지금 데이터베이슬 모두 복구하기 위해 필요한 모든 sql을 만들어 냄.

   : 이명령어를 사용하려면 mysqld 프로세스를 멈추고 --log-bin[=logfile]옵션을 사용해여

     재시작.

- mysqlhotcopy databses /path/for/backup

   : 이또한 데이터베이스를 중단시키고 시작.


6. mysql 데이터베이스 복구하기

- myisamchk의 -r(repair)옵션을 사용

- 위에서 mysqldump로 백업했다면 몇단계가 더 필요

  먼저 백업한 파일에 있는 쿼리를 실행 -> 백업 시점으로 데이터베이스를 새로 만듬 ->

  저장된 갱신 자료가 로그파일에 저장되어 있으므로 그 파일로 데이터베이스를 갱신

  : 만약 유닉스를 사용한다면 다음 명령 로그 파일의 내용을 정확한 순서로 복구할 수 있다

    mysqlbinlog hostname-bin.[0-9]* | mysql


7. 복제구현

- 복제는 다수의 데이터베이스 서버를 사용하여 하나의 데이터베이스처럼 행동하는 기술을

  말함

- 이 방법을 사용하면 부하를 나누거나 시스템의 안정성을 증가시킬수 있다.

   ( 한 서버가 중단된다 하더라도 다른 서버에서 여전히 쿼리 받을 수 있음)

- 기본적으로 마스터 서버에서 여러개의 슬레이브 서버를 추가하는 방식.

- 슬레이브를 설정하려면 마스터의 모든 데이터를 복사하여 슬레이브에 옮겨야함.

  그러고 난 다음 마스터로부터 업데이트 요청. 마스터는 바이너리 로그를 통해 실행된 로그를

  통해 실행된 쿼리의 세부 사항을 전송. 그러면 슬레이브도 데이터에 똑같이 적용됨

- 복제를 사용할 때에는 마스터에 쓰기 퀄를 적용하고 슬레이브에서 읽기 쿼리를 실행하는 방식을 많이 사용

- 마스터와 슬레이브 서버의 my.ini와 my.cnf 파일을 모두 수정

- 마스터에서는 다음 설정을 해주자

  [mysqld]

  log-bin

  server-id = 1

- 첫번째 설정은 바이너리 로그를 남기도록 활성화함(이 부분이 미리 되어 있어야 한다)

- 두번째는 마스터 서버에 유일한 ID를 부여. 각 슬레이브 역시 ID가 필요하므로 슬레이브 서버마다 my.ini/my.cnf에 비슷한 행을 추가. 숫자는 유일해야함

(ex. 첫번째 슬레이브가 server-id = 2;이고 다음 슬레이브는 server-id=3등등)


8. 마스터로 설정하기

- 마스터에서 슬레이브가 접속할 사용자를 만들어줘야함

- 슬레이브는 복제 슬레이브라는 특별한 권한을 가짐. 초기 데이터 전송을 계획하는 것에 따라 임시로 추가 권한을 줄수 있다.

- 마스터 생성 :

  grant relocation slave on *.* to 'rep_slave'@'%' identified by 'password'


9. 초기 데이터 전송 수행

- 마스터에서 슬레이브로 데이터를 옮기는 방법

  1) 가장 간단하게 슬레이브를 설정해서 load data form master를 실행.

     데이터 전송하는 동안 마스터 테이블을 사용할 수 없기떄문에 시간이 좀 걸릴 경우

     사용하지 않음(MYISAM 테이블을 사용할 때만 사용)

  2) 대부분, 현재 데이터베이스의 상태를 취하는 것이 좋음. 위에 제시한 백업 만드는 방법을

     사용하면 됨. 백업하기 전에는 다음 쿼리를 통해 테이블을 완전히 업데이트 시킴

     flush tables with read lock;

- read 락을 걸어 서버가 바이너리 로그를 저장하는 위치를 알아낸다. 

  show master status;

- 위 쿼리 명령문을 실행했을 때 나오는 정보에서 file과 position을 잘 보자.

   슬레이브 설정하기 위해서는 이 정보가 필요

- 이제 현상태 얻었으므로 테이블의 락을 풀어줌'

   unlock tables;


10. 슬레이브 설정

- change master to

  master-host='server',

  master-user='user',

  master-password='password'

  master-log-file='logfile',

  master-log-pos=logpas;

  start slave;

  (logfile과 logpas는 show master status문에서 얻은 정보를 채워넣는다)

- 위 쿼리문을 날린 후 다 준비되었으니 실행시킨다

- 만약 데이터베이스에 ㅐ닿ㄴ 상태를 구하지 않았다면 위 쿼리를 실행시킨 다음 마스테어서

  데이터를 읽어온다

  load data from master;