Поддръжка и оптимизиране на MySQL таблици през SSH

В статията Операции за поддръжка на MySQL таблици Ви запознахме с възможностите на MySQL сървъра да поддържа таблиците в различните хранилища за данни.

Както сте се убедили, възможностите на MySQL далеч надхвърлят степента на използването им в потребителските CMS сайтове.

Операциите за проверка, анализ, оптимизация и поправяне на MySQL таблици в контекста на споделения хостинг могат да се изпълняват по два начина – чрез SSH команди и през phpMyAdmin.

В тази статия ще покажем как може да поддържате таблиците на всеки Ваш сайт чрез подаване на SSH команди в терминал.

За да изпълните тези команди, трябва да имате активиран SSH достъп до хостинга.

SSH достъп до MySQL в споделен хостинг

Преди да започнем с MySQL операциите трябва да направим следното уточнение: SSH достъпът в споделения хостинг не дава root достъп до MySQL сървъра и Вие не може да създавате бази данни и потребители.

Вие имате достъп през SSH единствено до вече създадена база данни и може да извършвате операции с SSH команди единствено в рамките на съответната база данни.

Логването в базата данни става със следния код:

# mysql -unewUSR -p newDB;
Enter password:
mysql>

Може да добавите паролата в командата след -p без интервал:

# mysql -unewUSR -p6kwuzc5 newDB;
mysql>

Ако изпълните командата show databases; ще получите като отговор само името на базата данни, в която сте се логнали, въпреки че в хостинга може да има създадени десетки бази данни:

mysql> show databases;
+----------------------+
| Database             |
+----------------------+
| information_schema   |
| newDB                |
+----------------------+
2 rows in set (0.05 sec)

mysqlcheck – програма за поддръжка на mysql таблици

CLI програмата mysqlcheck извършва поддръжка на MySQL таблици като извършва следните операции чрез въвеждане на различни аргументи през команден ред (command-line interface, CLI):

  • проверка – CHECK (-c, -m, -C);
  • поправяне – REPAIR (-r);
  • анализ – ANALYZE (-a);
  • оптимизиране – OPTIMIZE (-о);
  • автоматично поправяне – --auto-repair – ако проверена таблица е повредена, автоматично я поправя. Всички необходими поправки се извършват след проверка на всички таблици.

Не всички опции се поддържат от всички хранилища за данни (InnoDB не поддържа REPAIR). Опциите -c, -r, -a и -o взаимно се изключват, което означава, че ще бъде използвана последната опция, ако са посочени няколко. Ако не бъде посочена опция mysqlcheck изпълнява операцията CHECK.

Пълен набор от опции за работа с програмата може да получите, като изпълните в терминал командата mysqlcheck --help;

За нашите тестове ще използваме база данни с две таблици, изградени с двете най-използвани хранилища – MyISAM (prfx_myisam) и InnoDB (prfx_innodb), които лесно ще различавате по имената. Тъй като InnoDB е хранилището по подразбиране на MySQL след версия 5.5, примерите с използване на една таблица ще се изпълняват в prfx_innodb.

Проверка на MySQL таблица с mysqlcheck

За да проверим една таблица от базата данни, въвеждаме следните елементи в една обща команда:

  • командата – mysqlcheck;
  • данните за логване – -unewUSR -p6kwuzc5 newDB;
  • името на таблицата – prfx_innodb;
  • аргумента на операцията – -c;
  • точка и запетая за край на командата – ;.
# mysqlcheck -unewUSR -p6kwuzc5 newDB  prfx_innodb -c;
newDB.prfx_innodb                            OK

За да проверим всички таблици, не добавяме име на таблица:

# mysqlcheck -unewUSR -p6kwuzc5 newDB -c;
newDB.prfx_innodb                            OK
newDB.prfx_myisam                            OK

# mysqlcheck -unewUSR -p6kwuzc5 newDB --auto-repair;
newDB.prfx_innodb                            OK
newDB.prfx_myisam                            OK

Вместо аргумента -c може да ползвате --auto-repair – при откриване на повредена таблица автоматично ще бъде поправена.

Анализ на MySQL таблица с mysqlcheck

За да анализираме една таблица, въвеждаме кода от горния пример, като заменяме аргумента -c с -a (затова оставихме аргумента на последно място, за да може да се променя лесно):

