目录

一主一从

1.1 环境准备:

1.2 准备步骤:

1.3 实现步骤:

1.3.1 配置master主服务器

1.3.2 创建复制帐号

1.3.3 查看主服务器状态

1.3.4 配置slave从服务器

1.3.5 启动从服务器复制线程

1.3.6 查看从服务器状态

1.3.7 测试

1.4 扩展——实现一主多从

1.4.1 需求分析

1.4.2 具体实现过程

1.5 扩展——实现半同步复制

1.5.1 三种复制方式

1.5.2 实现半同步复制

互为主从(双主)

2.1 环境准备:

2.2 准备步骤:

2.3 实现步骤:

2.3.1 配置第一台 master 主服务器

2.3.2 配置第二台 master 主服务器

2.3.3 创建复制账号

2.3.4 查看服务器状态

2.3.5 启动复制线程

2.3.5 测试

高可用架构MHA的实现

正文

一主一从

1.1 环境准备:

CentOS系统服务器2台、 一台用户做MySQL主服务器, 一台用于做MySQL从服务器, 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信。

1.2 准备步骤:

1)iptables -F && setenforce 清空防火墙策略,关闭selinux

2)拿两台服务器都使用yum方式安装Mysql服务, 要求版本一致

3)分别启动两台服务器mysql服务, 确保服务正常

架构图:

1.3 实现步骤:

1.3.1 配置master主服务器

对master进行配置,包括打开二进制日志,指定唯一的servr ID。例如,在配置文件加入如下值

server-id=1      //配置server-id,让主服务器有唯一ID号

log-bin=mysql-bin  //打开Mysql日志,日志格式为二进制

skip-name-resolve  //关闭名称解析,(非必须)

1.3.2 创建复制帐号

在 Master 的数据库中建立一个备份帐户:每个 slave 使用标准的 MySQL 用户名和密码连接 master 。进行复制操作的用户会授予 REPLICATION SLAVE 权限。

MariaDB [(none)]> grant replication slave,replication client on *.* to slave@'192.168.%.%' identified by 'keer';

1.3.3 查看主服务器状态

在 Master 的数据库执行 show master status,查看主服务器二进制日志状态及位置号。

1.3.4 配置slave从服务器

对 slave 进行配置,打开中继日志,指定唯一的 servr ID,设置只读权限。在配置文件加入如下值:

server-id=2 //配置server-id,让从服务器有唯一ID号

relay_log = mysql-relay-bin //打开Mysql日志,日志格式为二进制

read_only = 1 //设置只读权限

log_bin = mysql-bin //开启从服务器二进制日志

log_slave_updates = 1 //使得更新的数据写进二进制日志中

1.3.5 启动从服务器复制线程

让 slave 连接 master ,并开始重做 master 二进制日志中的事件。

MariaDB [(none)]> change master to master_host='192.168.37.111',

>master_user='slave',

>master_password='keer',

>master_log_file='mysql-bin.000001',

>master_log_pos=413;

执行start slave;,来启动复制线程。

1.3.6 查看从服务器状态

可使用SHOW SLAVE STATUS\G;查看从服务器状态,如下所示,也可用show processlist \G;查看当前复制状态:

Slave_IO_Running: Yes //IO线程正常运行

Slave_SQL_Running: Yes //SQL线程正常运行

1.3.7 测试

1)测试主从同步

我们在 master 服务器上创建一个数据库,再使用该数据库创建一个表,添加一条记录,来看一看 slave 服务器有没有同步成功。

首先,我们先来查看一下两个服务器上有什么数据库:

master:

slave:

现在,我们在主服务器上创建一个数据库“keer”:

然后,我们来看看从服务器是否已经更新:

我们可以看出,数据库已经同步,接下来,我们就来创建表,并在表中插入一条记录:

然后,我们来看看从服务器是否更新:

2)测试只读属性

我们在从服务器上设置了只读,所以我们来试试看能不能插入数据:

这就很尴尬了,为什么我们设置只读还是可以插入数据呢?这要如何解决呢?

因为我们登录的时候使用的是root超级用户,这个大变态是不受只读设置影响的,所以,我们还是可以往里面去插入数据,当然,如果我们换成其他的普通用户就不会出现这样的问题了。

