MySQL高性能主从架构的复制原理及配置详解

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

                         MySQL Replication

mysql的复制:
1:复制是什么?
  复制是一种能力,将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将MySQL的某一台主机的数据COPY到其它主机上,
并重新执行一遍来实现的。
@@mysql复制是其自带的,从某种程度上来讲,能够架构高可用的MySQL系统
----------------------------------------------------------------
2:实现的机制或说是原理:
主从架构:
一主多从的架构:
@@其修改的操作只能在主服务器上
主主架构:
@@可以有效避免一个主服务器的压力
环状主架构:
@@几台服务器互相COPY
一主从从架构:
@@一台主服务器,一台从服务器后还可以跟n台从服务器。
--------------------------------------
其架构还支持,将一台主服务器的部分数据复制到一台从服务器上,将另外一部分的数据复制到另一台的从服务器上。
@@此种机制要通过 Filter,过滤来实现。
-------------------------------------------------------- 
3:mysql的复制的类型:
(1):基于语句的复制:(其执行的时间有所差别,用户也有所差别)
     @@在主服务器上执行的SQL语句,在从服务器上同样的执行的一边。
     @@mysql默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。
(2):基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍
     @@ 从mysql5.0开始支持
(3):混合类型的复制
     @@默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

------------------------------------------------------------------------------------------------------------
4:
     mysql默认情况下只能为读提供扩展功能操作,而不能为写操作提供扩展功能。
     单主服务器,在写操作比较多的情况下可能成为整个系统架构的瓶颈的。
-------------------------------------------------------------------------------
5:主从架构解决的问题 Problems Solved by Replicaton,也是从服务器带来的好处。
     Data distribution 数据的分布
     Load balancin     负载均衡(Mainly for Read)  
     Backups           用从服务器来实现备份
     High availability and failover  高可用和故障转移的功能
     Testing MySQL upgrades          测试MySQL软件的升级
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

   
6:主从架构工作的原理:
    主服务器上每一个数据的修改,都会记录在二进制日志(Binary log)中去,
    因此只要能够得到其二进制文件在从服务器上执行一遍就可以了。
    从服务器上启动了一个进程-I/O thread 远程连接到主服务器上去。
    并请求读取主服务器的二进制日志文件。把其二进制文件的内容都复制过来
    保存到从服务器的中继日志文件(Relay log)中去。
    从服务器一旦发现,中继日志中更新了,就启动一个新的线程SQL thread
    这个线程会从中继日志文件中读取从主服务器上复制过来的,改变数据库的
    每一个操作,并在当前服务器上从新应用一遍,或说是执行一遍。
    @@二进制日志不能让人随便能够读取,有两个特殊的权限Replication Client,Replication Slave
    这两个权限限定了,除了复制二进制日志,读取二进制日志文件相关信息的权限,没有任何的权限。
    因此需要在主服务器上建立一个这样的用户,并在从服务器上使用。
    @@如果我们的主从架构跨域互联网,且复制的过程是明文的,因此在Internet上传输,别人完全可以
    抓包的形式,获取相关的数据。但复制是支持SSL的,所以要加密。
    @@mysql服务器的ServerID默认情况都是1,为了避免循环复制,我们需要手动修改mysql的主配置文件
    可以把从服务器的ServerID的修改为2,3,4,......
    
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
7:建立主从架构的规划:
    主服务器:
        启动二进制日志文件
        修改ServerID
        建立一个用户,具有那两个特殊权限
    从服务器:
        修改ServerID
        启动中继日志(Relay log)
        连接到主服务器
 -------------------------------------------------------------------------------------------
    配置主服务器:Configuring the Master
    (1)    The server ID is uesd to distinguish two servers from each other
    (2)    To set up the binary log and server ID ,you have to take the server down
           and add the log-bin,log-bin-index,and server-id options to the my.cnf configuration file
    log-bin: 二进制日志,其默认值on,代表着启用二进制日志,它的文件名默认是主机名+000001的形式,随主机名的改变
             ,二进制日志名也得改变。所以要设定一个固定的名字给它。不用给它指后缀的,系统自加的。
    log-bin-index:此文件包含了当前系统被使用的所有的二进制日志文件。
    server-id:
    @@此定义是在my.cnf的[mysqld]字段定义
    ---------------------------------------------------------------------------------------------
    创建一个数据库用户:
    mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'192.168.0.%' IDENTIFIED BY 'password';
    ---------------------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------------------
    配置从服务器:Configuring the Slave
    (1) As with the master server,you need to assign each slave a unique server ID
    (2) You may also want to consider adding the names of the Relay Log and the Realy Log index files to the 
        my.cnf file using the options relay-log and relay-log-index.

    ----------------------------------------------------------------------------------------------
    (3)连接到主服务器上:
    mysql> CHANGE MASTER TO MASTER_HOST='server1',
        -> MASTER_USER='repl',
        -> MASTER_PASSWORD='password',
   ---------------------------------------------------------------------------------------------
  ----------------------------------------------------------------------------------------------
  ----------------------------------------------------------------------------------------------
  主服务器:172.16.100.1
  从服务器:172.16.100.2
  这两个服务器都是干净的服务器,也就是原始数据都相同。
  -----------------------------------------------------
  主服务器:
  (1):编辑主配置文件my.cnf
      # vim /etc/my.cnf
      @@找到log-bin
      log-bin=mysql-bin
      @@添加log-bin-index
      log-bin-index=mysql-bin.index
      @@使server-id 等于1
      server-id =1
      # service mysqld restart
      --------------------------------------------
   (2):创建mysql用户
      # mysql
      mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO repl@'172.16.%.%' IDENTIFIED BY 'redhat';
      @@添加用户repl ,设置其权限,密码
      mysql> FLUSH PRIVILEGES;
      mysql> SHOW MASTER STATUS;
      @@可以查看主服务器的状态。
  ----------------------------------------------------------------------------------------------------------
  ----------------------------------------------------------------------------------------------------------
  从服务器:
   (1):编辑主配置文件:
      # vim /etc/my.cnf
      @@可以关闭二进制文件的功能
      #log-bin=mysql-bin
      #binlog_format=mixed
      @@添加relay-log,relay-log-index
      relay-log=relay-bin
      relay-log-index=relay-bin.index
      @@修改server-id的值
      server-id =2
      # service mysqld start
      ---------------------------------------------------
    (2):连接到主服务器上:
      # mysql
      mysql> CHANGE MASTER TO MASTER_HOST='172.16.100.1', MASTER_USER='repl', MASTER_PASSWORD='redhat',              MASTER_LOG_FILE='mysql-bin.000001';
      mysql> SHOW SLAVE STATUS\G;
      @@可以查看从服务器的状态。
      mysql> START SLAVE; @@启动从服务器的
      mysql> SHOW SLAVE STATUS\G;
      @@主要查看 
        Slave_IO_Running, Slave_SQL_Running这两个选项的状态值。
      @@此时如果发现有错误,可以在主服务器上,查看错误日志。
      # cd /mydata/data
      # tail localhost.localdomain.err
   -------------------------------------------------------------------------------------
   (3)可以设置从服务器的数据库为只读的,以防不懂数据库的人修改数据库
      # mysql 
      mysql> SHOW VARIABLES LIKE '%read_only%';
      @@可以查看read_only的值。设置其值为ON
      mysql> SET GLOBAL read_only=ON;
   -------------------------------------------------------------------------------------
   测试:
      在主服务器上创建个数据库,在数据库中创建个表
      # mysql 
      mysql> CREATE DATABASE hellodb;
      mysql> use hellodb;
      mysql> CREATE TABLE t1 (
          -> NAME VARCHAR(15));
      此时可以进行相关的验证,看配置的复制功能是否成功。










