Windows下搭建MySQL Master Slave[转]
Windows下搭建MySQL Master Slave
一、背景
服务器上放了很多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,如何清理?如何维护?有没什么设置或者方法可以减少日志量呢?
六、参考文献
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[转]的更多相关文章
- Windows下搭建MySQL Master Slave
一.背景 服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用keepalived这个HA工具,但是我们可以接受人工进行切 ...
- Windows下搭建MySql Master-Master Replication
1.首先下载最新版的MySql Server (http://dev.mysql.com/downloads/windows/installer/) 2.安装MySql Server到两台机器上 My ...
- Windows下搭建Mysql集群
Mysql集群的基本架构如下: 基本原理参考:[转]MySQL Cluster (集群)基本原理 这里采用最小配置,用两台机器来分别部署一个management 节点,2个data node, 2个s ...
- linux下搭建mysql主从
在master上创建repl账户,用于复制. grant replication slave on *.* to 'repl'@'%' identified by 'P@$$W0rd'; flush ...
- Windows下搭建PHP环境:Apache+PHP+MySQL
本文简单记录一下Windows下搭建PHP环境的过程,一些细节可以参照本文参考资料,此文不再赘述 准备工作: Windows下手工搭建PHP环境需要先下载相应的软件,需要注意的是Apache与PHP的 ...
- windows下搭建apache+php+mysql
在windows下,apache和mysql都有自动化安装的程序,本篇则侧重从apache和php版本选择,php线程安全,apache和mysql安装启动服务,工作环境配置这几个方面来阐述windo ...
- windows下搭建Apache+Mysql+PHP开发环境
原文:windows下搭建Apache+Mysql+PHP开发环境 要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Apache2.2;MySQL Server 5. ...
- react-native —— 在Windows下搭建React Native Android开发环境
在Windows下搭建React Native Android开发环境 前段时间在开发者头条收藏了 @天地之灵_邓鋆 分享的<在Windows下搭建React Native Android开发环 ...
- Windows下搭建论坛
Windows下搭建论坛 真正的O基础架构,一步一步走向成功 转载请注明原作者出处 环境准备篇 安装集成包软件 解压后如下 以管理员身份运行setup的批处理 选择推荐的apache版本 选择推荐的m ...
随机推荐
- 解决ASP.NET中ReportView与IE11的兼容性问题
前久发现以前用ReportView开发的一个软件的报表,在IE11上运行时出错,陆续查了好几天才解决了问题. 开发环境: VS2010,ReportView 10.0.402,RDLC报表模板 问题: ...
- 一些iOS笔试题目
1.什么是arc?(arc是为了解决什么问题诞生的?) 首先解释ARC: automatic reference counting自动引用计数. ARC几个要点: 在对象被创建时 retain cou ...
- /root/.bashrc与/etc/profile的异同
要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是loginshell 和non-loginshell. 交互式模式就是shell等待你的输入,并 ...
- 二、C# 数据类型
C#语言的基本类型包括8种整数类型.2种用于科学计算的二进制浮点类型.1种用于金融计算的十 进制浮点类型.1种布尔类型以及1种字符类型. 2.1 基本数值类型 C#中的基本数据类型都有关键字和它们关联 ...
- javascript基础学习(十四)
javascript之表单对象 学习要点: 表单对象 文本框 按钮 单选框和复选框 一.表单对象 在HTML文档中可能会出现多个表单,也就是说,一个HTML文档中可能出现多个<form>标 ...
- POJ 1240 Pre-Post-erous! 解题报告
题意: 给出一个m叉树的前,后序遍历求这样的树有多少种. Solution: 我们知道前序遍历的第一个点一定是根节点,后序遍历的最后一个点一定是根节点. 由此,我们只一要确定对于每一个节点,它有多少个 ...
- 疯狂学习java web2(css)
CSS应该是样式描述的意思,定义如下: 什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 ...
- [ JS 进阶 ] 如何改进代码性能 (3)
原文链接 总结一下 1.减少操作dom的次数 2.需要多次使用某全局变量的时候,将其赋给一个局部变量,避免重复查找 3.优化循环 4.多用逗号和直接赋值的方式来var,减少工厂方式和构造函数方式创建对 ...
- php中json_decode()和json_encode()
1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行 ...
- ASP.NET 无权访问所请求的资源。请考虑对 ASP.NET 请求标识授予访问此资源的权限。
如题,在编译程序时,没有问题,但是通过iis设置的网站进入时,报如上错误.asp.net有个运行账户,一般情况下iis5为aspnet,iis6为network service,在iis里面确认一下是 ...