怎么使 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 google或baidu分页代码
Nov 26 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
Nov 14 PHP
教你如何用php实现LOL数据远程获取
Jun 10 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
php简单统计在线人数的方法
May 10 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
May 09 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
php操作redis数据库常见方法实例总结
Feb 20 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
php实现单链表的实例代码
2013/03/22 PHP
PHP验证码函数代码(简单实用)
2013/09/29 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
Python中的一些陷阱与技巧小结
2015/07/10 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
python读写配置文件操作示例
2019/07/03 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
夜大毕业生自我评价分享
2013/11/10 职场文书
《母鸡》教学反思
2014/02/25 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
老公保证书范文
2014/04/29 职场文书
承诺书格式
2014/06/03 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
2014年物流工作总结
2014/11/25 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
详解Nginx 工作原理
2021/03/31 Servers
Python+Tkinter制作专属图形化界面
2022/04/01 Python