0

0

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

php中文网

php中文网

发布时间:2016-06-07 14:56:07

|

1530人浏览过

|

来源于php中文网

原创

一、MySQL 5.6 新特性 MySQL 5.6 主要在查询性能的优化、InnoDB改进以支持高吞吐量的事务、NoSQL风格的API、分区功能的改进、数据复制的改进,增加 PERFORMANCE_SCHEMA 库以获得数据库性能信息等。 1、查询性能优化 优化 WHERE 语句改进索引条件的处理性能,

一、mysql 5.6 新特性

    MySQL 5.6 主要在查询性能的优化、InnoDB改进以支持高吞吐量的事务、NoSQL风格的API、分区功能的改进、数据复制的改进,增加 PERFORMANCE_SCHEMA 库以获得数据库性能信息等。

    1、查询性能优化

    优化 WHERE 语句改进索引条件的处理性能,Multi-Range Read:通过随机数据访问来提升 SSD 上的数据读取速度,优化文件排序:对一些组合了ORDER BY non_indexed_column和 LIMIT x的SQL语句,该特性将大大加速此类语句的执行速度。

    2、InnoDB 的改进

    MySQL 5.6 完全集成 InnoDB 作为默认的存储引擎。同时 5.6 版本在使用 InnoDB 上的很多细节做了改进,详情请看这里。

    3、提供 NoSQL 风格的 API

    该功能主要适用于将 MySQL 来作为NoSQL 使用,而 MySQL 使用的是 memcached兼容的 API。通过该接口程序访问数据可直达 InnoDB 存储引擎,而无需通过 MySQL 对 SQL 的转换过程,大大提升了数据访问的性能。

    4、分区的改进

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


    SELECT * FROM employees  PARTITION (p0, p2);

    DELETE FROM employees  PARTITION (p0, p1);

    UPDATE employees PARTITION  (p0) SET store_id = 2 WHERE fname = 'Jill';

    SELECT e.id, s.city FROM  employees AS e JOIN stores PARTITION (p1) AS s ...;

    分区数据的导入导出,此功能用于快速的将某个表迁移到分区上:ALTER TABLE eEXCHANGE PARTITION p0 WITH TABLE e2;

    5、复制功能的改进

    支持多线程复制,事实上是针对每个database开启相应的独立线程。即每个库有一个单独的(sql thread)如果线上业务中,只有一个database或者绝大多数压力集中在个别database的话,多线程并发复制特性就没有意义了。

    支持启用GTID,对运维人员来说应该是一件令人高兴的事情,在配置主从复制,传统的方式里,你需要找到binlog和POS点,然后change master to指向,而不是很有经验的运维,往往会将其找错,造成主从同步复制报错,在mysql5.6里,无须再知道binlog和POS点,需要知道master的IP、端口,账号密码即可,因为同步复制是自动的,mysql通过内部机制GTID自动找点同步。

    6、大大增强 PERFORMANCE_SCHEMA 数据库

    降低了数据库开销、表IO的信息汇集和监控、表锁信息汇集和监控、会话和用户级别的监控、全局性能信息汇总。

二、GITD 详解

    MySQL 5.6 的新特性之一,是加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。

    1、什么是GTID?

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

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

    例如,下面就是一个 GTID:3E11FA47-71CA-11E1-9E33-C80AA9429562:50表示在以 "3E11FA47-71CA-11E1-9E33-C80AA9429562" 为唯一标示的 MySQL 实例上执行的第 50 个数据库事务。很容易理解,MySQL只要保证每台数据库的 server_uuid 全局唯一,以及每台数据库生成的 transaction_id 自身唯一,就能保证 GTID 的全局唯一性。

    2、什么是server_uuid?

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

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

wKioL1U4rQLTe2VHAANHHsTAiaw568.jpg


    在 MySQL 再次启动时会读取auto.cnf 文件,继续使用上次生成的 server_uuid。使用 SHOW 命令可以查看 MySQL 实例当前使用的 server_uuid?:SHOW GLOBAL VARIABLES LIKE 'server_uuid';它是一个 MySQL 5.6 global variables,文档链接在这里:server_uuid? 全局唯一的 server_uuid 的一个好处是:可以解决由 server_id 配置冲突带来的MySQL 主备复制的异常终止(BUG #33815?)

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

三、多线程复制基于库

    MySQL 5.6之前的版本,同步复制是单线程的,队列的,只能一个一个执行,在5.6里,可以做到多个库之间的多线程复制,例如数据库里,存放着用户表,商品表,价格表,订单表,那么将每个业务表单独放在一个库里,这时就可以做到多线程复制,但一个库里的表,多线程复制是无效的。

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

Poe
Poe

Quora旗下的对话机器人聚合工具

下载

四、MySQL 5.6 复制管理工具

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

   :这里只简单的介绍一下,具体的工具使用,不具体说明,使用方法 命令—help

     mysqlreplicate 快速启动复制

     mysqlrplcheck 快速检查复制环境

     mysqlrplshow 显示复制拓扑

     mysqlfailover 故障转移

     mysqlrpladmim 管理工具


五、具体配置过程

    1、环境准备

操作系统

    CentOS 6.6 x86_64

软件版本

    Mysql 5.6.22

    2、实验拓扑

wKiom1U4sD6x_Hu_AAF6Yes4gcA751.jpg


    3、  关闭防火墙与SELinux

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

    4、  配置MySQL主从复制

        A、配置选项说明

            要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项:


    • binlog-format:二进制日志的格式,有rowstatementmixed几种类型;需要注意的是:当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;

    • log-slave-updatesgtid-modeenforce-gtid-consistencyreport-portreport-host:用于启动GTID及满足附属的其它需求;

    • master-info-repositoryrelay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;

    • sync-master-info:启用之可确保无信息丢失;

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

    • binlog-checksummaster-verify-checksumslave-sql-verify-checksum:启用复制有关的所有校验功能;

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

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

    • server-id:同一个复制拓扑中的所有服务器的id号必须惟一。


        B、配置主服务器master

           

 # 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、在Slave服务器上安装MySQL与在Master服务器上安装方法相同,这里不在介绍,而在Slave服务器上安装Mysql有两个参数与Master服务器不同。如下:

           

 server-id=11
 report-host=192.168.100.91


# service mysql restart

        D、在Master服务器上为Slave创建复制用户并测试连接

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

;

        E、启动slave复制线程

        在从服务器上进行操作

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;

wKiom1U4x5rx1sTbAAP6LUgHtd4909.jpg


好,现在可以在主上面进行创建数据库。看看从的是否有数据。。。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

3

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

12

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

69

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

59

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

46

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

24

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

20

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

4

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

348

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 6.5万人学习

Rust 教程
Rust 教程

共28课时 | 6.5万人学习

Django 教程
Django 教程

共28课时 | 4.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号