zoukankan      html  css  js  c++  java
  • Windows下搭建MySQL Master Slave

    一、背景

    服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用keepalived这个HA工具,但是我们可以接受人工进行切换,有什么好的方案呢?

    二、几种Master/Slave逻辑架构图

    (Figure1:单Master-单Slave)

    (Figure2:单Master-多Slave)

    (Figure4:Master/Slave部署逻辑图)

    三、搭建过程

    环境:Windows Server 2008 R2 + mysql-5.5.22-winx64

    主服务器(Master):192.168.1.66

    从服务器(Slave):192.168.1.67

    使用Master/Slave架构,Slave为只读模式;

    (一) 配置主服务器(Master)

    1. 编辑数据库配置文件my.ini,在[mysqld]标签下面加入下面代码:

    log-bin=mysql-bin

    server-id=1

    innodb_flush_log_at_trx_commit=1

    sync_binlog=1

    binlog_do_db=barfoo_weibo_hottop

    binlog_ignore_db=mysql

    说明:

    1) log-bin=mysql-bin启用Binary Log,会在数据文件夹中生成一系列的滚动文件,类似:mysql-bin.000002

    2) server-id=1中的1可以任定义,只要是唯一的就行,为了与其它Master和Slave进行区别;

    3) innodb_flush_log_at_trx_commit = 0,每秒写一次trax log,并执行fsync;

    innodb_flush_log_at_trx_commit = 1,每次trax 提交的时候写一次trax log, 并执行fsync;

    innodb_flush_log_at_trx_commit = 2,每次trax 提交的时候写一次trax log, 不会执行fsync;

    4) sync_binlog=1表示异步进行日志记录;

    5) binlog_do_db=barfoo_weibo_hottop是表示只对数据barfoo_weibo_hottop做日志记录,如果想记录多个数据库,添加多几条binlog_do_db就可以了;

    6) binlog_ignore_db=mysql表示忽略备份mysql;不加binlog_do_db和binlog_ignore_db,那就表示备份全部数据库。

    2. 重启MySQL服务

    3. 在Master服务器新建一个用户赋予“REPLICATION SLAVE”的权限,你不需要再赋予其它的权限,这里指定的IP为Slave的IP;

    mysql>CREATE USER viajar@'192.168.1.67' IDENTIFIED BY 'BarFoo2013';

    mysql>GRANT REPLICATION SLAVE ON *.* TO viajar@'192.168.1.67' IDENTIFIED BY 'abc2013';

    4. 在Master服务器执行下面的脚本,让数据库只能读;

    mysql>FLUSH TABLES WITH READ LOCK;

    5. 拷贝数据库文件夹和ibdata1文件到本地临时文件夹中,马上执行下面的步骤;

    6. 查看Master服务器的状态,记下File及Position的值,后面设置Slave服务器的时候需要用到;

    mysql>SHOW MASTER logs;

    mysql>SHOW MASTER STATUS;

    (Figure1:Master状态)

    7. 对表进行解锁,恢复数据库读写;

    mysql>UNLOCK TABLES;

    8. 使用FTP等工具把第5步骤的临时文件传到Slave服务器;

    (二) 配置从服务器(Slave)

    1. 编辑数据库配置文件my.ini,在[mysqld]的下面加入下面代码,可以自己定义数值,只要保证唯一的就行,与Master的能区分开就行;

    server-id=2

    read-only=1

    2. 重启MySQL

    3. 登录MySQL服务器,执行下面的脚本命令:

    mysql>CHANGE MASTER TO

    MASTER_HOST='192.168.1.66',

    MASTER_USER='viajar',

    MASTER_PASSWORD='abc2013',

    MASTER_PORT=3309,

    MASTER_LOG_FILE='mysql-bin.000005',

    MASTER_LOG_POS=7179684,

    MASTER_CONNECT_RETRY=30;

    说明:

    1) MASTER_HOST:Master服务器的IP;

    2) MASTER_USER:配置主服务器时建立的用户名;

    3) ASTER_PASSWORD:用户名对应的密码;

    4) ASTER_PORT:主服务器mysql端口,如果未曾修改,默认即可;

    5) MASTER_LOG_FILE:log文件名,参考Figure1;

    6) MASTER_LOG_POS:只上次备份时的log文件的偏移量,参考Figure1;

    7) MASTER_CONNECT_RETRY:重新连接Master的时间间隔,单位为秒;

    4. 启动Slave进程,执行下面的脚本命令;

    mysql>START SLAVE;

    5. 检查主从同步状态,执行下面的脚本命令,其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常。

    mysql>SHOW SLAVE STATUS;

    (Figure2:Slave状态1)

    (Figure3:Slave状态2)

    6. 查看Slave服务器的MySQL日志;

     

    (Figure4:Slave日志文件)

    四、补充说明

    1. 查看帮助

    mysql>help

    2. 查看slave帮助

    mysql>help slave

    3. 查找当前有哪些二进制日志文件

    mysql> show binary logs;

    4. 删除mysql-bin.000018之前的所有二进制日志文件

    mysql> purge binary logs to 'mysql-bin.000018';

    5. 从 MySQL 5.1.12 开始,能够用以下三种形式来告终:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混杂形式复制(mixed-based replication, MBR)。相应地,binlog的款式也有三种:STATEMENT,ROW,MIXED。MBR 形式中,SBR 形式是默认的。

    #binlog_format="STATEMENT"

    #binlog_format="ROW"

    #binlog_format="MIXED"

    当然了,也能够在运行时动态修正binlog的款式。例如

    mysql> SET SESSION binlog_format = 'STATEMENT';

    mysql> SET SESSION binlog_format = 'ROW';

    mysql> SET SESSION binlog_format = 'MIXED';

    mysql> SET GLOBAL binlog_format = 'STATEMENT';

    mysql> SET GLOBAL binlog_format = 'ROW';

    mysql> SET GLOBAL binlog_format = 'MIXED';

    6. MySQL同步故障:Slave_SQL_Running:No

    mysql> slave stop;

    mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

    mysql> slave start;

    五、疑问

    (一) 复制级别有以下几种,默认级别是那种?如何显式设置这个值?

    1. Row Level:5.1.5开始支持。mater记录每行数据的更改日志,slave根据日志逐行应用。优点:数据一致性更有保障。缺点:可能造成日志文件比较大;

    2. Statement Level:master记录每个执行的query语句以及一些上下文信息,slave节点根据这些信息重新在slave上执行。优点:binary log比较小。缺点:某些情况下数据一致性难以保障;

    3. Mixed Level:MySQL根据情况选择哪种复制方式。5.1.8开始支持。

    (二) 常用架构有以下几种,我想要的效果是:当MasterA宕机之后,MasterB还能读写,在MasterA在恢复之后重新让MasterA成为主Master。

    1. Master-Slaves:通常都采用这种方式;

    2. Dual Master(Master-Master):2个master节点互相同步更新。因为MySQL的异步复制方式,为了防止数据冲突造成的不一致性,一般仅将其中一台用于写操作,另一台不用或仅用于读操作。目的是其中一台master停机维护或者故障中断时可以使用另一台master;

    3. 级联复制(Master-Slaves-Slaves):在Master Slaves中,如果slaves过多replication将增加master的负载,这时可以让master只向其中几台slave分发更新日志,这几台slave作为一级节点再向下级节点分发更新日志。

    (三) 如果slave报错或者宕机一段时间,那么应该如何重新同步宕机时间master的数据到slave呢?

    (四) 在Master设置binlog_do_db=test的时候,如何可以设置记录多个数据库?

    解答:直接在配置文件my.ini加入多条binlog_do_db就可以了;

    (五) 每天的日志文件就有10GB,如何清理?如何维护?有没什么设置或者方法可以减少日志量呢?

    作者:听风吹雨

    出处:http://gaizai.cnblogs.com/

  • 相关阅读:
    hdu 1269 迷宫城堡 (并查集)
    hdu 1272 小希的迷宫 (深搜)
    hdu 1026 Ignatius and the Princess I (深搜)
    hdu 1099 Lottery
    hdu 1068 Girls and Boys (二分匹配)
    几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
    hdu 1072 Nightmare (广搜)
    hdu 1398 Square Coins (母函数)
    hdu 1253 胜利大逃亡 (深搜)
    hdu 1115 Lifting the Stone (求重心)
  • 原文地址:https://www.cnblogs.com/king-/p/4861556.html
Copyright © 2011-2022 走看看