zoukankan      html  css  js  c++  java
  • Mysql 基于BinaryLog的复制

    。Mysql Master将更新【Update】和变化【Change】作为事件【events】写入Binary log.Mysql slaves 被配置为读取Binary log from master ,以执行事件【events】.

    每一个Slave 都会接收一个副本【entire content of the binary log】,由Slave来决定应执行Binary log 中的哪些语句。默认下,Slave会执行Master binary log中的所有events;在必要时,你可以配置使之只对特定库或表进行操作。

    每个Slave都对自己的执行做了记录:FileName And Position within the file [binary log from the master].所以不同的slave独立执行Master binary log的不同部分,互不影响。

    在复制服务中,Master和Slave都必须有惟一标识【server-id】,除此之外,每一个Slave 还应配置Master的hostName,logfileName及文件的位置。当然这些细节也可以在Slave中的Mysql会话【Mysql Session】中进行设置,使用CHANGE MASTER TO 语句。这些配置信息被保存在mysql.slave_master_info中。

    具体控制语句,见手册:14.4.2 SQL Statements for Controlling Slave Servers,Section 14.4.1 SQL Statements for Controlling Master ServersSection 18.1.6 Replication and Binary Logging Options and Variables

    1设置Master

    必须启动 binary logging和建立ServerId;同时为了保证最大可能的持久性【durability】和一致性【consistency】,应该将innodb_flush_log_at_trx_commit=1 and sync_binlog=1.

    2.创建一个复制用户【非必须】

    要确保该用户具有REPLICAION SLAVE权限。

    3.获取REPLICATION MASTER BINARY LOG的坐标【COORDINATES】

    如果已经启动了Binary log ,可使用下面方法获取Master 的Binarylog 坐标:

    运行 FLUSH TABLES WITH READ LOCK; 刷新所有表并阻止所有写操作,即阻止Commit[对Innodb]。

    在另一个Session中,可使用SHOW MASTER STATUS 来确定binary log的名称和Position。

    Note:该位置就是Slave开始更新的位置。

    4,准备初始数据,至于采取哪种策略取决于MASTER上是否有要同步的数据。如果要同步初始数据,请转向4.1;否则转向5.

      4.1 保证Session运行以确保继续锁定。

      要将Master上指定库的数据同步到各个Slave上,使用mysqldump,是推荐做法,尤其对于innodb.

    通过scp命令上传到Slave服务器,

    在Master上,释放锁:UNLOCK TABLES

    5,建立Slave

    首先对Slave进行配置,为Slave 添加ServerId,并导入文件,如图:

    配置Slave使之与Master通信:

    CHANGE MASTER TO

                     MASTER_HOST='192.168.7.44',

                     MASTER_USER='tjc',

                     MASTER_PASSWORD='123456',

                     MASTER_LOG_FILE='bin_log.000002',

                    MASTER_LOG_POS=5051;

    启动Slave 

    查看Slave 状态:

    如果 Slave_IO_Running 和 Slave_SQL_Running 都为Yes,则运行正常;如Slave_SQL_Running =NO,需要 START SLAVE.

     也可以向集群中添加新的Slave,这时并不需要停止Master运行。只需要拷贝Slave的数据目录到新的Slave。具体可参考手册18.1.2.6。

    关于主从复制的相关介绍,也可查看:

    http://blog.csdn.net/hguisu/article/details/7325124

    http://wangwei007.blog.51cto.com/68019/965575

    Note:在主从复制时,如果遇到执行失败或错误,会导致从被卡住:Slave_SQL_Runnig:NO.有两种处理方式:

    方法一:首先Stop slave;

        然后设置:set global SQL_SLAVE_SKIP_COUNTER=1;【指在遇到报错时跳过这我条,执行下一条】

        最后 Start slave;

    方法二:使用 change master to ,将从的日志记录和位置强制更新到与主一致。【可能会造成数据丢失】。

    推荐使用第一种。

    也可参考:https://my.oschina.net/duguaoxue/blog/512152。

    上面论述的只是单向主从模式,即Master-Slave,Master写,Slave只能读;Slave不能进行写操作,否则会出现问题。

    下面介绍双主模式:即Master-Master:两服务器之间互为主从,都支持写操作,

    配置时注意,双方都要进行change master to ,挂载到Master,

    同时需将 log_slave_updates=1,将更新操作记录到BinLog,双方都要开启BInLog。

    如:

     
  • 相关阅读:
    VUE图片懒加载-vue lazyload插件的简单使用
    vuejs+axios发送请求
    Vue2.0+Node.js+MongoDB全栈打造商城系统
    Vue基础知识之vue-resource和axios
    vue-resource
    css3 转换 过渡 及动画
    css sticky footer布局
    vue 前端生成二维码 (带图标)
    微信小程序学习四
    tradingview绘制K线周期切换保留指标
  • 原文地址:https://www.cnblogs.com/itdev/p/6000264.html
Copyright © 2011-2022 走看看