您的位置:首页 > 编程语言 > PHP开发

PHP一键比对更新MYSQL数据库的一些想法

2016-03-06 17:56 375 查看
帮一个朋友维护CMS,具体的还要有一键远程匹配数据库的功能。

当时给的需求是:

1.能够一键比对远程服务器上的数据库的表和字段。

2.比对完成后,如果发现某表或者某字段缺失,那么就自动生成sql语句,来重新生成一个“补丁”

开始以为很简单,其实还蛮复杂的。

一开始就要进更新服务器(主服务器),感觉有点主从结构,读写分离的味道,233333;

分配好一个专门用来远程比对的mysql用户,并且设置权限为select.

然后再在所有的“从”服务器的代码里面写上这个用户的帐号密码。

比对的代码如下:

//远程对比表的情况
function compare(){
//链接本地数据库
mysql_connect(C('DB_HOST'),C('DB_USER'),C('DB_PWD'));
mysql_select_db(C('DB_NAME')); //标准的数据库
$q = mysql_query("show tables");
while($s = mysql_fetch_array($q)){
$name = $s[0];
$q1 = mysql_query("desc $name");
while ($s1 = mysql_fetch_array($q1)) {
$a[$name][] =$s1[0];
}
}
mysql_close();

//链接远程数据库
mysql_connect('182.92.109.88','demoweidogs123','demoweidogs123');
mysql_select_db('demoweidogs123');//需要比较的数据库
$q2 = mysql_query("show tables");
while($s2 = mysql_fetch_array($q2)){
$name2= $s2[0];
$q3 = mysql_query("desc $name2");
while ($s3 = mysql_fetch_array($q3)) {
$aa[$name2][] =$s3[0];
}
}
mysql_close();

$f = $e = array();
$str = $fuhao ='';
foreach($a as $k=>$v){
if(!is_array($aa[$k])){
$e[] = $k;
}
else{
if(count($aa[$k]) <> count($v)){
foreach($v as $k1=>$v1){
if(!in_array($v1,$aa[$k])){
$f[$k][] = $v1;
}
}
}
}
}


然后可以得出结论是否缺少某个表或者某个字段。

至于后续的更新我们以后再写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: