一、背景

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

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

(Figure1:单Master-单Slave)

(Figure2:单Master-多Slave)

(Figure3:单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,如何清理?如何维护?有没什么设置或者方法可以减少日志量呢?

六、参考文献

windows下Mysql master-slave配置

搭建MySql的Master/Slave架构

Linux MySQL主从复制(Replication)配置

13.4.2.1. CHANGE MASTER TO Syntax

innodb_flush_log_at_trx_commit option

innodb_flush_log_at_trx_commit

理解MySQL——复制(Replication)(图形并茂)

Windows下搭建MySQL Master Slave相关推荐

  1. windows下搭建mysql集群_Windows下搭建MySQL集群

    本文将讨论在Windows下搭建MySQL集群的步骤和搭建过程中应当注意的问题. 由于机器数量和性能有限,搭建环境为一台宿主机(IP:10.200.178.191),一台虚拟机(IP:10.200.1 ...

  2. mysql meb安装_用meb搭建MySQL Master/Slave

    使用meb企业备份工具,自动实现记录二进制相关信息 此种备份方法需要安装一个软件 meb ,软件默认安装在 /opt 目录下,安装 使用meb企业备份工具,自动实现记录二进制相关信息 此种备份方法需要 ...

  3. Windows下搭建Mysql集群

    部署方法网上很多,以下是我的实践过程,供大家参考. 1. 硬件:3台虚拟机,全是windows 10 x64 2. 网络架构: 管理节点:192.168.37.128 数据节点 / SQL节点: 19 ...

  4. liunx下搭建mysql主从_linux下搭建mysql主从

    在master上创建repl账户,用于复制. grant replication slave on *.* to [email protected]%' identified by 'P@$$W0rd ...

  5. windows下搭建Apache+Mysql+PHP开发环境

    原文:windows下搭建Apache+Mysql+PHP开发环境 要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Apache2.2; MySQL Server 5 ...

  6. Windows下搭建个人博客(Apache+MySQL+PHP+WordPress)

    Windows下搭建个人博客(Apache+MySQL+PHP+WordPress) CSDN博客的广告实在是烦,就自己在阿里云上搭建了一个博客(http://www.corfox.cn),CSDN博 ...

  7. win下mysql数据库双机配置_[数据库]windows下使用mysql双机热备功能

    [数据库]windows下使用mysql双机热备功能 0 2016-06-16 12:00:05 一. 准备工作 1. 准备两台服务器(电脑),接入局域网中,使互相ping得通对方 2. 两台服务器都 ...

  8. 文件服务器 ldap,windows下搭建ldap服务器

    windows下搭建ldap服务器 内容精选 换一换 当您发现云服务器的运行速度变慢或云服务器突然出现网络断开的情况,则可能是云服务器的带宽和CPU利用率过高导致.如果您已经通过云监控服务创建过告警任 ...

  9. mysql数据库重启命令_MySQL数据库之windows下重启mysql的方法

    本文主要向大家介绍了MySQL数据库之windows下重启mysql的方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 其中第二种方法对我这无效,以后再搞清楚! 一.MYSQ ...

  10. 实验9-10 在Windows下搭建入侵检测平台

    实验九-实验十 在Windows下搭建入侵检测平台 实验目的:掌握在Windows中搭建基于snort的入侵检测系统(IDS),熟悉简单的配置方法,能够使用IDS检测并分析网络中的数据流. Snort ...

最新文章

  1. 【Qt】Qt再学习(十六):QObject::connect: Cannot queue arguments of type ‘QString‘
  2. Py之cupy:cupy的简介、安装、使用方法之详细攻略
  3. iframe 按比例缩放_不按常理出牌!5个Excel灵异事件,能让你崩溃
  4. Android 如何正确统计页面停留时长
  5. 计算机中的补码和反码都是二进制吗,计算机中数值型数据二进制形式存储过程中的原码,反码与补码...
  6. matlab图像采集程序,用摄像头连续采集、保存图像源程序
  7. mysql运算结果放入表中_MySQL表1新增数据,计算开始、结束日期之间所有时间,插入到表2中...
  8. 正能量:为web前端发开者代言
  9. java nio 面试题_10个最高频的Java NIO面试题剖析!
  10. MVC Code First中的惯例(约定)
  11. niva mysql_Nivacat for mysql是一种第三方提供的()_学小易找答案
  12. 如何破解CuteFTP 4.0,CuteFTP,逆向工程技术
  13. GEE-Python遥感大数据分析、管理与可视化技术应用
  14. JavaScript 删除Dom节点
  15. 电脑重装系统需要多少钱?
  16. 农民伯伯android,Android3.1r1API中文文档——ImageView(cnmahj+农民伯伯).doc.doc
  17. Perfect Triples(思维/规律)
  18. html怎么做下雨效果,Canvas制作的下雨动画的示例
  19. this.$utils 是什么意思是
  20. JAVA使用POL导入Excel解决数据精度问题

热门文章

  1. ffmpeg源码分析之命令行参数解析ffmpeg_parse_options
  2. ARM的IP授权模式
  3. 《DADA全球艺术启蒙系列·第一辑(莫奈,沃霍尔,毕加索,梵高,夏加尔)》带回家的美术馆...
  4. solr windows部署应用
  5. Vi/Ex编辑器教程[4]
  6. xml文件根节点有属性读取不到节点
  7. 如何用纯 CSS 绘制一个充满动感的 Vue logo
  8. 单纯形法解下列线性规划问题_使用单纯形法解线性规划问题
  9. 后端面试话术集锦第四篇:ElasticSearch面试话术
  10. java游戏开发学习路线简记