怎么使 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 相关文章推荐
php 中include()与require()的对比
Oct 09 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
yii2 数据库读写分离配置示例
Feb 10 PHP
phpstudy的php版本自由修改的方法
Oct 18 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 PHP
PHP遍历数组的6种方式总结
Nov 17 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
FCK调用方法..
2006/12/21 Javascript
JavaScript入门学习书籍推荐
2008/06/12 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
Python 26进制计算实现方法
2015/05/28 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
Python实现分数序列求和
2020/02/25 Python
Python中logger日志模块详解
2020/08/04 Python
详解Python中import机制
2020/09/11 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
个人自我鉴定怎么写
2013/10/28 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书