MySQL ОПТИМИЗИРУЕТ все таблицы? - PullRequest
225 голосов
/ 29 марта 2011

MySQL имеет команду OPTIMIZE TABLE , которую можно использовать для освобождения неиспользуемого пространства при установке MySQL.Есть ли способ (встроенная команда или обычная хранимая процедура), чтобы запустить эту оптимизацию для каждой таблицы в базе данных и / или при установке сервера, или это то, что вам нужно было бы написать самостоятельно?

Ответы [ 14 ]

0 голосов
/ 24 апреля 2018

Если вы обращаетесь к базе данных напрямую, вы можете написать следующий запрос:

OPTIMIZE TABLE table1,table2,table3,table4......;
0 голосов
/ 24 мая 2016

Скрипт стартового bash для вывода списка и запуска инструмента для БД ...

#!/bin/bash

declare -a dbs
unset opt

for each in $(echo "show databases;" | mysql -u root) ;do

        dbs+=($each)

done



echo " The system found [ ${#dbs[@]} ] databases." ;sleep 2
echo
echo "press 1 to run a check"
echo "press 2 to run an optimization"
echo "press 3 to run a repair"
echo "press 4 to run check,repair, and optimization"
echo "press q to quit"
read input

case $input in
        1) opt="-c"
        ;;
        2) opt="-o"
        ;;
        3) opt="-r"
        ;;
        4) opt="--auto-repair -c -o"
        ;;
        *) echo "Quitting Application .."; exit 7
        ;;
esac

[[ -z $opt ]] && exit 7;

echo " running option:  mysqlcheck $opt in 5 seconds  on all Dbs... "; sleep 5

for ((i=0; i<${#dbs[@]}; i++)) ;do
        echo "${dbs[$i]} : "
        mysqlcheck $opt ${dbs[$i]}  -u root
    done
0 голосов
/ 05 ноября 2015

Этот bash-скрипт примет корневой пароль в качестве опции и оптимизирует его один за другим с выводом статуса:

#!/bin/bash

if [ -z "$1" ] ; then
  echo
  echo "ERROR: root password Parameter missing."
  exit
fi
MYSQL_USER=root
MYSQL_PASS=$1
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
TBLLIST=""
COMMA=""
SQL="SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE"
SQL="${SQL} table_schema NOT IN ('information_schema','mysql','performance_schema')"
for DBTB in `mysql ${MYSQL_CONN} -ANe"${SQL}"`
do
    echo OPTIMIZE TABLE "${DBTB};"
    SQL="OPTIMIZE TABLE ${DBTB};"
    mysql ${MYSQL_CONN} -ANe"${SQL}"
done
0 голосов
/ 11 августа 2015

мои 2цента: начать с таблицы с наибольшей фрагментацией

for table in `mysql -sss -e "select concat(table_schema,".",table_name) from information_schema.tables where table_schema not in ('mysql','information_schema','performance_schema') order by data_free desc;"
do
mysql -e "OPTIMIZE TABLE $table;"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...