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에다 등록 시켜 놓는다.
다음과 같이 유틸리티를 써서 하는게 편하겠다.
으로 하면 2시에 인덱스 복구, 최적화,분석 까지 --auto-repair 면 잘못 된 테이블 복구 까지 자동으로 해준다.
댓글
댓글 쓰기