怎么使 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实现首页链接查询 友情链接检查的代码
Jan 05 PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
php设置页面超时时间解决方法
Sep 22 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
php-fpm中max_children的配置
Mar 15 PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 PHP
php源码的安装方法和实例
Sep 26 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
正则表达式语法
2006/10/09 Javascript
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
详解PHP中的Traits
2015/07/29 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
vue.js表格分页示例
2016/10/18 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
Python迭代和迭代器详解
2016/11/10 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
使用python绘制二维图形示例
2019/11/22 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
清洁工表扬信
2014/01/08 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
娱乐节目策划方案
2014/06/10 职场文书
老人节标语大全
2014/10/08 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
利用python做数据拟合详情
2021/11/17 Python