文档章节

MySQL AB

lee_ypp
 lee_ypp
发布于 2014/07/09 20:40
字数 1826
阅读 882
收藏 63
点赞 2
评论 3

MySQL 支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

单向复制有利于健壮性、速度和系统管理:

1. 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份

2. 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT 查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。

3. 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。

MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾、备份、恢复、负载均衡等都是有极大帮助的。

实验环境:
RHEL 6.5 iptables and linux stop
master    192.168.0.11

slave1    192.168.0.12

slave2    192.168.0.13

mysql 的 AB 复制

注: mysql 数据库的版本,两个数据库版本要相同,或者 slave 比 master 版本高!

在 master slave 上安装 mysql 软件,mysql 软件可以在 http://www.mysql.com上下载,源码或是 rpm 包都可以,由于 RHEL6 自带mysql 软件包,直接 yum 安装。

# yum install mysql mysql-server -y

master server 配置

1)配置 /etc/my.cnf 配置文件

在[mysqld]下添加一下参数

log-bin=mysql-bin #启动二进制日志系统

binlog-do-db=westos #二进制需要同步的数据库名,如果需要同步多个库,例如要再同步 test库,再添加一行“binlog-do-db=test”,以此类推

server-id=1    #必须为 1 到 232–1 之间的一个正整数值

binlog-ignore-db=mysql #禁止同步 mysql 数据库

2 ) 启动 master

# service mysqld start

3)创建同步帐户,并给予权限

mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO westos@'192.168.0.12' IDENTIFIED BY 'westos';

mysql> Flush privileges;

Query OK, 0 rows affected (0.00 sec)

调试:

在 master 上用下面的命令查看

mysql> show master status;
+---------------------+-----------+----------------+--------------------+
| File    | Position     | Binlog_Do_DB     | Binlog_Ignore_DB |
+---------------------+-----------+----------------+--------------------+
| mysql-bin.000001| 106    | westos    | mysql    |
+---------------------+-----------+----------------+--------------------+
记录 File 和 Position 的值,下面会用到。    

slave1server 配置

1 )配置 /etc/ my.cnf 文件

在[mysqld]下添加一下参数

server-id=2

#从服务器 ID 号,不要和主 ID 相同,如果设置多个从服务器,每个从服务器必须有一个唯一的 server-id 值,必须与主服务器的以及其它从服务器的不相同。可以认为 server-id 值类似于 IP 地址:这些 ID 值能唯一识别复制服务器群集中的每个服务器实例。

2 ) 启动 slave

# service mysqld start

查看是否授权成功

#mysql -uwestos -pwestos -h 192.168.0.11                     ##提示正确则可以进行一下操作。

3) 在 slave1 上执行一下命令

mysql> change master to master_host='192.168.0.11', master_user='westos',master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=106;

Query OK, 0 rows affected (0.28 sec)

mysql> slave start;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
.....
Slave_IO_Running: Yes

Slave_SQL_Running: Yes
.....
如果都是 yes,表示从库的 I/O,Slave_SQL 线程都正确开启.表明数据库正在同步你也可以通过在 master server 上的 test 库中添加数据,看 slave server 是否同步,更多详细信息以及参数设置,请参考 MySQL Manual 手册.

注意:在同步之前确保 master 与 slave 上的数据一致性。

测试:在master上

mysql> create database westos;

Query OK, 1 row affected (0.00 sec)

mysql> use westos;

Database changed

mysql> create table linux ( username varchar(20) not null, password varchar(50) not null  );
Query OK, 0 rows affected (0.18 sec)

mysql> desc linux;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | NO   |     | NULL    |       |
| password | varchar(50) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into linux values ('user1','123');
Query OK, 1 row affected (0.00 sec)
mysql> insert into linux values ('user2','password(123)');
Query OK, 1 row affected (0.00 sec)
mysql> show tables;
+------------------+
| Tables_in_westos |
+------------------+
| linux            |
+------------------+
1 row in set (0.00 sec)
mysql> select * from linux;
+----------+---------------+
| username | password      |
+----------+---------------+
| user1    | 123           |
| user2    | password(123) |
+----------+---------------+

这是在slave1主机上查看是否同步。

mysql> select * from linux;
+----------+---------------+
| username | password      |
+----------+---------------+
| user1    | 123           |
| user2    | password(123) |
+----------+---------------+

相关文件作用:
1. mysql-bin.index:服务器一旦开启二进制日志,会产生一个与二日志文件同名,但是以.index 结尾的文件。它用于跟踪磁盘上存在哪些二进制日志文件。MySQL 用它来定位二进制日志文件。

