怎么使 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抽象工厂模式(Elgg)
Mar 21 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
php定界符
Jun 19 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 PHP
PHP比你想象的好得多
Nov 27 PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 PHP
PHP中include/require/include_once/require_once使用心得
Aug 28 PHP
php解决和避免form表单重复提交的几种方法
Aug 31 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 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
德生PL660的电路分析和打磨
2021/03/02 无线电
destoon二次开发入门示例
2014/06/20 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Python中作用域的深入讲解
2018/12/10 Python
python 调试冷知识(小结)
2019/11/11 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
应届生体育教师自荐信
2013/10/03 职场文书
学校运动会开幕演讲稿
2014/01/04 职场文书
暑期社会实践感言
2014/02/25 职场文书
我的理想演讲稿
2014/04/30 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
蜗居观后感
2015/06/11 职场文书
培根随笔读书笔记
2015/07/01 职场文书
党员理论学习心得体会
2016/01/21 职场文书
vscode中使用npm安装babel的方法
2021/08/02 Javascript
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫
Python保存并浏览用户的历史记录
2022/04/29 Python