【MySQL大连锁】《Mysql集群架构》

初稿地址(微信):【技术文章】《Mysql集群架构》

正文地址:http://www.cnblogs.com/aiweixiao/p/7258444.html

C++ 1

点击关注微信公众号

 

1.生死攸关内容

 

   1)mysql的架,锁,最佳实践,事务

   2)mysql的吩咐执行,主从复制,索引,数据备份/恢复

   3)mysql的集群,mysql的负载均衡,监控,mysql proxy

   4)  mysql的MMM架构,mysql 的源码,DBA

C++ 2

MySQL-从去到跑路

 

2.具体内容

   2.1)【架构】:


 
 【架构图】:

C++ 3

MySQL-MySQL的架构图

 

【概述】:Mysql是出于SQL接口,解析器,优化器,缓存,存储引擎组成的

2.2)【锁】:


 
【概念】:为了保证数据的平完整性,任何一个数据库都设有锁定机制。锁定机制的好坏直接应想到一个数据库系统的起处理能力和属性,所以锁定机制的落实为就是变成了各种数据库的核心技术之一。

 
【分类】:MySQL各存储引擎使用了三种档次(级别)的锁定机制:行级锁定,页级锁定和表级锁定

   
1)行级锁定:锁定目标的颗粒度很粗,消耗最可怜,行级锁定为绝容易产生死锁,但是并作好

    2)表级锁定:死锁情况少,但是出现不好,

    3)页级锁定:介于前两者之间。

   【代码】:

1)锁定 LOCK TABLES tbl_name [AS alias]

2)解锁  UNLOCK TABLES

 

2.3)【最佳实践】:


   【为查询缓存优化你的询问】:

C++ 4

    【mysql强制索引和禁止某个索引】:

    1) mysql强制行使索引:force index(索引名或者主键PRI):select *
from table force index(PRI,ziduan1_index) limit
2;(强制行使索引”PRI和ziduan1_index”)

    2) mysql禁止某个索引:ignore index(索引名或者主键PRI):select *
from table ignore index(PRI,ziduan1_index) limit
2;(禁止以索引”PRI,ziduan1_index”)

 

2.4)【事务】:


   
【概念】:事务是靠逻辑上之同样组操作,组成这组操作的一一单元,要无统成而无备败。其特色是ACID(原子性,一致性,隔离性,持久性)

    【实现】:

1)事务开启:START TRANSACTION; 或者 BEGIN;

2)事务提交:COMMIT;

3)事务回滚:ROLLBACK;

 

2.5)【mysql 命令行】:


 
 【命令执行执行mysql】:使用mysql的-e参数可以推行各种sql的(创建,删除,增,删,改、查)等各种操作

例如:#开创数据库

create_db_sql=”create database IF NOT EXISTS ${DBNAME}”

mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e
“${create_db_sql}”

 

2.6)【主从复制】:


 
 【一预示多由】:在平等预告多打之数据库体系受到,多独从服务器采用异步的道创新主数据库的变化,业务服务器在推行写或者连带修改数据库的操作是当预告服务器上进行的,读操作则是以各起服务器上进行

C++ 5

MySQL-MySQL的主从复制

 

   【原理】 :MySQL之间数据复制的基本功是二进制日志文件(binary log
file)。一令MySQL数据库一旦启用二进制日志后,其看成master,它的数据库被有所操作都见面因“事件”的计记录在二进制日志被,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监督master的亚前行制日志文件之变动,如果发现master二进制日志文件发生变化,则会把转变复制到自己之通日志被,然后slave的一个SQL线程会拿有关的“事件”执行及好的数据库被,以此实现由数据库与主数据库的一致性,也便贯彻了主从复制。

2.7)【索引】:


 
 【概述】:索引对查询的进度有所重要的熏陶,理解索引也是进展数据库性能调优的起点

 
 【种类】:普通索引,唯一索引,全文索引,单列/多列索引,组合索引(最荒唐前方缀)

   【B+树】:

 

C++ 6

MySQL-索引B+树结构

   
 1)详解B+树:浅蓝色的片咱们誉为一个磁盘块,可以观看每个磁盘块包含几单数据项(深蓝色所示)和指针(黄色所示),如磁盘块1分包数据项17以及35,包含指针P1、P2、P3,P1表示小于17之磁盘块,P2表示以17同35里边的磁盘块,P3表示过35之磁盘块。真实的数额是让叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。非叶子节点才休存储真实的数量,只存储指引搜索方向的数项,如17、35连无诚实存在让数据表中。

   
2)查找B+树:如果要是摸数据项29,那么首先会见管磁盘块1是因为磁盘加载到内存,此时发出同样涂鸦IO,在内存中因故二分开查找确定29每当17以及35里边,锁定磁盘块1之P2指针,内存时间因为好短(相比磁盘的IO)可以忽略不计,通过磁盘块1之P2指针的磁盘地址将磁盘块3是因为磁盘加载到内存,发生第二浅IO,29于26及30间,锁定磁盘片3底P2指针,通过指针加载磁盘块8到内存,发生第三潮IO,同时内存中做二划分查找找到29,结束查询,总计三不良IO。真实的状态是,3层的b+树可以象征上百万底数量,如果上百万底数量检索只待三糟糕IO,性能提高拿凡英雄的,如果无索引,每个数据项都如发生同样次等IO,那么总共要百万不成的IO,显然成本非常很大。

 

