MySQL 5.6 基于GTID及多线程的复制详解

MySQL 5.6 基于GTID及多线程的复制详解,第1张

MySQL5.6基于GTID及多线程的复制详解

一、MySQL5.6的新特性

MySQL5.6主要集中在优化查询性能、改进InnoDB支持高吞吐量事务、NoSQL式API、改进分区功能、改进数据复制、添加PERFORMANCE_SCHEMA库获取数据库性能信息等方面

1。查询性能优化

优化WHERE语句以提高索引条件的处理性能。多范围读取:通过随机数据访问提高SSD上的数据读取速度,优化文件排序。对于一些结合了ORDERBYnon_indexed_column和LIMITx的SQL语句,这个特性会大大加快这类语句的执行速度。

2。InnoDB的改进

MySQL5.6完全集成了InnoDB作为默认存储引擎。同时,使用InnoDB的许多细节在5.6版本中得到了改进。详情请看这里。

3。提供NoSQL风格的API

该函数主要适用于MySQL作为NoSQL,而MySQL使用memcached兼容的API。这个接口程序可以直接访问InnoDB存储引擎的数据,不需要将SQL转换成MySQL,大大提高了数据访问的性能。

4。分区的改进

显式分区数据查询,例如:


SELECT*FROMemployeesPARTITION(P0,p2);

从雇员分区(p0,p1)中删除;

UPDATEemployeesPARTITION(P0)SETstore_id=2,其中fname='Jill

SELECTe.id,s.cityFROMemployeesASeJOINstoresPARTITION(P1)ASs...;

导入导出分区数据,该函数用于快速迁移一个表到分区:altertablee用表E2交换分区P0;

5。复印功能的改进

支持多线程复制,实际上是为每个数据库启动对应的独立线程。也就是说,每个数据库都有一个单独的sql线程。如果在线业务只有一个数据库或者大部分压力集中在单个数据库上,那么多线程并发复制特性就没有意义。

启用GTID对于运维人员来说应该是一件值得高兴的事情。在配置主从复制时,传统的方式需要找到binlog和POS点,然后把主变指向它们,而不是有经验的运维,这样往往会导致主从同步复制出错。在mysql5.6中,你不再需要知道binlog和POS点。你只需要知道主的IP,端口,账号密码,因为同步复制是自动的,mysql通过内部机制GTID自动找一些同步。

6。极大地增强性能_模式数据库

减少了数据库开销、表IO的信息收集和监控、表锁信息收集和监控、会话和用户级监控以及全局性能信息汇总。

二。GITD详解

MySQL5.6的新特性之一是增加了全局事务ID(GTID),以加强主辅数据库的一致性、故障恢复和容错。

1。什么是GTID?

官方文档:http://dev.MySQL.com/doc/refman/5.6/en/replication-gtids.html在这个文档中,我们可以知道全局事务ID的官方定义是:GTID=source_id:transaction_id。

在MySQL5.6中,每个GTID代表一个数据库事务。在上面的定义中,source_id表示执行事务的主库uuid(server_uuid),transaction_id是从1开始的自增计数,表示在这个主库上执行的第n个事务。MySQL保证了事务和GTID之间1:1的映射。

例如,下面是一个GTID:3e11fa47-71CA-11e1-9e33-c80a9429562:50,它表示在MySQL实例上执行的第50个数据库事务,其中“3e1fa47-71CA-11e1-9e33-c80a9429562”是唯一的符号。很容易理解,只要每个数据库的server_uuid是全局唯一的,每个数据库生成的transaction_id也是唯一的,MySQL就能保证GTID的全局唯一性。

2。什么是server_uuid?

MySQL5.6用128位server_uuid替代了原来32位server_id的大部分功能。原因很简单。server_id依赖于my.cnf的手动配置,可能会造成冲突——而自动生成128位uuid的算法可以保证所有MySQLuuid不会冲突。

第一次启动时,MySQL会调用generate_server_uuid()自动生成一个server_uuid并保存到auto.cnf文件中——这个文件目前唯一的用途就是保存server_uuid。


