PHP一键比对更新MYSQL数据库的一些想法
2016-03-06 17:56
375 查看
帮一个朋友维护CMS,具体的还要有一键远程匹配数据库的功能。
当时给的需求是:
1.能够一键比对远程服务器上的数据库的表和字段。
2.比对完成后,如果发现某表或者某字段缺失,那么就自动生成sql语句,来重新生成一个“补丁”
开始以为很简单,其实还蛮复杂的。
一开始就要进更新服务器(主服务器),感觉有点主从结构,读写分离的味道,233333;
分配好一个专门用来远程比对的mysql用户,并且设置权限为select.
然后再在所有的“从”服务器的代码里面写上这个用户的帐号密码。
比对的代码如下:
然后可以得出结论是否缺少某个表或者某个字段。
至于后续的更新我们以后再写。
当时给的需求是:
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; } } } } }
然后可以得出结论是否缺少某个表或者某个字段。
至于后续的更新我们以后再写。
相关文章推荐
- php正则表达式 获取开始字符串和结束字符串中的部分内容
- PHP+MYSQL+AJAX - 第四章 认识PHP基本语法
- PHP “Warning: session_start()...” 的解决方法
- 从底层剖析 php-fpm 和 mysql 之间的关系 ,涉及连接池pool
- PHP 的ini配置文件的读写操作函数
- PHP 通过fsockopen函数获取远程网页源码
- PHP 中文汉字转换成拼音函数
- PHP 中文汉字转换成拼音函数
- Windows服务器上使用bat定时执行php
- 解决下载文件过程中内存暴涨之---OutputStream
- 某系统响应时间慢TPS低性能瓶颈调优过程
- php基础复习(3)文件上传于下载
- 安装php时,configure: error: xml2-config not found. Please check your libxml2 installation
- AMH4.2面板PHP升级5.6.9
- PHP Laravel框架文档资料汇总
- 服务器上创建Laravel项目(composer安装)
- NTP多种模式的配置
- 使用ThinkPHP保存时出现SHOW COLUMNS FROM
- Laravel学习-三种方式搭建开发环境
- ViewPager + FragmentPagerAdapter 实现底Tab的预加载问题。