MySQL 테이블 체크 및 자동 복구

자체적으로 만든 스크립트를 이용해서 테이블별로 백업을 하면서 테이블 체크를 하는데

mysqlcheck 란 실행 화일을  cron에다 등록 시켜서 해도 상관 없겠다.

 

 

$backup_db = array("db1","db2")
$optimize =1;

foreach($backup_db AS $dbName)
{
 echo "\n==========  $dbName ==========\n";

 // DB
 $cmd="mysql -uroot -p".DB_PW." $dbName -e\"show tables\" ";
 exec($cmd,$tableArr);
 // 테이블
 foreach($tableArr As $val)
 {
   if(strstr($val,"+")) continue;
   if(strstr($val,"Tables_in_".$dbName)) continue;
   if(ereg("([a-zA-Z0-9_])+",$val,$regs))
   {
     $tableName=trim($regs[0]);
   }
   else
    continue;
// 필요 없는 건 걸러내고 테이블 이름만 취한다.
 
  if($optimize)
  {
   $opt_exe = "mysql -uroot -p".DB_PW."  $dbName  -e\"optimize table device.$tableName\" ";
   exec($opt_exe,$output);
  }
  $dateYMD= date("Y-m-d");
  $last_line=system("mysqldump -uroot -p".DB_PW."  --extended-insert=FALSE --add-drop-table  --create-options --disable-keys --add-locks --skip-opt  --no-create-db  --default-character-set=euckr  --set-charset -n -t \"$dbName\" $tableName > $backupDir/$dateYMD/{$tableName}.sql");
} //전체루프

 

mysql -uroot -p암호 -e"optimize table tablename" 이런식으로 테이블 최적화 하고 php 스크립트를 cron에다 등록 시켜 놓는다.

 

다음과 같이 유틸리티를 써서 하는게 편하겠다.

00 2 * * * root /usr/local/mysql/bin/mysqlcheck -uroot -p암호 -rao --all-database --auto-repair > /dev/null 2 > &1

 

으로 하면 2시에 인덱스 복구, 최적화,분석 까지 --auto-repair 면 잘못 된 테이블 복구 까지 자동으로 해준다.

댓글

이 블로그의 인기 게시물

XCOPY를 이용한 당일날짜의 파일만 카피하는방법

뽀롱 뽀롱 뽀로로 DVD 목록

자바스크립트 배열의 인덱스를 알아내기