MySQL再次启动时,会读取auto.cnf文件,继续使用上次生成的server_uuid。使用SHOW命令查看MySQL实例当前使用的server_uuid。:显示类似“server_uuid”的全局变量;是一个MySQL5.6全局变量,文档链接在这里:server_uuid?全局唯一server_uuid的一个好处是可以解决server_id配置冲突导致的MySQL主备复制异常终止(BUG#33815?)

在MySQL5.6中,Slave在向Master申请binlog时会先发送自己的server_uuid,Master会用Slave发送的server_uuid代替server_id(MySQL5.6之前的方式)作为kill_zombie_dump_threads的参数,终止冲突或死的BINLOG_DUMP线程。

三。多线程复制基于库

在MySQL5.6之前,同步复制是单线程的,排队的,只能一个一个执行。在5.6中,可以实现多个数据库之间的多线程复制。例如,在数据库中,存储了用户表、商品表、价格表和订单表。然后每个业务表单独放在一个数据库里,然后就可以实现多线程复制了。但是,数据库表的多线程复制是无效的。

注意:每个数据库只能使用一个线程。多线程复制只有在复制涉及多个数据库时才有意义。

四。MySQL5.6复制管理工具

官方下载地址:http://dev.mysql.com/downloads/tools/utilities/#downloads

:下面简单介绍一下。使用了具体的工具,没有具体的解释。使用方法命令-—帮助。

Mysqlreplicate快速启动复制。

Mysqlrplcheck快速检查复制环境

Mysqlrplshow显示了复制拓扑

Mysqlfailover故障转移

Mysqlrpladmim管理工具


五、具体配置流程

1。环境准备

*** 作系统

CentOS6.6x86_64

软件发布

Mysql5.6.22

2。实验拓扑


3。关闭防火墙和SELinux

# serverice iptables stop # chkconfig iptables off # sed -i ‘s/%SELINUX=enforcing%SELINUX=disabled%’/etc/sysconfig/selinux # getenforce 0

4、配置MySQL主从复制

A.配置选项的描述

要使用MySQL5.6中的复制功能,至少应在其服务配置部分[mysqld]中定义以下选项:


  • binlog-format:二进制日志的格式,有行、语句、混合几种类型;需要注意的是,当隔离级别设置为READ-committed时,二进制日志格式必须设置为ROW,现在MySQL官方认为该语句不再适合继续使用;但混合类型处于默认的事务隔离级别,可能导致主从数据不一致;

  • log-slave-updates,GTID-mode,enforce-gtid-consistency,report-port和report-host:用于启动GTID并满足其他附属要求;

    master-info-repository和relay-log-info-repository:启用这两项,可以用来保证二进制和从服务器在崩溃时的安全性;

    sync-master-info:启用以确保没有信息丢失;

    slave-parallels-workers:设置服务器的SQL线程数;0表示关闭多线程复制功能;

    binlog-checksum,master-verify-checksum和slave-SQL-verify-checksum:启用所有与复制相关的验证功能;

    binlog-rows-query-log-events:如果启用,可以用来在二进制日志中记录事件相关的信息,可以降低故障排除的复杂度;

    log-bin:启用二进制日志,这是保证复制功能的基本前提;

    server-id:同一复制拓扑中所有服务器的ID号必须是唯一的。


    b、配置主服务器

     # vim /usr/my.cnf

    将以下内容添加到[mysqld]:

    skip-external-locking key_buffer_size= 256M max_allowed_packet= 1M table_open_cache= 256 sort_buffer_size= 1M read_buffer_size= 1M read_rnd_buffer_size= 4M myisam_sort_buffer_size= 64M thread_cache_size= 8 query_cache_size=16M thread_concurrency= 2 log-bin=mysql-bin innodb_file_per_table= 1     binlog-format=ROW         //设置二进制日志格式 log-slave-updates=true//是否记录从服务器同步数据动作 gtid-mode=on       //启用Gtid模式 enforce-gtid-consistency=true//是否强制GTID的一致性 master-info-repository=TABLE  //master信息的记录位置 relay-log-info-repository=TABLE  //中继日志信息的记录位置 sync-master-info=1 slave-parallel-workers=2  //设置从服务器复制线程数 binlog-checksum=CRC32//设置binlog校验算法(循环冗余校验码) master-verify-checksum=1  //设置主服务器是否校验 slave-sql-verify-checksum=1//设置从服务器是否校验 binlog-rows-query-log_events=1 server-id       = 10 report-port=3306 report-host=192.168.100.90   //设置报告给哪台服务器,一般设置为本机的主机名


    # service mysql restart          //重启MySQL服务


    c、在从服务器上安装MySQL和在主服务器上安装Mysql是一样的,这里不做介绍。但是,在从服务器上安装MySQL有两个与主服务器不同的参数。如下所示:

     server-id=11  report-host=192.168.100.91


    # service mysql restart

    d、在主服务器上为从服务器创建一个复制用户并测试连接

    mysql> grant replication slave,replication client on *.*to 'replication'@'192.168.%.%' identified by 'passwd'; mysql> flush privileges


    E.启动从属复制线程。

    从服务器 *** 作。

    mysql> changemaster to master_host='192.168.100.90',master_user='replication',master_password='passwd',master_auto_position=1; mysql> start slave; mysql> show status\G;


    好了,现在您可以在主计算机上创建数据库了。看看是否有来自。。。

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/zz/783472.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-04
    下一篇 2022-05-04

    发表评论

    登录后才能评论

    评论列表(0条)

    保存