Коли у тебе на сервері кілька баз даних MySQL, періодично виникає необхідність «одним махом» провести оптимізацію всіх їх, щоб не було необхідності заходити в улюблений інструмент управління базами даних (наприклад, найпопулярніший phpMyAdmin), та й взагалі, лінь-матінка постійно мовляє , що мовляв, «не треба нікуди ходити, нехай би воно саме все робилося» 🙂
В такому випадку, природно, простіше скористатися якимось скриптом, який міг би виявити всі наявні Бази даних, а потім обійти їх самостійно і провести оптимізацію ...
Так, колись я знайшов цей скрипт на просторах глобальної мережі, а зараз ось виникла ситуація, що я ним став користуватися, ось і ділюся заодно і з вами, мої дорогі відвідувачі 🙂 Абсолютно не знаю, хто його створив, так що прошу вибачення заздалегідь, якщо хто виявить свої рядки коду - пишіть в коментарях тоді ...
Отже, власне PHP-скрипт, який можна запускати ручками, коли душа забажає, а можна і просто підвісити на cron, щоб взагалі забути про такий важливий процес, як оптимізація Баз даних MySQL 🙂
<? Php error_reporting (0); echo '<html> <head> <title> Оптимізація всіх Баз даних </ title> </ head> <body>'; echo '-'. "\ N \ n"; set_time_limit (90); $ Time = microtime (); $ Time = explode ( '', $ time); $ Time = $ time [1] + $ time [0]; $ Start = $ time; // ДАНІ ДЛЯ З'ЄДНАННЯ З СЕРВЕРОМ БАЗИ ДАНИХ $ h = 'localhost'; // ХОСТ $ u = 'db_server_name'; // ІМ'Я КОРИСТУВАЧА $ p = 'bLa_Bla_blA'; // ПАРОЛЬ $ dummy_db = 'mysql'; $ Db_link = mysql_connect ($ h, $ u, $ p); $ Res = mysql_db_query ($ dummy_db, 'SHOW DATABASES', $ db_link) or die ( 'Неможливо з'єднатися:'. Mysql_error ()); echo 'Знайдено Баз даних:'. mysql_num_rows ($ res). "\ N ------------------------------------ \ n"; $ Dbs = array (); while ($ rec = mysql_fetch_array ($ res)) {$ dbs [] = $ rec [0]; } Foreach ($ dbs as $ db_name) {echo "БД $ db_name \ n"; $ Res = mysql_db_query ($ dummy_db, "SHOW TABLE STATUS FROM` ". $ Db_name." `", $ Db_link) or die ( 'Query:'. Mysql_error ()); $ To_optimize = array (); while ($ rec = mysql_fetch_array ($ res)) {if ($ rec [ 'Data_free']> 0) {$ to_optimize [] = $ rec [ 'Name']; echo "| - таблиця '". $ Rec [ 'Name']. " 'Потребує оптимізації / оптимізується". "\ N"; }} If (count ($ to_optimize)> 0) {foreach ($ to_optimize as $ tbl) {mysql_db_query ($ db_name, "OPTIMIZE TABLE` ". $ Tbl." `", $ Db_link); }}} $ Time = microtime (); $ Time = explode ( '', $ time); $ Time = $ time [1] + $ time [0]; $ Finish = $ time; $ Total_time = round (($ finish - $ start), 6); echo "------------------------------------ \ n Виконано за". $ Total_time. 'Сек.' . "\ N \ n"; echo '</ body> </ html>'; ?>
<? Php error_reporting (0); echo '<html> <head> <title> Оптимізація всіх Баз даних </ title> </ head> <body>'; echo '-'. "\ N \ n"; set_time_limit (90); $ Time = microtime (); $ Time = explode ( '', $ time); $ Time = $ time [1] + $ time [0]; $ Start = $ time; // ДАНІ ДЛЯ З'ЄДНАННЯ З СЕРВЕРОМ БАЗИ ДАНИХ $ h = 'localhost'; // ХОСТ $ u = 'db_server_name'; // ІМ'Я КОРИСТУВАЧА $ p = 'bLa_Bla_blA'; // ПАРОЛЬ $ dummy_db = 'mysql'; $ Db_link = mysql_connect ($ h, $ u, $ p); $ Res = mysql_db_query ($ dummy_db, 'SHOW DATABASES', $ db_link) or die ( 'Неможливо з'єднатися:'. Mysql_error ()); echo 'Знайдено Баз даних:'. mysql_num_rows ($ res). "\ N ------------------------------------ \ n"; $ Dbs = array (); while ($ rec = mysql_fetch_array ($ res)) {$ dbs [] = $ rec [0]; } Foreach ($ dbs as $ db_name) {echo "БД $ db_name \ n"; $ Res = mysql_db_query ($ dummy_db, "SHOW TABLE STATUS FROM` ". $ Db_name." `", $ Db_link) or die ( 'Query:'. Mysql_error ()); $ To_optimize = array (); while ($ rec = mysql_fetch_array ($ res)) {if ($ rec [ 'Data_free']> 0) {$ to_optimize [] = $ rec [ 'Name']; echo "| - таблиця '". $ Rec [ 'Name']. " 'Потребує оптимізації / оптимізується". "\ N"; }} If (count ($ to_optimize)> 0) {foreach ($ to_optimize as $ tbl) {mysql_db_query ($ db_name, "OPTIMIZE TABLE` ". $ Tbl." `", $ Db_link); }}} $ Time = microtime (); $ Time = explode ( '', $ time); $ Time = $ time [1] + $ time [0]; $ Finish = $ time; $ Total_time = round (($ finish - $ start), 6); echo "------------------------------------ \ nВиполнено за". $ Total_time. 'Сек.' . "\ N \ n"; echo '</ body> </ html>'; ?>
Природно, зазначений вище в скрипті користувач повинен мати право доступу до всіх Базам, які необхідно оптимізувати за допомогою цього ...
N \ n"; echo '</ body> </ html>'; ?N \ n"; echo '</ body> </ html>'; ?