怎么使 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 广告调用类代码(支持Flash调用)
Aug 11 PHP
PHP管理内存函数 memory_get_usage()使用介绍
Sep 23 PHP
php异常处理使用示例
Feb 25 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
php判断linux下程序问题实例
Jul 09 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
php下的原生ajax请求用法实例分析
Feb 28 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
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
python中循环语句while用法实例
2015/05/16 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
Python内置函数及功能简介汇总
2020/10/13 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
JDO的含义
2012/11/17 面试题
新闻报道稿范文
2015/07/23 职场文书
python实现自定义日志的具体方法
2021/05/28 Python
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL