记录一下这次做的双向同步及环形同步吧,都是最简单的实现;

具体实现之前,先说些与之有关的内容吧,大部分内容都是网上的,操作步骤则是亲自测试之后记录下的;

一. 数据同步的几种方式:

1. 触发器,在数据库中建立增删改的触发器,每当数据库有变化,就会激活触发器,进而执行相应的操作,缺点是性能问题;

2. 时间戳,即在要同步的表里增加一个字段,当数据变化后,这个字段会发生相应的变化,然后根据这个字段的值来进行同步,可以是日期类型,记录当前的时间,缺点是有些延时,并且是每个表都要有这个字段。这中间还会涉及到逻辑删除;

3. 日志记录,通过分析数据库的日志,来获取数据库中变化的数据,缺点有些延时,并且对于没有提供日志分析接口的数据库,开发难度较大;

二. 数据库双向同步的实现

系统:windows 7旗舰版

数据库:MySQL Server 5.0

主机A的IP:192.168.75.129     主机B的IP:192.168.75.130

1. 首先要保证两台主机间能的网络通信是正常的,可以ping一下或Telnet一下;

2. 添加同步帐号:

grant replication slave,replication client on *.* to backup@'192.168.75.129' identified by '123456';

也可设置为局域网内访问,即IP为192.168.75.%。

在主机A和B上分别执行了添加帐号之后,先测试一下能否正常连接,如在B上测试:

mysql -u backup -p -h192.168.75.129 -P3306

如果不能访问,多半是账户backup的权限不够,修改权限即可;

在A中重新对backup账户grant一下,如果grant了几次都不行,那就给所有的权限,当然,只是为了测试;

grant all privileges on *.* to ‘backup’@’%’ identified by ‘123456’;

3. 停掉A和B的MySQL服务,然后对A和B的my.ini进行配置,A和B的server-id不一样;

server-id = 1      #MySQL服务器标志,必须唯一
log-bin=mysql-bin #二进制日志文件的位置和命名
log-slave-updates=1 #事件自动更新到日志中
sync_binlog=1 #日志文件同步到磁盘上
replicate_do_db=test #要同步的数据库名称

4. 启动各自的MySQL服务,进行动态的Change master配置,先对B进行配置:

change master to master_host='192.168.75.129',
master_user='backup',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=0;

至于master_log_file和master_log_pos可以使用show master status来查看的;

然后对A执行相同的操作,注意master_host,如果报错,先slave stop,在操作,再slave start即可;

5. 使用show slave status\G来查看同步是否正确执行;

show slave status\G

如果Slave_IO_Running、Slave_SQL_Running都为YES,则表明配置已经成功,下一步可以准备测试了;

6. 可以进行简单的create, alter ,update, insert ,delete测试了;

三. 环形同步

系统:windows 7旗舰版

数据库:MySQL Server 5.0

主机A的IP:192.168.75.129     主机B的IP:192.168.75.130   主机C的IP:192.168.75.131

1. 采用环形操作,即A是B的主服务器,B是C的主服务器,C又是A的主服务器,依次类推组成一个环状结构。这样ABC三台服务器,在任意一台执行数据操作,数据均会同步其他服务器上。

2. 分别配置A、B、 C的my.ini,在[mysqld]下添加如下配置内容:

server-id = 1
log-bin=mysql-bin
log-slave-updates=1
slave-skip-errors=all
replicate_do_db=test

其中需注意A、B、C的server-id是不同的;

3. 配置完成后,重启各主机的服务;

4. 对主机A添加专门用于同步的账户,操作过程和双向同步类似;

GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.75.130:3306' IDENTIFIED BY '123456';

5. 然后对B也进行同样操作,但@的是C的地址,并且根据A的show master status的日志文件和偏移量,进行如下操作:

slave stop;

CHANGE MASTER TO MASTER_HOST='192.168.75.129',
MASTER_USER='backup',
MASTER_PASSWORD='123456',
MASTER_PORT=3309,
MASTER_LOG_FILE='mysql-bin.000001', //A的日志文件
MASTER_LOG_POS=98; //A的偏移量 slave start;

需注意的是端口号,因为我的端口号修改为了3309;

6. 对C进行同样操作,@的是A的地址,并且根据B的show master status的日志文件和偏移量,进行配置:

其中master_host是B的IP地址;

然后对A进行操作,根据C的show master status,进行同样的配置,注意master_host;

7.全部重启服务,分别看下show slave status\G,如果是YES,就没问题了:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

8.可以测试了;

总结:

1. 实现过程中,遇到最多的问题应该就是账户的权限不足,导致ping不通的问题了;

