怎么使 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 原本是应用在网页应用的o因此它会送出 HTML 的 Headero但是在此我们是要将 php 用作 Shell Scripto"-q" 就是表示不要送出 Header 的意思.  
最后编辑 /etc/crontab 里的文件,加上下面这一句。  
0 0 * * * root /home/httpd/html/test //每天晚上零点执/home/httpd/html/test文件(具体使用方法请查看cron的相关资料)  
OK,到这里差不多就已完成 Mysql 数据的同步了,如果各位还有兴趣的话,可以想一个连编辑、删除都能同步的更好的办法。

怎么通过 Mysql 实现数据同步呢?的更多相关文章

  1. 两台Mysql数据库数据同步实现

    两台Mysql数据库数据同步实现 做开发的时候要做Mysql的数据库同步,两台安装一样的系统,都是FreeBSD5.4,安装了Apache 2.0.55和PHP 4.4.0,Mysql的版本是4.1. ...

  2. Goldengate完成Mysql到Mysql的数据同步

    文档参考地址:http://blog.csdn.net/u010587433/article/details/49305019 需求: 使用Goldengate完成Mysql到Mysql的数据同步,源 ...

  3. MySQL主从数据同步延时分析

    一.MySQL数据库主从同步延迟                                                              要了解MySQL数据库主从同步延迟原理,我们 ...

  4. 减少mysql主从数据同步延迟

    网上给出的解决办法: 基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素:1. 网络延迟2. master负载3. slave负 ...

  5. redis和mySql的数据同步的解析

    1.同步MySQL数据到Redis (1) 在redis数据库设置缓存时间,当该条数据缓存时间过期之后自动释放,去数据库进行重新查询,但这样的话,我们放在缓存中的数据对数据的一致性要求不是很高才能放入 ...

  6. 使用tungsten将mysql的数据同步到hadoop

    背景 线上有很多的数据库在运行,后台需要一个分析用户行为的数据仓库.目前比较流行的是mysql和hadoop平台. 现在的问题是,如何将线上的mysql数据实时的同步到hadoop中,以供分析.这篇文 ...

  7. 使用Canal作为mysql的数据同步工具

    一.Canal介绍 1.应用场景 在前面的统计分析功能中,我们采取了服务调用获取统计数据,这样耦合度高,效率相对较低,目前我采取另一种实现方式,通过实时同步数据库表的方式实现,例如我们要统计每天注册与 ...

  8. Mysql主从数据同步cheksum问题

    做主从同步时出现问题,show slave status显示错误: Last_IO_Error: Got fatal error from master when reading data from ...

  9. mysql 主从数据同步配置

    一主一从,单向同步 master 数据库的数据变更单向同步到 slave 数据库 互为主从,双向同步 master 数据库的数据变更同步到 slave 数据库,slave 数据库的数据边同步到 mas ...

随机推荐

  1. redisTemplate的spring配置以及lua脚本驱动

    最近在使用spring-data-redis的redisTemplate,所以写篇使用记录吧. 1.不用多说,使用maven引入相关依赖,因为项目已经引入其他的 <dependency> ...

  2. MVC中使用EF的技巧集

    1.从数据库生成模型后,再次更新模型时,之前设置的验证规则会丢失. 解决方法:在Models文件夹中新建一个空白类,把它命名为shujuyanzh.cs(类名可以自定),然后把Models中自动生成的 ...

  3. Bootstrap的字体文件woff2 报错

    在iis上看到网站有个404,于是强迫症来了... 百度了许久,知道了解决办法,记下来,是网站默认没有支持这种字体 在 Web.config 的 system.webServer 节点中添加: 带标签 ...

  4. HBASE数据模型&扩展和负载均衡理论

    示例数据模型 HBase中扩展和负载均衡的基本单元成为region,region本质上是以行健排序的连续存储区间.如果region太大,系统会把它们 自动拆分,相反的,就是把多个region合并,以减 ...

  5. 【入门】 jpa--实体管理器的基本应用

    1.新建Jpa项目 2.引入所需的jar 包 3.创建实体类 package com.watchfree.entity; import javax.persistence.Entity; import ...

  6. 视觉机器学习读书笔记--------SVM方法

    SVM是一种二类分类模型,有监督的统计学习方法,能够最小化经验误差和最大化几何边缘,被称为最大间隔分类器,可用于分类和回归分析.支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题, ...

  7. typealias和泛型接口

    typealias 是用来为已经存在的类型重新定义名字的,通过命名,可以使代码变得更加清晰.使用的语法也很简单,使用 typealias 关键字像使用普通的赋值语句一样,可以将某个已经存在的类型赋值为 ...

  8. iOS:使用模板引擎渲染HTML界面

    在实际开发中,UIWebView控件接受一个HTML内容,用于相应的界面,下面是该API的接口: - (void)loadHTMLString:(NSString *)string baseURL:( ...

  9. Hibernate操作指南-实体之间的关联关系(基于注解)

  10. 【CSS 杂记】

    1.CSS达到截取效果 地方卡机了会计师的立法及  =>  地方卡机了... max-width: 400px; overflow: hidden; white-space: nowrap; t ...