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

Помощен център

Поддръжка на 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 prfxmyisam, prfxinnodb; +-------------------------+-------+----------+----------+ | Table | Op | Msgtype | Msgtext | +-------------------------+-------+----------+----------+ | newDB.prfxmyisam | check | status | OK | | newDB.prfxinnodb | check | status | OK | +-------------------------+-------+----------+----------+ 2 rows in set (0.00 sec)

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

mysql> analyze table prfxmyisam, prfxinnodb; +-------------------------+---------+----------+-----------------------------+ | Table | Op | Msgtype | Msgtext | +-------------------------+---------+----------+-----------------------------+ | newDB.prfxmyisam | analyze | status | Table is already up to date | | newDB.prfxinnodb | analyze | status | OK | +-------------------------+---------+----------+-----------------------------+ 2 rows in set (0.00 sec)

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

mysql> optimize table prfxmyisam, prfxinnodb; +-------------------------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msgtype | Msgtext | +-------------------------+----------+----------+-------------------------------------------------------------------+ | newDB.prfxmyisam | optimize | status | OK | | newDB.prfxinnodb | 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 prfxmyisam, prfxinnodb; +-------------------------+--------+----------+---------------------------------------------------------+ | Table | Op | Msgtype | Msgtext | +-------------------------+--------+----------+---------------------------------------------------------+ | newDB.prfxmyisam | repair | status | OK | | newDB.prfxinnodb | repair | note | The storage engine for the table doesn't support repair | +-------------------------+--------+----------+---------------------------------------------------------+ 2 rows in set (0.01 sec)

Заключение

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