高效服务器数据同步方案


请问一下如果两台服务器上的数据需要同步,要怎么做呢,我本来是用数组的形式来同步的,然后开了四个线程,一个纯种线程做10000条数据的抓取,并连接另一台服务器存入其数据库,但我发现这样的效率很差,耗时又耗资源和内存,请问有什么好办法没?

想到办法了,先往内存里写,然后再往数据库里写。
1.数据库语句执行效率有问题,limit扫5000000数据着实不敢恭维,我改成>和<了,这样更新一次只要1分钟的样子
2.本地索引文件更新只要4分钟,目前还是挺满意的,谢谢各位了。

服务器 java

lshbig 12 years, 2 months ago

我的理解是 您需要在两台服务器间进行数据库的同步。如理解有误请指出。
这个问题一般的做法是这样的:

环境 :两台windows xp系统机器,并且安装同一版本的数据库

两台机器Ip

A:173.26.100.62

B:173.26.100.61

此例为A为主服务器,B为从服务器,A服务器上的数据变更会更新到B服务器数据库当中
步骤:
1 .A机器上创建数据库tsas,设置数据库访问权限,也就是创建一个用户和密码,目的在于在B机器上用创建的这个用户能够正常连接A机器的数据库。

   
  grant file on *.* to backup@'173.26.100.61' identified by '1234';
 

2.在A服务器的mysql目录下编辑my.ini,加入如下语句:

   
  server-id=1
  
log-bin=C:\mysqlbak\log-bin.log

3.重起A机器,可以用命令show master status 察看状态

4 设置B服务器,打开B机器mysql目录下的my.ini,加入以下语句:

   
  server-id=2
  
master-host=173.26.100.62
master-user=backup #同步用户帐号
master-password=1234
master-port=3306
master-connect-retry=60 预设重试间隔60秒
replicate-do-db=tsas 告诉slave只做backup数据库的更新

5.重新启动B机器,可以用命令 show slave status察看B机器状态

6.测试:
向A批量插入大数据量数据,那么在B机器当中察看相关的表格,B机器与A机器中的数据是一致的,这样就可以达到B机器同步A机器的数据。

原理机制:
在镜像关系中,一个MySQL服务器扮演主服务器角色,另外一个或多个服务器扮演从服务器角色,从服务器中的数据和主服务器中的数据完全一样。

在镜像建立之前,主服务器和从服务器必须进行一次完全同步。同步之后,在主服务器上所做的操作将会在从服务器上再实现,主服务器上的操作不是直接作用于从服务器上的。

负责在主、从服务器上传输各种修改动作的媒介是主服务器上的二进制变更日志,该日志记录着主服务器上所有的操作动作。因此,主服务器必须激活二进制日志功能。

从服务器必须有足够的权限从主服务器上接收二进制日志文件。镜像协调信息记录从服务器的进展情况,包括,从服务器正在读取的二进制变更日志文件名和它在该文件里的当前读写位置。

每个主服务器可以有多个从服务器,但每个从服务器只能有一个主服务器。但MySQL服务器允许把一个从服务器作为另一个从服务器的主服务器,这样就可创建一个镜像服务器链。

当然,如果使用的数据库比较强大,还可以更简单,参考如下链接:
http://topic.csdn.net/u/20080523/11/08e4624a-13d1-4a6c-a9bc-7cfdd721a351.html

newneos answered 12 years, 2 months ago

Your Answer