怎么使 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 相关文章推荐
第六节--访问属性和方法
Nov 16 PHP
PHP求最大子序列和的算法实现
Jun 24 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 PHP
PHP远程采集图片详细教程
Jul 01 PHP
php结合正则批量抓取网页中邮箱地址
May 19 PHP
php实现对象克隆的方法
Jun 20 PHP
Zend Framework入门知识点小结
Mar 19 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
php 的多进程操作实践案例分析
Feb 28 PHP
PHP接入支付宝接口失效流程详解
Nov 10 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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
在Django的视图中使用form对象的方法
2015/07/18 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
浅析Python面向对象编程
2020/07/10 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
椰子猫砂:CatSpot
2018/08/27 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
四个太阳教学反思
2014/02/01 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
自我检讨书怎么写
2015/05/07 职场文书
李强感恩观后感
2015/06/17 职场文书
母亲节主题班会
2015/08/14 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
用Python可视化新冠疫情数据
2022/01/18 Python
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS