В статията Операции за поддръжка на 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