怎么使 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 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
谈谈新手如何学习PHP 默默经典版本
Aug 04 PHP
PHP 引用是个坏习惯
Mar 12 PHP
Apache中php.ini的设置方法
Feb 28 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
Sep 22 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
Dec 18 PHP
Symfony2函数用法实例分析
Mar 18 PHP
详解PHP中foreach的用法和实例
Oct 25 PHP
PHP一个简单的无需刷新爬虫
Jan 05 PHP
PHP chr()函数讲解
Feb 11 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
Jan 23 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 柱状图实现代码
2009/12/04 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
Python内置的字符串处理函数整理
2013/01/29 Python
python批量导出导入MySQL用户的方法
2013/11/15 Python
python中精确输出JSON浮点数的方法
2014/04/18 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
Python Requests库基本用法示例
2018/08/20 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
劳资员岗位职责
2015/02/13 职场文书
倡议书怎么写?
2019/04/11 职场文书