Калі ў цябе на сэрвэры некалькі баз дадзеных 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>'; ?