解决方式也很简单,我们只需要把表锁起来就可以了:

MariaDB [keer]> flush tables with read lock;

进行锁表操作以后,我们再来插入一条数据:

这样的话,即使我们是超级用户登录进来的,也不能再插入数据了。这样会安全很多。但是,有利就有弊,这样的话,我们的主从就不能实时同步了,因为我们的主从同步是通过把主上的 sql 语句放在从上再执行一遍来实现的,可是我们锁表的话,sql 语句就不能执行了。想要同步方法也很简单,直接把表解锁就可以了。

我们在主上插入一条数据:

此时,我们的从上就要解表以后才能实现同步:

1.4 扩展——实现一主多从

1.4.1 需求分析

当我们的服务器运行一段时间后,流量变得越来越多,这时,一主一从能够实现的高可用性和负载均衡不能满足我们的需求,我们就要选择再添加一台从服务器。

可是现在我们的 master 已经运行很久了,我们也需要对新安装的 slave 进行数据同步,甚至它没有 master 的数据。

此时,有几种方法可以使 slave 从另一个服务开始,例如,从 master 拷贝数据,从另一个 slave 克隆,从最近的备份开始一个 slave 。为了加快 slave 与 master 同步,可用以下方式先进行数据同步:

(1)master的某个时刻的数据快照;

(2)数据库的备份数据;

(3)master的二进制日志文件。

架构图:

接下来,我们就来实现一下这个过程:

1.4.2 具体实现过程

1)对 master 进行完全备份

[root@master ~]# mkdir /backup

[root@master ~]# mysqldump --all-database > /backup/mysql-backup-`date +%F-%T`-all.sql

照例查看一下主的二进制日志状态及位置号。

2)把完全备份的数据发到新增的从上

[root@master ~]# scp /backup/mysql-backup-2017-11-21-10\:28\:29-all.sql @192.168.37.133:~

root@192.168.37.133's password:

mysql-backup-2017-11-21-10:28:29-all.sql 100% 504KB 503.9KB/s 00:00

3)把这个完全备份导入从的数据库:

4)查看从是否恢复成功:

我们来查看一下从的二进制日志状态及位置号:

我们的数据已经恢复成功

5)设置主从

接下来就是按照上述步���,对该从服务器进行设置就好:

[root@slave2 ~]# vim /etc/my.cnf

[mysqld]

server-id = 3

relay-log = mysql-relay-bin

read-only = 1

log-bin = mysql-bin

log-slave-updates = 1

然后,我们就来设置从服务器:

[root@slave2 ~]# mysql -uroot -p

Enter password:

MariaDB [(none)]> change master to master_host='192.168.37.111',

>master_user='slave',

>master_password='keer',

>master_log_file='mysql-bin.000001',

>master_log_pos=330;

MariaDB [(none)]> start slave;

然后我们来查看一下从服务器的状态:

6)测试

设置完毕,我们来测试一下,当主上有操作时,从上是否更新:

至此,我们就完成了一主两从。如果有需要,我们还可以继续添加从服务器。

1.5 扩展——实现半同步复制

1.5.1 三种复制方式

1)同步复制

指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。需要有超时时间。

2)异步复制

MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。

3)半同步复制

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

1.5.2 实现半同步复制

半同步复制是基于特定的模块来实现。不过非常 nice 的一点就是,在我们的 mariadb5.5 以上的版本默认是带有这个模块的。

如果我们的 centos7 上安装了 mariadb ,我们就可以进入目录去查看一下:

[root@master ~]# cd /usr/lib64/mysql/plugin/

找到我们的模块后,我们就可以通过命令来安装,然后进行简单配置即可使用了。下面就是具体方法:

master 服务器上:

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=ON;

slave 服务器上:

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled = ON ;

MariaDB [(none)]> stop slave;

MariaDB [(none)]> start slave;

现在,我们的半同步复制就开启了,我们可以来查看一下日志:

[root@slave ~]# tail -200 /var/log/mariadb/mariadb.log

从日志里也可以看出我们的半同步复制已经开启。

以上,实验一完成。

