终于做好了.欢迎大家评一评!<mysql数据库大小的限制>

终于做好了.欢迎大家评一评!<mysql数据库大小的限制>

使用PHP实现的程式.花了一个下午去完成...
只是做出来让大家参考一下...献丑了....

程式思路:
一\和MYSQL数据库结合.先在MYSQL数据库另起一个库.记录数据库的库名,对应的用户名,限制的大小.等.....
二\系统检测数据库大小,然后对比记录着的资料.对比是否超过流量.假如超过流量就使用MYSQL的ROOT权.限制用户对该数据库的权限...(删除UPDATE\INST..等)
三\假如达到80%.就向管理员\用户各发送一个EMAIL通知..
四\前台程式控制数据库资料的整理...


系统分二个部份.

第一部份.是系统定时检测数据库大小,再根据检测结果和数据库资料.判断数据库是否超大....该部份操作需要有MYSQL高权限用户去完成(建议ROOT).用该文档需要定时运行.,但该文档能够放在网站访问不到的保密地方...


任何文档.打包下载.
http://www.xingkong.biz/mysql_limit.zip

CODE:[Copy to clipboard]
<?php
//配置部分
$id=mysql_connect('localhost','user','password'); //最好是使用root,或高权限用户

//FUN部份
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='admin@admin.com'; //管理员EMAIL地址。请更改
$message='MYSQL用户:'.$name.'的数据库已超过系统允许的大小的80% /n 请及时整理数据'; //通知的内容能够更改
@mail($admin_email,'MYSQL报告',$message,'from:mysql@admin.com');
@mail($email,'MYSQL大小警告',$message,'from:mysql@admin.com');
//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]."<br>";
mysql_free_result($result);
} // end if
} // end for
//查询数据库完毕。


//以下代码用来判断数据库大小是否达到限制等。。。。
mysql_select_db('db_limit',$id); //db_limit数据库名可自由更改。但需要和其他程式保持一致

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!