2. mysqld-relay-bin.index:该文件的功能与 mysql-bin.index 类似,但是它是针对中继日志,而不是二进制日志。

3. master.info:保存 master 的相关信息。不要删除它,否则,slave 重启后不能连接 master。

4. relay-log.info:包含 slave 中当前二进制日志和中继日志的信息。

如果写操作较少,而读操作很多时,可以采取这种结构。你可以将读操作分布到其它的 slave,从而减小master 的压力。但是,当 slave 增加到一定数量时,slave 对 master 的负载以及网络带宽都会成为一个严重的问题。这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。

当设置 log_slave_updates 时,你可以让 slave 扮演其它 slave 的 master。此时,slave 把 SQL 线程执行的事件写进行自己的二进制日志(binary log),然后,其它的 slave 可以获取这些事件并执行它,从而有效缓解master 的压力。如下:

流水线结构

添加一个 slave2:

1. 由于 master 上已经有数据,而新加的 slave2 没有,必须在配置复制前同步数据。

在 master 上执行一下命令

mysqldump westos > bak

scp bak 192.168.0.13:

2. 在 slave1 上加入以下设置:
# vi /etc/my.cnf

....

server-id=2

log-bin=mysql-bin

binlog-ignore-db=mysql

binlog-do-db=westos

log-slave-updates

....

# /etc/init.d/mysqld restart

新建westos数据库,并将备份的数据导入到westos数据库中

#mysqladmin create westos

#mysql westos  < bak

3. 在 slave1 上创建同步帐户,并给予权限
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO westos@'192.168.0.13'IDENTIFIED BY 'westos';
mysql>Flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |217 | westos| mysql|
+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

4. 在 slave2 上添加配置:

# vi /etc/my.cnf

server-id=3

# /etc/init.d/mysqld start

5. 在 slave2 上执行一下命令

查看是否授权成功

#mysql -uwestos -pwestos -h 192.168.0.12                     ##提示正确则可以进行一下操作。
mysql> change master to master_host='192.168.0.12', master_user='westos',master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=217;

mysql> slave start;

mysql> show slave status\G;

.....

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

.....


测试方法与第一种相似,此处不再累赘。

            __leeypp@gmail.com



















© 著作权归作者所有

共有 人打赏支持
lee_ypp
粉丝 64
博文 45
码字总数 58692
作品 0
程序员
加载中

评论(3)

老年基德
老年基德
在什么情况下使用mysqlAB复制这种方案,什么情况下使用mysql集群这种这种解决方案,两种方案各有什么优缺点?
lee_ypp
lee_ypp

引用来自“都市网达”的评论

问一个问题,如果主服务器挂了之后,怎么恢复同步数据。

可以做一个ha集群,做负载均衡的话应该没问题.还有mysql cluster集群也可以实现。 !@都市网达
都市网达
都市网达
问一个问题,如果主服务器挂了之后,怎么恢复同步数据。
MySQL与MariaDB概述 (二)

第一部分 学习MySQL和MariaDB的前途 MySQL 和 MariaDB 都兼容 SQL,它是一种有大约 30 年历史的编程语言.学习 MySQL 或 MariaDB,对你的数据库开发和管理生涯有百利而无一害。 第二部分 Mari...

博为峰教研组
2016/12/16
95
0
MySQL与MariaDB概述 (一)

MySQL 是当今最流行的开源数据库,高效且稳定,备受公众网站的青睐。 1995 年,MySQL 由 Michael“Monty”Widenius 和 David Axmark 创造,并使用 GNU 通用 公共授权。2008 年 1 月, 它被 ...

博为峰教研组
2016/12/16
157
0
探索MySQL高可用架构之MHA(4)

探索MySQL高可用架构之MHA(4) -----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构中的Mysql源码安装。本篇文章主要介绍本次架构中的ABBB复制。 首先我们先介绍什么是MySql AB复制???...

顺境其生
2015/07/22
0
0
设定mysql的默认字符集

mysql> show global variables like '%charac%'; --查看当前mysql采用的字符集 mysql>show global variables like '%server%'; --查看当前服务端全局字符集 +----------------------+------......

笔下生辉
2017/03/31
0
0
Apache基础教程

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的A...

harries
2016/03/23
29
0
MySQL中使用load data命令实现数据导入的方法

MySQL支持load data命令的数据导入,该方式比直接的insert的效率要高,按照官方的说法是要比insert语句快上20倍 使用方式如下: 代码如下: mysql>load data local infile "D:/ab.txt" into t...

