怎么通过 Mysql 实现数据同步呢?

怎么使 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 [email protected]% 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 数据的同步了,如果各位还有兴趣的话,可以想一个连编辑、删除都能同步的更好的办法。

时间: 2024-08-25 03:05:53

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

Goldengate完成Mysql到Mysql的数据同步

文档参考地址:http://blog.csdn.net/u010587433/article/details/49305019 需求: 使用Goldengate完成Mysql到Mysql的数据同步,源库的o2m-mc库同步到目标库的gmdc库,表名GMQDSJSP,换句话说,就是不同数据库之间表之间数据的同步 实验准备: 系统: CentOS 7.2 mysql版本 :  5.7-12 mysql-1 : 192.168.68.13     mysql-2:192.168.68.14 1.初始化

MySQL主从数据同步延时分析

一.MySQL数据库主从同步延迟                                                              要了解MySQL数据库主从同步延迟原理,我们先从MySQL的数据库主从复制原理说起: MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高. Slave的IO Thread线程从主库中bin log中读取取日志. Slave的SQL Thread线程将主库的DDL和D

DataX实现HDFS与MySQL之间数据同步

本案例仅适用于HDFS与MySQL之间的数据同步实现. 1.  在编译安装之前注意将release下面的setSharePath方法中的路径改为你自己的安装路径,笔者的为/home/woody/datax/libs. 2.  rpm打包之前,要修改*.spec文件中的路径,dataxpath,此外可能还需要注解掉部分赋值文件的代码,如cp  –r ${OLDPWD}****.properties ****.conf,在engine.spec中的jar包复制语句也要注解掉. 3.  注意将hdfs

MySQL 主从数据同步配置

1:需要两台MySQL服务器,如:master:192.168.1.120slave:192.168.1.121确定MySQL的版本是相同的,可以登录到MySQL CLI界面,输入:select version();此实验MySQL版本是5.6的 2:主服务器要授权从服务器,登录到master的MySQL CLI,输入:grant all on *.* to "test"@"%" identified by '123456'; 3:配置主从服务器的bin-log日志

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

背景 线上有很多的数据库在运行,后台需要一个分析用户行为的数据仓库.目前比较流行的是mysql和hadoop平台. 现在的问题是,如何将线上的mysql数据实时的同步到hadoop中,以供分析.这篇文章就是利用tungsten-replicator来实现. 环境 由于tungsten-replicator依赖ruby和gem.需要安装 yum install ruby yum install rubygems gem install json 其中json模块可能因为gfw的原因,需要手动下载到

使用 tungsten-replicator4 实现 mysql -- &gt; monogo 数据同步

tungsten-replicator 技术交流群:376068310 一 规划主机: 192.168.67.128 #mysql主机 (事先安装好,安装步骤详见 前一篇博客 ) 192.168.67.129 #mongodb主机 (事先安装好,安装步骤详见 前一篇博客) 二 前置条件:(128和129) 1 创建tungsten用户 [[email protected] ~] useradd tungsten [[email protected] ~] passwd tungsten 2 将t

MYSQL数据库间同步数据

http://blog.csdn.net/swandy45/article/details/6982421 环境要求: Windows 操作系统 需要Mysql 3.23.15以后的版本. 假设数据库A为主机,数据库B为从机(A向B提供同步服务,即B中的数据来自A) A机器:IP=10.10.151.166 B机器:IP=10.10.151.156 下面看单向同步的配置步骤: 1         在机器A中建立一个新的数据库,sql语句: [sql] view plain copy CREATE

【转】mysql数据库读写分离数据同步

转载请注明来源:mysql数据库读写分离数据同步 mysql数据库读写分离数据同步 我是用了两个xp(一个主的,一个从的)的系统测试成功的,linux系统我也做测试了,没有成功,不过我想我所遇到的问题是同一个问题,xp下的可以成功,linux下的应该也可以成功,稍候会测试,然后更新结果! PS:刚测试了下linux 可以同步成功,主服务器是xp,从服务器是centos,可以成功. 例: A机器 192.168.0.2 B机器 192.168.0.3 两个机器可以ping通,互相访问 先配置主服务

高可用的并行MySQL数据同步及分布式

首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术.基于此技术外延开来有很多中架构,分类归结为如下: 1.树状结构(Master,Backup-Master,Slaves) 这种结构是目前Web系统用的最为通用的一种.整个系统有1个写入/更新点,即Master:Master-Backup和Slaves都是Replication的Master从库:多级Slave的原因是为了数据过滤和节省网络资源. 2.环状结构(Master-Master,Slaves) Dual