怎么使 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 $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
Jun 21 PHP
PHP字符编码问题之GB2312 VS UTF-8解决方法
Jun 23 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
PHP中array_map与array_column之间的关系分析
Aug 19 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
php根据年月获取当月天数及日期数组的方法
Nov 30 PHP
php实现的双色球算法示例
Jun 20 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
Laravel中10个有用的用法小结
May 06 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 PHP
php进行md5加密简单实例方法
Sep 19 PHP
laravel-admin 实现给grid的列添加行数序号的方法
Oct 08 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 cli 小技巧
2013/06/03 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
jQuery 选择器理解
2010/03/16 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
js实现随机点名功能
2020/12/23 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
Python中__call__用法实例
2014/08/29 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
密封类可以有虚函数吗
2014/08/11 面试题
国际商务专业学生个人的自我评价
2013/09/28 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
2015年中个人总结范文
2015/03/10 职场文书
欠款起诉书范文
2015/05/19 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
医院感染管理制度
2015/08/05 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
如何有效防止sql注入的方法
2021/05/25 SQL Server
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL