快速业务通道

mysql的主从构架,复制,半同步,SSL加密复制的实现

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-27

================================================

Empire CMS,phome.net

#如果上面的过程一直mysql报错,那么我们可以使用下列选项忽略它

在my.cnf里添加replicate-ignore-db=db 在从服务器复制时忽略某个数据库

#如果一直是mysql这个数据库报错,replicate-ignore-db=mysql,重启服务

STOP SLAVE;

START SLAVE;

SHOW SLAVE STATUS\G # 确保无错才能进行下面的复制过程

====================================================

3) 数据库复制过程的实现

(1)#在主服务器上创建一个数据库

  1. mysql> CREATE DATABASE MYDB;
  2. mysql> USE MYDB;
  3. mysql> CREATE TABLE t1 ( name varchar(20) );

(2) 从服务器设置,启动复制线程

mysql> START SLAVE;

Query OK, 0 rows affected (0.00 sec)

出现MYDB了,复制成功!

=================分 割 线======================

复制过程详解:

假设我们现在有4台mysql服务器 1主:A 3从:B C D

从服务器B C D 同时发起复制请求后,主服务器A将数据传输给从服务器B C D,这个过程是异步的,A受到请求后,不管B C D是否同步完成,如果有修改数据的,继续写入数据,这在使用的时候是无法控制的,这样可能造成数据不一致(同步到一半断了而主服务器不管),耗时很长.后来goole为mysql引入了一个插件,实现半同步,大大缩减了同步花费的时间,那就是 Semi-sync.

半同步的概念:数据同步时,只等待其中至少一台从服务器(比如B)完成.这样再通过这台从服务器将数据同步给其他服务器(C D)

Empire CMS,phome.net

但是半同步也会带来的问题:网络原因(比如网速很慢)造成同步迟迟不能进行.

解决方法:在等不到某一个从服务器同步后,自动降级为异步.

Semi-sync简介:

Semi-sync最早是由Google实现的一个补丁,代码主要由Mark Callaghan、Wei Li(@Google)等人贡献.Google原本是将需求提给Hekki的,但是后来等不及就自己实现了.......(现在Mark Callaghan已跳到Facebook,除了Google,他曾经还在Informix、Oracle工作过)

在5.5之后由MySQL Replication Team按照Plugin的方式将代码移植过来,并将Semi-sync独立成MySQL的一个插件,主要代码移植者是Zhenxing He(参考).

下面就介绍半同步的复制过程如何实现(基于上面的基础上):

(1)加载插件

如果使用的是5.5版的mysql,那么在/usr/local/mysql/lib/plugin/ 保存了相关的插件,而我们需要安装的是semisync_master.so semisync_slave.so

  1. cd /usr/local/mysql/lib/plugin/
  2. ls -a semisync_*
  3. semisync_master.so semisync_slave.so
  4. #执行如下命令加载插件
  5. #在主服务器上
  6. mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ''semisync_master.so'';
  7. #在从服务器上
  8. mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME
    Empire CMS,phome.net

    Rpl_semi_sync_master_status 则表示当前Semi-sync是否正常工作.

    从Rpl_semi_sync_master_no_times变量,可以知道一段时间内,Semi-sync是否有超时失败过,该计数器则记录了这样的失败次数.

    =========================================分 割 线======================================================

    使用SSL加密复制过程(很简单):

    见官方文档:http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-ssl.html

    补充:

    设置从服务器为只读,避免用户在从服务器上修改数据:

    SHOW VARIABLES LIKE ‘%read%’

    SET GLOBAL read_only=on;

    --------------------------------------------------

    复制过程中过滤的实现:过滤可以在主服务器上也可以在从服务器上实现.

    binlog-do-db 白名单 指定打算复制哪个数据库

    binlog-ignore-db 黑名单 打算忽略哪个数据库

    注意:两个选项不要同时使用,如果同时使用,只有白名单生效

    一般不建议在主服务器上过滤,可能会造成二进制文件不完整,造成不能进行时间点恢复

    用法:过滤过个db

    replicate-do-db=mydb1

    replicate-do-db=mydb2

    replicate-do-table=table

    # 可以使用符号匹配

    replicate-wild-do-table=db_parttern.tbl_pattern

    当定义了如下后,考虑,主服务器上的mysql数据库修改的语句是否会复制?

    replicate-ignore-db=mysql

    依然会复制,只是不保存,占用相关带宽.

    本文出自 “Dean的Linux” 博客,请务必保留此出处http://deanlinux.blog.51cto.com/2671049/662904

    Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号