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='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]."
"; 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 修改 删除"; } ?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值