本文转自 kuchuli 51CTO博客,原文链接:http://blog.51cto.com/lgdvsehome/663680,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 SQL 关系型数据库
创建并配置RDS实例
在阿里云上创建RDS实例涉及登录控制台、进入RDS管理页面、创建实例、选择数据库引擎和版本、配置实例规格与存储、设定网络与安全组、设置实例信息、确认订单并支付,最后初始化数据库。操作步骤可能因界面更新或数据库引擎不同略有差异。
19 1
|
1月前
|
关系型数据库 MySQL 开发工具
MySQL5.7主从配置(Docker)
MySQL5.7主从配置(Docker)
728 0
|
15天前
|
SQL 缓存 关系型数据库
mysql性能优化-慢查询分析、优化索引和配置
mysql性能优化-慢查询分析、优化索引和配置
80 1
|
21天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
15天前
|
SQL 关系型数据库 MySQL
mysql主从同步出错解决办法
mysql主从同步出错解决办法
10 0
|
26天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
74 0
|
30天前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
15 1
|
1月前
|
弹性计算 关系型数据库 MySQL
rds子网配置
在阿里云中配置RDS子网涉及五个关键步骤:1) 创建或选择VPC作为私有网络环境;2) 在VPC内创建子网并确保IP地址不重叠;3) 关联路由表和安全组以控制流量及访问权限;4) 创建RDS实例时指定VPC和子网;5) 确保ECS实例与RDS在同一VPC或配置相应跨VPC访问,并调整安全组规则。这样可保障RDS与其他资源的通信及网络性能。
19 6
|
1月前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
209 0
|
1月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
783 0