mysql主从技术_MySQL主从架构的实现相关推荐

  1. mysql 主从 通俗易懂_MySQL 主从同步架构中你不知道的“坑”(完结篇)

    MySQL 主从同步架构中你不知道的"坑"(完结篇) 收录于话题 #MySQL从入门到放弃 26个 点击上方蓝字,关注我们哟! 前言导读 之前写出一篇文章也是关于这个主从同步架构的 ...

  2. redis mysql主从延迟_MySQL主从延迟问题解决

    今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题. 坐好了,准备发车! 主从常见架构 随着日益增长的访问量,单台数据库的应接能力已经捉襟见肘.因此采用主库写数据,从库读数据这种将读写 ...

  3. mysql修复主从不一致_MySQL主从不一致修复

    场景: 线上正在服务的库由于紧急主从切换导致主从不一致,报错信息如下: Last_Error: Coordinator stopped because there were error(s) in t ...

  4. mysql架构 三级主从同步_MySQL 主从同步架构中你不知道的“坑”

    以下操作征对指定不同步库 binlog-format=ROW模式 1 查看主从的binlog模式 mysql> show slave status\G ********************* ...

  5. mysql 主从故障处理_mysql主从同步出错故障处理总结[数据库技术]

    Error_code:1032;handlererrorHA _ERR_KEY_NOT_FOUND; end_log_po25theevent\'masterlogmysql-bin.000006.4 ...

  6. MySQL主从压_mysql主从配置

    在同一台服务器中建立mysql主从 mysql-5.1.72-linux-i686-glibc23.tar.gz 二:搭建步骤 1.下载:cd /usr/local/src ;wget http:// ...

  7. mysql 写入慢_MySQL主从,你遇到过哪些问题?

    上篇文章介绍了单机环境下的MySQL主从异步复制和主从半同步复制的搭建过程.搭建过程很简单,但是在实际使用过程中,更多的是解决问题,本篇文章将介绍一下MySQL主从复制中常见的问题以及如何定位问题和如 ...

  8. mysql主从 毫秒_MySQL主从数据库同步延迟问题解决(转)

    最近在做MySQL主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些讲解,记录下来以便自己学习: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务 ...

  9. mysql断网_MYSQL主从断网恢复复制的问题(1)

    配置好的主从,A为M端,B为S端 正常情况下,A端插入数据,B端能正常查询到,不多说. 把网线拔掉,在A端插入数据 mysql> insert into t1 values(4,5); Quer ...

最新文章

  1. 记一次订单号重复的事故,快看看你的 uuid 在并发下还正确吗?
  2. 量子计算远没到可收割的时候
  3. Lind.DDD.DynamicModules动态模块化的设计
  4. 【安全技术】关于几种dll注入方式的学习
  5. 【Java设计模式】建造者模式、原型模式
  6. Q_INIT_RESOURE
  7. 带防夹功能的升降器原理_桌面光污染必不可少——骨伽Bunker RGB鼠标线夹
  8. python数据类型及字符编码
  9. perl学习笔记(1)
  10. python 中单线程 与多线程 与多进程的性能分析
  11. SQl 2000和SQL 2005之间的一些语法区别
  12. 质数——埃式筛法和欧式筛法
  13. Unicode字符编码
  14. 20 年前,亚马逊就推出了大数据杀熟算法
  15. Unity3D研究院之静态自动检查代码缺陷与隐患
  16. ABAP Enhancement
  17. 基于Lae的ffmpeg播放器
  18. 单链表的创建、删除、反转、插入、排序操作
  19. Python2.7爬虫——爬取微信公众号文章
  20. 如何编制试算平衡表_在实际工作中,余额试算平衡通过编制试算平衡表进行。()...

热门文章

  1. Elemant-UI日期范围的表单验证
  2. 数据操纵语言 ,DML, 增删改
  3. Vim使用技巧:撤销与恢复撤销
  4. WordPress分类列表函数:wp_list_categories用法及参数详解举例
  5. 【数论】[CF258C]Little elephant and LCM
  6. DataTable RowFilter 过滤数据
  7. ASP.NET MVC 实现二级域名(泛域名)
  8. javascript --- 函数的柯里化 Vue 2.x中柯里化的使用
  9. vue --- 使用字符串'api'跨域请求资源
  10. DOM-9 【实战】模块化开发Todolist(面向过程)