MySQL 에서는 테이블이 손상 되었는지 여부를 확인(check table)하고, 손상된 테이블이라면 테이블을 복구(repair table)하고, 속도 개선을 위해 테이블을 최적화(optimize table) 하는 기능들을 제공한다. 이 기능들에 대한 쿼리는 상당히 단순하다.



1. MySQL 특정 테이블 체크(check)

DB 콘솔 접속 후

# use [DB명];                   => 작업할 DB를 선택

# check table [테이블명];   => 확인할 테이블을 체크



2. MySQL 특정 테이블 복구(repair)

DB 콘솔 접속 후

# use [DB명];                   => 작업할 DB를 선택                 

# repair table [테이블명];    => 복구할 테이블을 복구



3. MySQL 특정 테이블 최적화(optimize)

DB 콘솔 접속 후

# use [DB명];                    => 작업할 DB를 선택

# optimize table [테이블명]; => 최적화할 테이블을 최적화



그리고 위와 같이 특정 테이블에 대해 체크, 복구, 최적화를 할 수 있으나, 서버 장애 등으로 인해 DB의 전체 상태를 점검하거나 전체를 최적화하고 싶을 때는 테이블 하나하나 확인을 하기 어렵다. 그럴 때 아래와 같이 특정 DB의 모든 테이블을 체크하고, 복구하고, 최적화 할 수 있다.



4. MySQL 특정 DB의 모든 테이블 체크 및 자동 복구

서버 콘솔에서

# cd [MySQL_HOME]/bin                                                                

=> MySQL 설치 홈의 bin 폴더로 이동

# ./mysqlcheck -u [DB계정] -p[패스워드] --auto-repair [DB명]           

=> 해당 DB의 모든 테이블을 체크 및 자동복구



5. MySQL 특정 DB의 모든 테이블 최적화

서버 콘솔에서

# cd [MySQL_HOME]/bin                                                                

=> MySQL 설치 홈의 bin 폴더로 이동

# ./mysqlcheck -u [DB계정] -p[패스워드] --optimize [DB명]               

=> 해당 DB의 모든 테이블을 최적화



MySQL에서 localhost 내에 저장된 sql파일을 실행시키는 방법은 아래와 같다.


- MySQL 콘솔 실행


# source [파일경로/파일명]



예를 들어 /data/sql/test.sql 을 실행하려면 MySQL 콘솔에서 아래와 같이 입력하면 된다.


# source /data/sql/test.sql


DB(MySQL)가 설치된 localhost 외의 다른 곳에서 MySQL 접속을 하기 위해서는,

MySQL에서 호스트 및 접속 권한을 미리 설정해야 한다.


예를 들어 '111.222.333.*' 대역대에서 root 계정으로 DB 접속을 할 수 있도록 허용하고, 

해당 사용자에게 모든 권한을 부여하기 위해서는 아래와 같이 DB 콘솔에서 실행하면 된다.



# INSERT INTO mysql.user (host, user, password) VALUES ('111.222.333.%', 'root', password('비밀번호'));

# GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.333.%';

# FLUSH PRIVILEGES;


완전 기초적인건데, 안 써버릇 하니깐 가끔 까먹기도 하는 MySQL 기본 명령문



1. SELECT

SELECT [컬럼명] FROM [테이블명] WHERE [조건]

ex) SELECT * FROM tbl_userinfo WEHRE height > 180 ;

ex) SELECT username FROM tbl_userinfo WHERE height < 180 ;



2. UPDATE

UPDATE [테이블] SET [컬럼]=[값] WHERE [조건]

ex) UPDATE tbl_userinfo SET height = 180 WHERE height > 179.5 ;



3. DELETE

DELETE FROM [테이블] WHERE [조건]

ex) DELETE FROM tbl_userinfo WHERE height < 100 ;

MySQL에서 백업, 복사, 복구 등에 자주 쓰이는 mysqldump에 대해 알게되어, 이것저것 찾아보다가 공부할 겸 메모.

 

1. mysqldump 실행 방법

 

윈도우 서버에서는 어떻게 하는지, sql스크립트로 가능한건지 등등은 아직 잘 모르겠음.

 

나의 경우 리눅스 서버에서 mysql 설치폴더의 bin 안에서 ./mysqldump 를 사용해 옵션을 주어 사용했다.

 

 

2. mysqldump의 각종 옵션과 사용 방법

 

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

 

이 글에서 설명할 것은 mysqldump로 스키마만 백업받는 방법이다.

 

데이터 자체도 mysqldump로 백업받을 수 있다고 하는데

 

위 링크에 들어가면 MySQL에 대한 매뉴얼이 아주 자세히(영문) 있으니 참고.

 

 

3. mysqldump로 DB의 모든 테이블 스키마 백업 받기

 

mysqldump -u [아이디] -p [패스워드] -d [DB명] > [파일명:ex. dbbackup.sql]

 

위와 같이 실행하면 된다.

 

예를 들어 계정이 root에 패스워드가 없고, shop이라는 DB의 모든 테이블을 shop_1205.sql 이라는 파일로 백업 받으려면

 

./mysqldump -u root -p -d shop > shop_1205.sql

 

이런 식으로 실행하면 된다.

 

 

4. mysqldump로 DB의 특정 테이블 스키마 백업 받기

 

mysqldump -u [아이디] -p [패스워드] -d [DB명] [테이블명] > [파일명]

 

3번에서 설명한 방법에서, 백업받으려고 하는 테이블명만 추가해주면 된다.