# mysqlcheck -unewUSR -p6kwuzc5 newDB  prfx_innodb -a;
newDB.prfx_innodb                            OK

Анализ на всички таблици:

# mysqlcheck -unewUSR -p6kwuzc5 newDB -a;
newDB.prfx_innodb                            OK
newDB.prfx_myisam                            Table is already up to date

Оптимизиране на MySQL таблица с mysqlcheck

За да оптимизираме една таблица, използваме аргумента .

Тъй като хранилището за данни InnoDB не поддържа optimize, сървърът пресъздава таблицата, като по този начин дефрагментира дупките в таблицата, получени при изтриване на информация, и след това изпълнява командата analyze, за да провери индексите на записите:

# mysqlcheck -unewUSR -p6kwuzc5 newDB  prfx_innodb -o;
newDB.prfx_innodb
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK

# mysqlcheck -unewUSR -p6kwuzc5 newDB -o;
newDB.prfx_innodb
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK
newDB.prfx_myisam                           Table is already up to date

Table is already up to date е стандартният отговор при анализиране на MyISAM таблица, когато всичко с таблицата е наред и няма нужда от допълнителна профилактика.

Поправяне на MySQL таблица с mysqlcheck

За да поправите (repair) една таблица, използвайте аргумента -r:

# mysqlcheck -unewUSR -p6kwuzc5 newDB  prfx_innodb -r;
newDB.prfx_innodb
note     : The storage engine for the table doesn't support repair

# mysqlcheck -unewUSR -p6kwuzc5 newDB -r;
newDB.prfx_innodb
note     : The storage engine for the table doesn't support repair
newDB.prfx_myisam                            OK

Ако видите съобщението: The storage engine for the table doesn't support repair, това означава, че опитвате да поправите InnoDB таблица.

Изпълнение на командите за поддръжка през mysql prompt

Всички команди, които разгледахме дотук и които изпълнихме спрямо една таблица могат да бъдат изпълнени и през mysql prompt, като предварително се логнем в базата данни със следната команда:

# mysql -unewUSR -p6kwuzc5 newDB;
mysql>

Проверка на таблица – check table

mysql> check table prfx_myisam, prfx_innodb;
+-------------------------+-------+----------+----------+
| Table                   | Op    | Msg_type | Msg_text |
+-------------------------+-------+----------+----------+
| newDB.prfx_myisam | check | status   | OK       |
| newDB.prfx_innodb | check | status   | OK       |
+-------------------------+-------+----------+----------+
2 rows in set (0.00 sec)

Анализ на таблица – analyze table

mysql> analyze table prfx_myisam, prfx_innodb;
+-------------------------+----------+----------+------------------------+
| Table                   | Op      | Msg_type | Msg_text                |
+-------------------------+----------+----------+------------------------+
| newDB.prfx_myisam | analyze | status   | Table is already up to date |
| newDB.prfx_innodb | analyze | status   | OK                          |
+-------------------------+----------+----------+------------------------+
2 rows in set (0.00 sec)

Оптимизиране на таблица – optimize table

mysql> optimize table prfx_myisam, prfx_innodb;
+-------------------------+----------+----------+------------------------+
| Table                   | Op       | Msg_type | Msg_text                                                          |
+-------------------------+----------+----------+------------------------+
| newDB.prfx_myisam | optimize | status   | OK                                                                |
| newDB.prfx_innodb | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| newDB.prfx_innodb | optimize | status   | OK                                                                |
+-------------------------+----------+----------+------------------------+
3 rows in set (0.01 sec)

Поправяне на таблица – repair table

mysql> repair table prfx_myisam, prfx_innodb;
+-------------------------+----------+----------+------------------------+
| Table                   | Op     | Msg_type | Msg_text                                                |
+-------------------------+----------+----------+------------------------+
| newDB.prfx_myisam | repair | status   | OK                                                      |
| newDB.prfx_innodb | repair | note     | The storage engine for the table doesn't support repair |
+-------------------------+----------+----------+------------------------+
2 rows in set (0.01 sec)

Вижте как да използвате инструментите за поддръжка на MySQL таблици в phpMyAdmin: 🔗 Поддръжка и оптимизиране на MySQL таблици през phpMyAdmin | Help

Обновена: 17.03.2022

Беше ли Ви полезна тази статия?

Вижте още