jrytsqd
2013/10/23
245
4
甲骨文战略主导下 MySQL 数据库将走向何方

【导读】 2012年2月23日,甲骨文公司联合上海爱可生信息技术有限公司,于上海举办的MySQL创新技术大会上宣布 MySQL 5.6企业版本的开发蓝图,并且MySQL官方网站提前一天公布停止更新MySQL 5.1...

虫虫
2012/03/05
3.3K
15
使用百度云加速防apache的ab测试ddos攻击

Apache带的有一个ab压力测试的; 具体的概念性的东西;咱不扯;有兴趣的自行搜索; 这里只简单介绍使用方法; windows示例:e:wamp64binapacheapache2.4.17binab.exe -n1000 -c100 http://ba...

白俊遥
2016/05/22
539
0
青云QingCloud RDS 服务率先支持 MySQL 5.7

作为一家优秀的基础云服务提供商,青云QingCloud 一直致力于为用户提供更好的服务,今天QingCloud RDS 服务率先支持 MySQL 5.7 版本(据小编了解应该是国内首家吧,如有误,请轻拍),本次升...

cathyli
2016/03/24
8
0
MySQL的小指南

《高性能MySQL》一书给我们做了许多指导,其中有5章应该精读的: Schema与数据类型优化 创建高性能的索引 查询性能优化 MySQL高级特性 复制 我对这几章都读过不下三遍了,有一些理解,当然更...

JoshuaShaw
2016/05/04
59
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python3.6用的外库遇到的问题

要用到wmi库 pip install wmi 装后不能用还要安装pywin32库。 要用到crypto加密模块安装pip instal pycrypto装后不能用。要安装pycryptodome。...

oisan_
12分钟前
0
0
select, poll, epoll I/O复用介绍

什么是I/O复用? 内核监视多个文件描述符(I/O文件句柄),一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知应用程序进行相应的读写操作。 I/O多路复用又被称为“事件驱动”(比如读写事...

xiaoxlm
12分钟前
0
0
【Spring 系列 给IOC容器添加组件的几种方式总结】

给Spring 注册Bean的几种方式总结。其中使用@Import注解是Spring Boot 完成自动配置的一个核心注解。 1、Spring 中给IOC容器添加组件的几种方式 在Spring的配置文件中,配置Bean(基于XML方式...

HansonReal
13分钟前
3
0
bootstrapTable语言包设置

###方法一引入不同的语言包 <script src="bootstrap-table-zh-CN.js"></script> ###方法二引入全语言包 <script src="bootstrap-table-locale-all.min.js"></script>//然后在初始化前设计默......

momo1987
14分钟前
0
0
Saltstack 常用命令

1、拷贝文件到客户端 # salt 'slaver.test.com' cp.get_file salt://apache.sls /tmp/cp.txt 2、拷贝目录到客户端 # salt 'slaver.test.com' cp.get_dir salt://test /tmp 3、显示存活的客户......

硅谷课堂
15分钟前
0
0
致初学者-如何学好Python这门编程语言?[图]

致初学者-如何学好Python这门编程语言?[图]: 对于很多Python3初学者,往往会面临以下问题:Python2和Python3我该学习哪一个?是否要安装Linux系统学习Python?Python3有各种版本我该安装哪...

原创小博客
18分钟前
1
0
E31---setopt=protected_multilib=false

今天在云服务器上装nginx,需要先安装一些依赖库比如zlib, ,但是安装zlib时候报错。 yum install -y zlib zlib-devel 1 (-y 指的是如果需要选yes no的自动y)下面是报错 Protected multil...

侠客行之石头
22分钟前
0
0
HTTP常见面试题

Http与Https的区别: HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 标准端口是80 ,而 HTTPS 的标准端口是443 在OSI 网络模型中,H...

JK_OPERA
23分钟前
0
0
python爬取站长素材网页图片保存到ppt中

网站地址:http://sc.chinaz.com/tupian/index.html 直接上代码: import requestsfrom bs4 import BeautifulSoupfrom pptx import Presentationfrom pptx.util import Inchesimpor......

你为什么不吃药
25分钟前
1
0
Ubuntu 18.04 swap空间的修改

一、准备工作 执行“sudo swapon -s”命令,查看是否已经存在swap file 二、修改swap file # 如果第一步存在swapfile则需要先禁用sudo swapoff /swapfile# 修改swap 空间的大小为2Gs...

Iceberg_XTY
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部