2.8)【数据备份/恢复】:


   【数据备份】:

     1)使用mysqldump命令备份mysqldump -u username -p –databases
dbname2 dbname2 > Backup.sql

     2)直接复制整个数据库目录 : 需要停止服务,不支持InnoDB引擎

     3)热备份:使用mysqlhotcopy工具快速备份,不用停止服务。
mysqlhotcopy [option] dbname1 dbname2 backupDir/

 

 【数据恢复】:

    1)还原使用mysqldump命令备份的数据库: mysql -u root -p <
C:\backup.sql

   
2)还原直接复制目录的备份: 必须管一定量只MySQL数据库的版本号是一致的。MyISAM类型的表有效,对于InnoDB类型的阐明不可用

 

2.9)【mysql的集群】:


     【概念】:MySQL 集群(MySQL Cluster
)是mysql适合给分布式计算环境之胜实用、高冗余版本。它用了NDB Cluster
存储引擎,允许以1只 Cluster 中运行多独MySQL服务器。在MyQL
5.0同以上之二进制版本被、以及和时的Linux版本兼容的RPM中提供了拖欠存储引擎。

C++ 7

MySQL-MySQL集群架构图

 

      【分类】:分为同步集群和异步集群。

1)同步集群:(mysql cluster)

      结构:(data + sql + mgm节点)

      特点:

        1. 1)
内存级别的,对硬件要求比逊色,但是针对内存要求比较生。换算比例为:1:1.1;

        1.2) 数据而在几华服务器上,冗余较好;

        1.3) 速度一般;

        1.4) 建表需要声明也engine=ndbcluster

        1.5) 扩展性强;

        1.6) 可以兑现高可用性和负载均衡,实现对大型应用的支撑;

        1.7) 必须是特定的mysql版本,如:已经编译好的max版本;

        1.8) 配置和管制好,不会见掉数据

 

2)异步集群(mysql replication)

   结构:(master + slave)

   特点:

      2.1) 主从数据库异步数据;

      2.2) 数据在几雅服务器上,冗余一般;

      2.3) 速度比较快;

      2.4) 扩展性差;

      2.5)
无法兑现高可用性和负载均衡(只能于先后级别实现读写分离,减轻对主数据库的压力);

      2.6) 配置和管理于差,可能会见少数据

 

2.10)【mysql的负载均衡】:


   【定义】: 通过director,将用户之要分发及real
server服务器上,然后回到给用户。负载均衡布局灵活、能够满足各种急需。

 

C++ 8

MySQL-LVS+Keepalived实现mysql负载均衡

 

  【实现方式】:

     硬件:BIG/IP、Cisco、IBM(昂贵)

     软件:LVS(免费)

   
 LVS系统将用户的要的多寡包在数据层和网络层进行了打包和转账,由三种植方法满足各种需求。

    1) DR:直接路由于

    2) Tuning:tcp/ip隧道

    3) NAT:网络地址转换

 

2.11)【mysql的监控】:


   
 【监控内容】:监控数据库的常见会说话情况。碎片、剩余表空间监控,及时了解表空间的扩展情况、以及剩余空间分布状况

   
 【代码实现】:https://github.com/wozhuzaisi/shell-work/blob/master/mysqlmonitor.sh 

 

2.12)【mysql proxy】:


    【定义】:MySQL Proxy是一个处你的client端和MySQL
server端之间的简短程序,它可以监测、分析或改动它的通信。它使用灵活,没有限定,常见的用处包括:负载平衡,故障、查询分析,查询过滤与改动等等

   【实现读写分离】:

   1)安装并配备mysql proxy.

   2)测试:主服务器mysql> grant all on *.*
to’lin3615’@’192.168.179.142’identified by’123456’;

 

2.14)【mysql MMM架构】:


   
 【概述】:是同仿支持双主故障切换和双主日常管理之台本程序。由于MMM无法完全的保证数据一致性,所以MMM适用于对数据的一致性要求无是死高,但是同时想最特别程度之保管工作可用性的面貌。对于那些针对数码的一致性要求十分高之业务,非常不建议用MMM这种大可用架构。

 

C++ 9

MySQL-MMM架构图

 

2.15)【mysql 源码】:


 
 【内容】:MySQL是出于C++写的,入口函数main()直接调用了mysqld_main()。Server启动的代码都于此,直到最后的
handle_connections_sockets()。

 

C++ 10

MySQL-MySQL的源码第一书

 

   【资料】:

下载pdf:《深入MySQL源码》

官网手册: https://dev.mysql.com/doc/internals/en/

看源码:https://zhuanlan.zhihu.com/p/26118810

书籍:《深入了解MySQL核心技术》

 

2.16)【DBA】:


【职责】:

 

C++ 11

MySQL-DBA思维导图

 

   1)数据库安装;

   2)数据库配置和保管;

   3)权限设置与安治本;

   4)监控以及性能调节;

   5)备份和还原;

   6)解决相似的题材;

 

C++ 12

MySQL-DBA的一天

C++ 13

MySQL-关注微信公众号