MYSQL repair & optimize

MySQL: Repair & Optimize all Tables in all Databases

전체 DB 체크

mysqlcheck -u root -p –auto-repair –check –optimize –all-databases

특정 DB 만 체크

mysqlcheck -u root -p –auto-repair [디비명]

전체 DB 체크할때 아래 오류가 발생하면 –check 옵션은 빼고 실행

Error:  mysqlcheck doesn’t support multiple contradicting commands.

===================================================================================================

mysqlcheck 유틸리티 사용법(analyze, optimize, repair)

mysqlcheck 유틸리티 사용법

cost 베이스 DB에서 DB전체를 한번에 analyze, optimize, repair 하기 위한 유틸리티 입니다.

파일위치 : mysql/bin

—————————————————-

전체 체크 및 자동 복구

mysqlcheck -Aa –auto-repair -u root -p

mysqlcheck -Ao –auto-repair -u root -p

—————————————————-

-A, –all-databases

-a, –analyze

-o, –optimize

-P 포트번호

—————————————————-

특정 데이터베이스만 체크 및 자동 복구

mysqlcheck –auto-repair -u root -p 데이터베이스명

—————————————————-

특정 테이블만 체크 및 자동 복구

mysqlcheck –auto-repair -u root -p 데이터베이스명 테이블명

—————————————————-

명령어 수정하여 사용하기

mysqlrepair = mysqlcheck –repair

mysqlanalyze = mysqlcheck –analyze

mysqloptimize = mysqlcheck –optimize

—————————————————-

mysql에 접속하여 개별적으로 하는 방법

mysql> use 데이터베이스명;

mysql> show tables;

mysql> check table 테이블명;

mysql> repair table 테이블명;

mysql> analyze table 테이블명;

mysql> optimize table 테이블명;

—————————————————-

##########################

OPTIMIZED table script PHP

##########################

$db = ‘database_name’;

$tables = mysql_list_tables($db);

while (list($table)name) = mysql_fetch_array($tables)) {

$sql = “OPTIMIZE TABLE $table_name”;

mysql_query($sql) or exit(mysql_error());

}

================================================================================

$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”);

} //전체루프

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

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