Web taemy's Site

'INTO OUTFILE'에 해당되는 글 1건

  1. 2007/08/05 PHP 에서 Mysql 데이터 백업 (INTO OUTFILE 사용시)
mysql 의 데이터를 백업받는 방법은 여러가지가 있다.
# mysql 에서 제공하는 mysqldump 를 이용하는 방법
phpMyAdmin 같은 툴을 이용하는 방법
mysql console 에서 INTO OUTFILE 등으로 백업하는 방법

# mysqldump 같은 명령도 php 내의 system 함수등을 이용해 할 수도 있다.
또한 INTO OUTFILE  mysql console 명령도 php 에서 쿼리로 날려서 할 수도 있다.
( http://www.php-mysql-tutorial.com/perform-mysql-backup-php.php )
# 여기에서 언급하고자 하는 것은
PHP 에서 mysql_query 명령으로  INTO OUTFILE 쿼리를 이용해 백업받는 부분이다.

이 방법을 사용할 때 주의할 부분을 정리하고자 한다.

1. 먼저 mysql console 접속할 USER 의 File_Priv 권한이 'Y' 이어야 한다.
  update user set File_Priv = 'Y' where User = '{유저이름}' ;  등으로 바꿔준다.
  설정을 바꾼 후 바로 적용이 되지 않고, # mysqladmin reload  등으로 설정을 적용시킨다.

2. 파일이 저장되는 경로 및 퍼미션(권한)을 확인한다. 확실한 방법은 절대경로를 써준다.
 예) /data/backup/xxxx.sql
 %주의% 절대경로를 써주지 않으면, mysql 데이터가 있는 경로에 저장이 된다.( /var/lib/mysql/{DB명} )
권한(퍼미션) 부분은 파일이 mysql 의 user/group 으로 저장이 되기 때문에
보통(nobody , www-data) 의 권한으로 된 경로는 other 권한에 쓰기 권한이 있어야 한다.
안되어 있다면, # chmod 777 {경로}  처럼 바꾸어 준다.

3. 적당한 쿼리값을 INTO OUTFILE '{저장할 파일명}'  형식으로 저장한다.
  mysql connection 을 생성 후에 (in PHP)
$query = " SELECT * INTO OUTFILE '$backupFile'  fields terminated by '|'  FROM $tableName ; " ;
mysql_query( $query ) ;
$backupFile , $tableName 은 적당한 값으로 설정.

4. 해당 백업파일로 복구할때는 LOAD DATA INFILE
  백업시   fields ...  에 써 넣은 옵션을 그대로 써준다.
$query = " LOAD DATA INFILE '$backupFile'  INTO TABLE $tableName  fields terminated by '|' ; " ;
mysql_query( $query ) ;
이때도 절대경로를 써주는 것이 좋다.
그냥 xxx.sql 등의 파일이름만 적으면 /var/lib/mysql/{DB}/xxx.sql 을 찾게 된다.


# 참조 :
http://dev.mysql.com/doc/refman/5.0/en/select.html
http://dev.mysql.com/doc/refman/5.0/en/load-data.html

이올린에 북마크하기(0) 이올린에 추천하기(0)