天天看點

php 擷取mysql大小限制_PHP實作MySQL資料庫大小的限制成長

一、與MYSQL資料庫結合,先在MYSQL資料庫另起一個庫,記錄資料庫的庫名,對應的使用者名,限制的大小,等;

二、系統檢測資料庫大小,然後對比記錄着的資料,對比是否超過流量;如果超過流量就使用MYSQL的ROOT權,限制使用者對該資料庫的權限。(删除 UPDATE\INST..等);

三、如果達到80%,就向管理者、使用者各發送一個EMAIL通知;

四、前台程式控制資料庫資料的整理。

系統分二個部份:

第一部份:

是系統定時檢測資料庫大小,再根據檢測結果與資料庫資料,判斷資料庫是否超大;該部份操作需要有MYSQL高權限使用者去完成(建議ROOT),用該檔案需要定時運作,但該檔案可以放在網站通路不到的保密地方。

CODE:

<?php //設定部分 $id=mysql_connect('localhost','user','password'); //最好是使用root,或者高權限使用者 //Function部份 function PMA_backquote($a_name, $do_it = TRUE) // 取自phpmyadmin,用來格式化資料庫名 { if ($do_it && !empty($a_name) && $a_name != '*') { if (is_array($a_name)) { $result = array(); reset($a_name); while(list($key, $val) = each($a_name)) { $result[$key] = '`' . $val . '`'; } return $result; } else { return '`' . $a_name . '`'; } } else { return $a_name; } } // end of the 'PMA_backquote()' function function limit($user,$db) //達到限制限制使用者權限後運作的程式 { $query='REVOKE INSERT ,UPDATE ,CREATE ON "'.$db.'".* FROM "'.$user.'@localhost';//将insert update create的權限移走。01/17修正大BUG $result = @mysql_query($query);//changed! only 1 query.... //相應的權限代碼可以再更改. //echo 'lim.debug';exit; } function warning($name,$email) //超過80%時通知使用者 { $admin_email='[email protected]'; //管理者EMAIL位址。請更改 $message='MYSQL使用者:'.$name.'的資料庫已超過系統允許的大小的80% /n 請及時整理資料'; //通知的内容可以更改 @mail($admin_email,'MYSQL報告',$message,'from:[email protected]'); @mail($email,'MYSQL大小警告',$message,'from:[email protected]'); //echo 'warning.debug';exit; } //以下一段内容來自phpMyAdmin的查詢每個資料庫大小的程式 $dbs = mysql_list_dbs() ; while ($a_db = mysql_fetch_object($dbs)) { //查詢資料名,以後一段代碼來自phpmyadmin $dblist[] = $a_db->Database; } // end while mysql_free_result($dbs); $num_dbs = count($dblist); $total_array[0] = 0; // number of tables $total_array[1] = 0; // total data size $total_array[2] = 0; // total index size $total_array[3] = 0; // big total size // Gets the tables stats per database for ($i = 0; $i < $num_dbs; $i++) { $db = $dblist[$i]; $tables = mysql_list_tables($db); // Number of tables if ($tables) { $dbs_array[$db][0] = mysql_numrows($tables); mysql_free_result($tables); } else { $dbs_array[$db][0] = 0; } $total_array[0] += $dbs_array[$db][0]; // Size of data and indexes $dbs_array[$db][1] = 0; // data size column $dbs_array[$db][2] = 0; // index size column $dbs_array[$db][3] = 0; // full size column $local_query = 'SHOW TABLE STATUS FROM ' . PMA_backquote($db); //echo $db; $result = @mysql_query($local_query); // needs the "@" below otherwise, warnings in case of special DB names if ($result ) { while ($row = mysql_fetch_array($result)) { $dbs_array[$db][1] += $row['Data_length']; $dbs_array[$db][2] += $row['Index_length']; } $dbs_array[$db][3] = $dbs_array[$db][1] + $dbs_array[$db][2]; $total_array[1] += $dbs_array[$db][1]; $total_array[2] += $dbs_array[$db][2]; $total_array[3] += $dbs_array[$db][3]; // echo $dbs_array[$db][3]."

"; mysql_free_result($result); } // end if } // end for //查詢資料庫完畢。 //以下代碼用來判斷資料庫大小是否達到限制等。 mysql_select_db('db_limit',$id); //db_limit資料庫名可自由更改。但需要與其它程式保持一緻 for ($i = 0; $i < $num_dbs; $i++) { $db=$dblist[$i]; $query='select * from dbs where db_name="'.$db.'"'; $result=mysql_query($query); if ($result) { $dbs_limit=mysql_fetch_array($result); $limit_size=$dbs_limit['db_limit_size']; $user=$dbs_limit['db_user']; $limited=$dbs_limit['db_has_limit']; $used_size=$dbs_limit['db_size_used']; $email=$dbs_limit['db_email']; $warning_size=$limit_size*0.8; //0.8=80%,你可以更改為其它比例 if ($user!=''){ //這 if ($dbs_array[$db][3] > $limit_size) if ($dbs_array[$db][3] > $warning_size) warning($user,$email); $query='update dbs set db_has_limit="'.$limited.'" , db_size_used="'.$dbs_array[$db][3].'" where db_name="'.$db.'"'; $result=mysql_query($query); //更新資料庫大小至資料資料庫 } //echo $query;exit; } } mysql_close($id); ?>

第二部份為前台管理系統:

這隻是最簡單的作品.請大家盡快做一個更好的前台出來..

main.php

CODE:

//Bendy 的mysql限額前台程式 $admin='';session_start(); require ("./config.php"); if ($adpass==$adminpass) { $admin='ok'; session_register ("admin");$admin='ok'; } if ($admin=='') { ?>

管理 請先登陸,管理密碼是: exit; } ?>

add.php

CODE:

//Bendy 的mysql限額前台程式 $admin='';session_start(); require ("./config.php"); if ($admin=='') { echo 'login first'; exit; } if ($db_name!='') { $id=mysql_connect("localhost",$user,$pass); mysql_select_db('db_limit',$id); $query="insert into dbs values ('$db_name','$db_user','$email','$db_limit','','')"; $result=mysql_query($query); echo "insert success "; mysql_close($id); } ?>

添加使用者到資料庫

添加使用者到資料庫

資料庫名:

使用者名:

限制的大小:位元組

通知的EMAIL:

config.php

CODE:

//Bendy 的mysql限額前台程式 $user="root"; //該使用者隻需要對系統的db_limit資料庫有通路權.不需要ROOT權 $pass="123654"; //密碼 $adminpass="bendy"; //進入前台的管理密碼 ?>

list.php

CODE:

//Bendy 的mysql限額前台程式 $admin='';session_start(); require ("./config.php"); if ($admin=='') { echo 'login first'; exit; } $id=mysql_connect("localhost",$user,$pass); mysql_select_db('db_limit',$id); ?>

list

資料庫名 使用者名 限額 已用 EMAIL 限制 修改 删除

是|重開';} //change for fix.php else echo "$list[db_name]$list[db_user]$list[db_limit_size]$list[db_size_used]$list[db_email]$limit 修改 删除"; } ?>