高性能mysql主存架构

原文:高性能mysql主存架构

MySQL Replication(Master与Slave基本原理及配置)

主从mysql工作原理:

1:过程:

(1)Mysql的复制(replication)是一个异步的复制,从一个Mysql节点复制到另一个Mysql节点。实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程)另外一个进程在 Master(IO进程)上。

(2)要实施复制,首先必须打开Master端的binary log功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。

2:复制的基本过程如下:

(1)Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

(2)Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;

(3)Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;

(4)Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。

3:主从结论

(1)主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。 
(2)如果主从的网络断开,从会在网络正常后,批量同步。 
(3)如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。 
(4)还有一个mysql配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。 
(5)如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

4:搭建mysql主从服务器
(1)实验环境
操作系统:Red Hat Enterprise Linux Server release 6.4
数据库版本: 5.6.21
(2)主机地址:
master:192.168.10.130
slave:192.168.10.120
(3)安装数据mysql数据库
略
(4)配置master的my.cnf文件
[mysqld]
log_bin = mysql-bin                #开启binlog日志
basedir = /usr/local/mysql         #指定mysql的安装目录
datadir = /data/mysql              #指定mysql数据库的数据存放位置
port = 3306                        #指定端口,默认是3306,如果一个主机有两个数据库需指定不同端口
server_id = 1                      #指定server-id,必须与slave端的server-id不同
bind-address = 0.0.0.0             #默认是127.0.0.1,更改为0.0.0.0,否则Slave将无法链接到 Master
expire_logs_days = 10              #终止日志的时间,以天为单位,默认是30天
max_binlog_size = 100M             #存放日志最大容量
sync-binlog=1                      #允许日志同步
(5)重启mysql服务
[root@localhost ~]# service mysqld restart
(6)本地登录mysql数据库,向slave授权并查看当前使用的binlog日志与偏移量
mysql> grant replication client,replication slave on *.* to 'repluser'@'192.168.10.120' identified by '123456';
语意:允许用户repluser以密码123456在192.168.10.120主机,登陆本机数据库同步数据;
(7)查看master状态
mysql> show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000015             #binlog日志
Position: 211                      #偏移量
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:
No query specified
错误显示:
mysql>show master status;
Empty set (0.02 sec)
查询如果出现以上提示表示配置有问题;
(8)配置slave服务器my.cnf文件
[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
server_id = 2                      #指定server-id,必须与master端的server-id不同
sync-binlog=1                      #允许日志同步
read-only=1                        #设置只读
(9)重启mysql服务
[root@localhost ~]# service mysqld restart
(10)本地登录mysql数据库,指定从服务器的主服务器并开启slave功能
执行以下操作必须关闭slave功能
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to
 -> master_host='192.168.10.130',        #指定主服务器地址
 -> master_port=3306,                    #指定端口,默认是3306,不需要指定
 -> master_user='repluser',              #指定同步时使用的用户名
 -> master_password='123456',            #指定同步用户的密码
 -> master_log_file='mysql-bin.000015',  #指定当前的主服务器使用的binlog日志
 -> master_log_pos=120;                   #指定当前主服务器上的位偏移量
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
(11)查看slave是否正常工作
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.130
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000015
          Read_Master_Log_Pos: 120
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000015
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
(12)测试
在master创建wql数据
mysql> create database wql;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
| wql                |
+--------------------+
6 rows in set (0.00 sec)
在slave数据查看是否有该数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wql                |
+--------------------+
5 rows in set (0.00 sec)

 Mysql主从同步搭建完成且可以正常工作,但其中有几点需要注意:

(1)设置slave服务器时在指定其主服务器时要在每个项目后面加逗号分隔
(2)如需更改slave服务器的主服务器的设置需要先停止slave服务,然后再更改,使用命令stop slave可以停止slave服务
(3)只有Slave_IO_Running与Slave_SQL_Running两个进程的状态全为Yse时才表明slave服务正常工作,否则都表示其工作异常。
Slave_IO_Running进程状态为NO的原因:
(1)连接不上主数据库服务器(物理线路,安全设置问题,授权问题)
(2)当前binlog日志名和pos点和主服务器的不一致
Slave_SQL_Running进程状态为NO的原因:从服务器本机没有主数据库上的库和表或者表结构不一致。
13:主从复制如何提高可靠性

(1)主从单向复制,从服务器只是实时的保存了主服务器的一个副本。当主服务器发生故障时,可以切换到从服务器继续做查询,但不能更新。

(2)如果采用双向复制,即两台mysql服务器即作为主服务器,又作为从服务器。那么两者都可以执行更新操作并能实现负载均衡,当一方出现故障时,另一方不受影响。但是,除非能保证任何更新操作顺序都是安全的,否则双向复制会导致失败。

注:如有操作及编写问题及时联系;QQ:1078956079 /1648111701

时间: 2024-09-17 03:38:28

高性能mysql主存架构的相关文章

高性能Mysql主从架构的复制原理及配置详解(转)

温习<高性能MySQL>的复制篇. 1 复制概述       Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器

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

1 复制概述       Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.

揭秘红包场景下的高性能本地存储架构设计

前言:红包是最近兴起的全民参与的活动,2017年新春红包在参与人数和业务峰值上都到达了历史新高,其中红包除夕开奖峰值达到90W/s.近日,阿里云系统和块存储负责人.资深专家马涛从高性能本地存储架构设计.高性能本地存储要点分享.高性能本地存储性能数据等方面分享了高性能本地存储的实战经验. 以下内容根据现场分享和幻灯片整理而成. 红包业务特点 支付宝红包的大致业务架构包括单元化部署.统一接入.网关.DAO.数据库以及在线\离线数据处理,整体流程很长.其中数据库在整理的交易链路中起到承上启下的作用.在

【MySQL】如何构建高性能MySQL系统

一 简介     最近在压测新的存储,正好把工作过程中积累的对高性能MySQL相关的知识体系构建起来,做成思维导图的方式.总结乃一家之言,有不妥之处,望给位读者朋友指正. 二 思维导图    构建高性能MySQL系统涵盖从单机 硬件,os ,文件系统,内存,到MySQL 本身的配置,以及schema 设计,索引设计 ,再到数据库架构上的水平和垂直拓展.   说明     1 IO相关的优化可能还不完整,以后会逐步完善.     2 关于数据库系统水平和垂直拆分是一个比较大的命题,这里略过,每个公

MYSQL 逻辑架构

思维导图    前言 > Mysql并非尽善尽美,但足够灵活,能适应高要求环境,如Web应用.> Mysql在众多平台上运行良好,支持多种数据类型,但不支持对象类型(Mongodb支持)> Mysql的存储引擎可以基于表建立,以满足对数据存储,性能,特征及其他特性的各种需要.  架构逻辑视图 每个虚线框为一层,总共三层. 第一层,服务层(为客户端服务):为请求做连接处理,授权认证,安全等. 第二层,核心层:查询解析,分析,优化,缓存,提供内建函数;存储过程,触发器,视图. 第三层,存储引

MySQL技术架构介绍

金璞:各位网友大家好!我是赛迪网技术应用编辑金璞,今天本来要来的David Axmark先生和周总现在正在路上,预计可能和迟一点跟网友们见面现在我们请陈慧女士做一个自我介绍. 陈慧:我是万里开源的系统工程师陈慧,很高兴作客赛迪网. 金璞:因为David Axmark和周总还没有来,前天的时候MySQL在中国研发中心成立的时候,我当时听到您做了一个演讲,也讲了MySQL技术上的架构包括以后的发展方向之类的.今天先跟网友们讲一讲吧. 陈慧:我们万里开源是MySQL在中国唯一的代理,我们是基于Linu

mysql逻辑架构及存储引擎简介

  MySQL逻辑架构: 并发控制:由锁实现 读锁:也叫共享锁,读锁互相不阻塞.A加锁表后A,b,c,d都能读该表但不能写该表. 写锁:也叫排他锁,写锁相互阻塞.A加排他锁后,其他线程不能读写该表. 锁粒度: 表锁:锁一个表,并发粒度小.代表存储引擎MyISAM 行锁:锁一行数据,并发粒度大,并发操作表性能好.代表存储引擎InnoDB.锁粒度小系统对锁的开销也大. 假如给一个表加读锁,那么其他线程也无法对该表进行写操作了,如果是加行锁那么该线程只阻塞只对这一行数据的读写,表中其他行的数据其他线程

高性能mysql学习笔记总结

(架构及历史) Mysql逻辑架构 如果能在脑中有个Mysql各组件如何协同工作的架构图,这会很有助于我们了解Mysql服务器. Mysql逻辑架构图 最上层连接/线程处理这里,处理连接.授权和安全. 第二层是解析器.查询缓存.优化器这三部分.处理查询解析.分析.优化.缓存以及所有内置函数.所有跨存储引擎的功能(存储过程.触发器.视图). 第三层就是存储引擎了.服务器通过API与各种存储引擎交互,这些接口屏蔽了不同存储引擎的差异. 另外Mysql还有各方面的特性,包括:执行与优化.并发控制.读写

B站高性能微服务架构

编辑IT大咖说阅读字数: 2672用时:8分钟本文内容来源于任伟在[沪江技术沙龙]-漫谈微服务架构实践上的主题演讲,IT大咖说为沪江技术沙龙独家视频知识分享平台. 内容摘要Bilibili作为一个大型弹幕视频网站,在竞争日益激烈的互联网行业中,开始重视技术生态的演进,探索寻求适合企业本身的一个微服务架构.本次分享主要讲述了B站高性能微服务架构的演进. 大家好,我是来自bilibili的任伟.今天的分享分为三个部分内容:  曾经的价格体系.  面临的一些痛点问题.  高性能微服务架构在B站的落地.