怎么使 Mysql 数据同步


Posted in PHP onOctober 09, 2006

怎么使 Mysql 数据同步 先假设有主机 A 和 B ( Linux 系统),主机 A 的 IP 分别是 1.2.3.4 (当然,也可以是动态的),主机 B 的 IP 是 5.6.7.8 。两个主机都装上了 PHP+Mysql ,现在操作的是主机 A 上的资料,如果另外一个主机 B 想跟 A 的资料进行同步,应该怎么做呢?  

OK,我们现在就动手。  

首先,如果要想两个主机间的资料同步,一种方法就是主机 A 往主机 B 送资料,另外一种主法就是主机 B 到主机 A 上拿资料,因为 A 的 IP 是动态的(假设),所以我们就得从主机 A 往主机 B 送资料。  

在主机 B 上创建一个 Mysql 账户。  
# GRANT ALL ON test.* TO user@% IDENTIFIED BY "password"; //创建用户 user,可以从任何机器访问到主机 B 上的 test 数据库。  

如果这里显示错误,先把 % 改为一个 IP ,然后再利用 phpMyAdmin 把 IP 改为 % ,测试无误后就可以写 php 程序。  

<?  
$link=mysql_pconnect("localhost","user","password");  
mysql_pconnect("localhost","user","password"); //连接本机(主机A)的数据库  
mysql_select_db("test"); //选择数据库test  

$re=mysql_query("select * from table order by id desc");  
$num=mysql_numrows($re);  
if (!empty($num)) {  
$id=mysql_result($re,0,"id"); //获得本机table表的最大ID  
}  

mysql_close($link); //关闭与本机数据库的连接  

$link=mysql_pconnect("5.6.7.8","test","test");  
mysql_pconnect("5.6.7.8","test","test"); //连接主机B的数据库  
mysql_select_db("test"); //选择数据库test,此数据库应该与主机A上test数据库的结构一样。  
$re=mysql_query("select * from table order by id desc");  
$num=mysql_numrows($re);  
if (!empty($num)) {  
$remote_id=mysql_result($re,0,"id"); //获得主机Btable表的最大ID  
}  

if ($id>$remote_id) {  
$result_id=$id-$remote_id; //如果主机A中table的最大ID大于主机B中table表的最大ID,说明两个  
} 的资料不同  

mysql_close($link); //关闭主机B的数据库连接  

$link=mysql_pconnect("localhost","user","password");  
mysql_pconnect("localhost","user","password");  
mysql_select_db("test");  

if (empty($result_id)) $result_id=0;  
if (empty($remote_id)) $remote_id=0; //如果主机B中的table的最大ID为空(里面没有资料),那么就等0  

$re=mysql_query("select * from table limit $remote_id,$result_id"); //取出主机A中table表与主机B中table表里不同的资料  
$num=mysql_numrows($re);  
if (!empty($num)) {  
for ($i=0;$i<$num;$i++) {  
$test[$i]=mysql_result($re,$i,"test"); //把不同的资料放入一个数组里  
}  
}  
mysql_close($link); //关闭主机A的数据库连接  

$link=mysql_pconnect("5.6.7.8","user","password");  
mysql_pconnect("5.6.7.8","user","pasword");  
mysql_select_db("test");  

for ($j=0;$j<$i;$j++) { //这里的i等于在比较主机A与主机B上table表不同资料的数量  

mysql_query("insert into table (test) values(\'$test[$j]\')");  

}  

mysql_close($link); //关闭主机B的数据库连接  

?>  

这时就初步实现了 A 主机和 B 主机数据的同步,但现在还需要人手动每次去激活这个程序,有没有办法把它作为一个脚本一样的,放在 crontab 里面指定时间自动执行呢?  

在安装 php 时会自动生一个叫 php 的可执行文件,一般在/你安装的 php 目录 /bin 下面,不过较底的版本好像没有,如果没有这个文件,你就得升级你的 php 。  

#php -q test.php  

php 原本是应用在网页应用的?因此它会送出 HTML 的 Header?但是在此我们是要将 php 用作 Shell Script?"-q" 就是表示不要送出 Header 的意思.  

最后编辑 /etc/crontab 里的文件,加上下面这一句。  

0 0 * * * root /home/httpd/html/test //每天晚上零点执/home/httpd/html/test文件(具体使用方法请查看cron的相关资料)  

OK,到这里差不多就已完成 Mysql 数据的同步了,如果各位还有兴趣的话,可以想一个连编辑、删除都能同步的更好的办法。

PHP 相关文章推荐
删除无限级目录与文件代码共享
Jul 12 PHP
用Php实现链结人气统计
Oct 09 PHP
我的群发邮件程序
Oct 09 PHP
PHP 高级课程笔记 面向对象
Jun 21 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
php有效防止同一用户多次登录
Nov 19 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
浅谈PHP的反射API
Feb 26 PHP
PHP中的正则表达式实例详解
Apr 25 PHP
PHP 中的类
Oct 09 #PHP
用PHP实现验证码功能
Oct 09 #PHP
汉字转化为拼音(php版)
Oct 09 #PHP
如何限制访问者的ip(PHPBB的代码)
Oct 09 #PHP
substr()函数中文版
Oct 09 #PHP
如何使用PHP中的字符串函数
Oct 09 #PHP
vBulletin Forum 2.3.xx SQL Injection
Oct 09 #PHP
You might like
当海贼王变成JOJO风
2020/03/02 日漫
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
pandas对指定列进行填充的方法
2018/04/11 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
python 日期排序的实例代码
2019/07/11 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
python实现取余操作的简单实例
2020/08/16 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
销售人员个人求职信
2013/09/26 职场文书
汽车检测与维修专业求职信
2013/10/30 职场文书
大学毕业生简单自荐信
2013/11/05 职场文书
会议活动邀请函
2014/01/27 职场文书
健康家庭事迹材料
2014/05/02 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
独生子女证明范本
2015/06/19 职场文书