2. 这次双向同步和环形同步实现的是最简单的,好多问题都没有考虑,如权限问题,ID冲突的问题,环形同步的稳定性问题,即如果一个节点出了问题,别的节点都会收到影响;

3. 参考网址:MySQL环形同步和测试

Windows下MySQL双向同步及环形同步的实现的更多相关文章

  1. windows下mysql的数据主主同步

    mysql主主备份: 保证各服务器上的数据库中的数据一致,因此需要开启数据库同步机制.由于是一整套系统,并且系统内含数据库.由于任何一台服务器都有可能被选中,因此要让所有的数据库上的数据都是最新的,任 ...

  2. Windows 下目录及文件向Linux同步

    本文解决的是Windows 下目录及文件向Linux同步的问题,Windows向 Windows同步的请参考:http://www.idcfree.com/article-852-1.html 环境介 ...

  3. MySQL 5.7 Command Line Client输入密码后闪退和windows下mysql忘记root密码的解决办法

    MySQL 5.7 Command Line Client输入密码后闪退的问题: 问题分析: 1.查看mysql command line client默认执行的一些参数.方法:开始->所有程序 ...

  4. coreseek实战(二):windows下mysql数据源部分配置说明

    coreseek实战(二):windows下mysql数据源部分配置说明 关于coreseek在windows使用mysql数据源的配置,以及中文分词的详细说明,请参考官方文档: mysql数据源配置 ...

  5. Windows下mysql自动备份的最佳方案

    网上有很多关于window下Mysql自动备份的方法,其实不乏一些不好的地方和问题,现总结出一个最好的方法供大家参考: 新建一个记事本,然后重命名为: mysql_backup.bat 然后单击右键选 ...

  6. Windows下mysql忘记密码的解决方法

    Windows下mysql忘记密码的解决方法 mysql5.0 http://www.jb51.net/article/21984.htm方法一: 1.在DOS窗口下输入 net stop mysql ...

  7. Windows下MYSQL自动备份批处理

    windows下MYSQL自动备份批处理 2011-05-04 09:16:45|  分类: mysql|举报|字号 订阅     按系统时间进行备份 注意mysql安装路径中如果有空格.就要把,.b ...

  8. 【已解决】Windows下 MySQL大小写敏感 解决方案及分析

    Windows下 MySQL大小写敏感配置 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-3-27 最近在window ...

  9. windows下mysql和linux下mysql主从配置

    1. linux下mysql安装版本5.6   windows下mysql版本5.7  不要问我为什么版本不一致  就是想这么搞 2. linux为主服务器   windows为从服务器 3.找到li ...

随机推荐

  1. 金错刀对话口袋购物王珂:找到痛点,确认卖点,制造爆点! - 资讯 - i黑马网

    金错刀对话口袋购物王珂:找到痛点,确认卖点,制造爆点! - 资讯 - i黑马网 金错刀对话口袋购物王珂:找到痛点,确认卖点,制造爆点!

  2. 你需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  3. POJ 2886 Who Gets the Most Candies? 线段树。。还有方向感

    这道题不仅仅是在考察线段树,还他妹的在考察一个人的方向感.... 和线段树有关的那几个函数写了一遍就对了,连改都没改,一直在转圈的问题的出错.... 题意:从第K个同学开始,若K的数字为正 则往右转, ...

  4. MYSQL视图的学习笔记

    MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具   1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...

  5. 二、MLlib统计指标之关联/抽样/汇总

    汇总统计[Summary statistics]: Summary statistics提供了基于列的统计信息,包括6个统计量:均值.方差.非零统计量个数.总数.最小值.最大值. import org ...

  6. 浙江大学PAT上机题解析之5-05. QQ帐户的申请与登陆

    实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式说明: 输入首先给出一个正整数N(<=105),随后给出N行指令.每行指令的格式为:“命令符 ...

  7. android怎样写一个循环文字滚动的TextView

    效果图: 在layout中这样来声明: <com.kaixin001.view.ScrollText android:id="@+id/news_statustxt" and ...

  8. 数据持久化之CoreData

    再次回归博客园, 已经实属不易了, 面临这近期忙忙碌碌的项目开发, 虽然并不是完全的没有闲暇时间, 但是怎么说呢, 也有着各种的无奈与曲折, 面临这产品需求的不断变化和页面的不断更新, 对于一个程序员 ...

  9. ContextLoaderListener初始化的前后文和DispatcherServlet初始化的上下文关系

    ContextLoaderListener初始化的上下文加载的Bean是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层.Service层Bean: DispatcherServlet ...

  10. jquery之onchange事件2

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...