본문 바로가기
IT 인터넷

[Mysql] repair & optimize

by zzom~ 2024. 10. 2.
반응형

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 면 잘못 된 테이블 복구 까지 자동으로 해준다.

반응형