MySQL에는 OPTIMIZE TABLE 명령이있어 MySQL 설치에서 사용되지 않은 공간을 회수 할 수 있습니다. 데이터베이스 및 / 또는 서버 설치의 모든 테이블에 대해이 최적화를 실행하는 방법 (내장 명령 또는 공통 저장 프로 시저)이 있습니까? 아니면 직접 스크립트해야합니까?
답변
mysqlcheck
명령 행에서이를 수행 할 수 있습니다 .
하나의 데이터베이스 :
mysqlcheck -o <db_schema_name>
모든 데이터베이스 :
mysqlcheck -o --all-databases
답변
이 ‘간단한’스크립트를 만들었습니다.
set @tables_like = null;
set @optimize = null;
set @show_tables = concat("show tables where", ifnull(concat(" `Tables_in_", database(), "` like '", @tables_like, "' and"), ''), " (@optimize:=concat_ws(',',@optimize,`Tables_in_", database() ,"`))");
Prepare `bd` from @show_tables;
EXECUTE `bd`;
DEALLOCATE PREPARE `bd`;
set @optimize := concat('optimize table ', @optimize);
PREPARE `sql` FROM @optimize;
EXECUTE `sql`;
DEALLOCATE PREPARE `sql`;
set @show_tables = null, @optimize = null, @tables_like = null;
실행하려면 데이터베이스에 연결된 SQL IDE에 붙여 넣기 만하면됩니다.
주의 사항 :이 코드 는 phpmyadmin에서 작동하지 않습니다 .
작동 원리
show tables
명령문을 실행하고 준비된 명령문에 저장합니다. 그런 다음 optimize table
선택한 세트에서 a 를 실행합니다 .
var에 다른 값을 설정하여 최적화 할 테이블을 제어 할 수 있습니다 @tables_like
(예 🙂 set @tables_like = '%test%';
.
답변
다음 PHP 스크립트 예제는 데이터베이스의 모든 테이블을 최적화하는 데 도움이 될 수 있습니다
<?php
dbConnect();
$alltables = mysql_query("SHOW TABLES");
while ($table = mysql_fetch_assoc($alltables))
{
foreach ($table as $db => $tablename)
{
mysql_query("OPTIMIZE TABLE '".$tablename."'")
or die(mysql_error());
}
}
?>
답변
간단한 셸 스크립트를 사용하여 모든 데이터베이스의 모든 테이블을 수정하는 데 필요한 모든 절차를 수행하십시오.
#!/bin/bash
mysqlcheck --all-databases
mysqlcheck --all-databases -o
mysqlcheck --all-databases --auto-repair
mysqlcheck --all-databases --analyze
답변
모든 데이터베이스의 경우 :
mysqlcheck -Aos -uuser -p
하나의 데이터베이스 최적화 :
mysqlcheck -os -uroot -p dbtest3
답변
phpMyAdmin 및 기타 소스에서 다음을 사용할 수 있습니다.
SET SESSION group_concat_max_len = 99999999;
SELECT GROUP_CONCAT(concat('OPTIMIZE TABLE `', table_name, '`;') SEPARATOR '') AS O
FROM INFORMATION_SCHEMA.TABLES WHERE
TABLE_TYPE = 'BASE TABLE'
AND table_name!='dual'
AND TABLE_SCHEMA = '<your databasename>'
그런 다음 결과를 새 쿼리에 복사하여 붙여 넣거나 자신의 소스에서 실행할 수 있습니다. 전체 내용을 볼 수없는 경우 :
답변
MySQL 서버의 모든 데이터베이스에있는 모든 테이블을 분석, 복구 및 최적화하려는 경우 명령 행에서 한 번에 수행 할 수 있습니다. 그래도 루트가 필요합니다.
mysqlcheck -u root -p --auto-repair --optimize --all-databases
일단 실행하면 MySQL 루트 암호를 입력하라는 메시지가 표시됩니다. 그런 다음 시작되고 결과가 표시됩니다.
출력 예 :
yourdbname1.yourdbtable1 OK
yourdbname2.yourdbtable2 Table is already up to date
yourdbname3.yourdbtable3
note : Table does not support optimize, doing recreate + analyze instead
status : OK
etc..
etc...
Repairing tables
yourdbname10.yourdbtable10
warning : Number of rows changed from 121378 to 81562
status : OK
루트 비밀번호를 모르고 WHM을 사용하는 경우 홈> SQL 서비스> MySQL 루트 비밀번호 로 이동하여 WHM 내에서 변경할 수 있습니다.
