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