热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL5.6GTID特性详解与多线程复制机制解析

MySQL5.6引入了全局事务标识符(GTID)和多线程复制机制,显著提升了数据库的可靠性和性能。GTID作为一种新的事务标识方式,确保了事务在主从节点间的一致性,避免了传统基于日志位置的复制可能出现的问题。多线程复制则通过并行处理多个复制任务,大幅提高了复制效率,特别是在大型数据库环境中表现更为突出。这些新特性不仅增强了MySQL的高可用性和扩展性,还为数据库管理带来了更多灵活性和便利性。

MySQL5.6新特性GTID、多线程复制

在Oracle发布MySQL5.6看到众多新特性之后很兴奋,包括对复制的改进.在MySQL5.5半同步复制之后MySQL5.6又引入GTID、多线程复制,在这里总结这一下这两个新特性.

1、引入GTID,在MySQL5.6以前对于主从复制出现问题有时候需要你分析BINLOG找到POS点,然后在CHANG MASTER TO.对于新手来说很容易犯错,造成主从复制错误.在新版本中,不必在需要寻找BINLOG和POS点,你只需要知道MASTER的IP、密码、端口就可以,因为MySQL会从内部GTID机制自动找到同步点.

2、多线程复制,在MySQL5.6之前,复制是单线程队列式的,只能一个一个运行.在新版中支持基于库的多线程复制,但是库里的表不能多线程.

下面实现以下这两个新特性

注:以下实验数据库版本MySQL5.6.15

MASTER:

my.cnf添加以下参数

binlog_format = row

gtid_mode = ON

enforce-gtid-consistency = ON

slave_parallel_workers=4           --开启基于库的多线程复制默认0不开启

binlog_cache_size = 8M

max_binlog_size = 50M

max_binlog_cache_size = 100M

sync_binlog = 1

expire_logs_days = 1

log-slave-updates=true

SLAVE:

my.cnf添加以下参数

binlog_format = row

gtid_mode = ON

enforce-gtid-consistency = ON

binlog_cache_size = 8M

max_binlog_size = 50M

max_binlog_cache_size = 100M

sync_binlog = 1

expire_logs_days = 1

slave_parallel_workers=4

max_relay_log_size = 50M

relay_log_purge = 1

relay_log_recovery = 1

master_verify_checksum = 1        --主事件校验

slave_sql_verify_checksum = 1     --从事件校验

slave_allow_batching = 1

log-slave-updates=true

MASTER:

mysql> use percona;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql>

mysql> show tables;

+-------------------+

| Tables_in_percona |

+-------------------+

| test              |

+-------------------+

1 row in set (0.00 sec)

mysql> select * from test;

Empty set (0.02 sec)

mysql> desc test;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id    | int(11) | YES  |     | NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

mysql> insert into test values (1);

Query OK, 1 row affected (0.04 sec)

mysql> insert into test values (1);

Query OK, 1 row affected (0.00 sec)

mysql> insert into test select * from test;

Query OK, 64 rows affected (0.00 sec)

Records: 64  Duplicates: 0  Warnings: 0

mysql> flush logs;

Query OK, 0 rows affected (0.02 sec)

mysql>

SLAVE:

mysql> change master to master_host='192.168.40.176',master_port=3306,master_user='repl',master_password='123456',master_auto_position=1,master_delay=20;   --master_delay此参数表示relay日志会同步到slave机,但是会根据事件时间戳延时20秒,在某些场景会用到.

Query OK, 0 rows affected, 0 warnings (0.05 sec)

mysql> start slave;

Query OK, 0 rows affected, 0 warning (0.04 sec)

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.40.176

Master_User: repl

Master_Port: 3306

Connect_Retry: 10

Master_Log_File: mysql-bin.000046

Read_Master_Log_Pos: 191

Relay_Log_File: mysqld-relay-bin.000004

Relay_Log_Pos: 401

Relay_Master_Log_File: mysql-bin.000046

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: test,percona,mysql

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 191

Relay_Log_Space: 693

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 2

Master_UUID: 69a73914-62ca-11e3-870f-080027dff846

Master_Info_File: /mysql/data/master.info

SQL_Delay: 30

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 1

1 row in set (0.00 sec)

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.40.176

Master_User: repl

Master_Port: 3306

Connect_Retry: 10

Master_Log_File: mysql-bin.000050

Read_Master_Log_Pos: 191

Relay_Log_File: mysqld-relay-bin.000009

Relay_Log_Pos: 401

Relay_Master_Log_File: mysql-bin.000050

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: test,percona,mysql

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 191

Relay_Log_Space: 856

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 2

Master_UUID: 69a73914-62ca-11e3-870f-080027dff846

Master_Info_File: /mysql/data/master.info

SQL_Delay: 20

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set: 69a73914-62ca-11e3-870f-080027dff846:13-36

Executed_Gtid_Set: 69a73914-62ca-11e3-870f-080027dff846:1-36

Auto_Position: 1

1 row in set (0.00 sec)

开启SLAVE观察Retrieved_Gtid_Set与Executed_Gtid_Set

Retrieved_Gtid_Set:记录从MASTER获取BINLOG的位置

Executed_Gtid_Set:记录从机执行的MASTER和SLAVE BINLOG日志位置

注:

UUID:身份ID,第一次启动MySQL时会产生UUID写入到auto.cnf文件,不建议修改

例:

[mysql@localhost ~]$ cat /mysql/data/auto.cnf

[auto]

server-uuid=69a73914-62ca-11e3-870f-080027dff846

GTID:全局事务标识符,每次BINLOG写入事务都会产生唯一一个标识符,由UUID+Transcation ID组成.

例:

mysql> show master status;

+------------------+----------+--------------------+------------------+-------------------------------------------+

| File             | Position | Binlog_Do_DB       | Binlog_Ignore_DB | Executed_Gtid_Set                         |

+------------------+----------+--------------------+------------------+-------------------------------------------+

| mysql-bin.000050 |      191 | test,percona,mysql |                  | 69a73914-62ca-11e3-870f-080027dff846:1-36 |

+------------------+----------+--------------------+------------------+-------------------------------------------+

1 row in set (0.00 sec)

OK了,今天到此基于GTID、多线程的MySQL5.6新特性演示完成,当然有些还需要进一步探究.在以后的博文中会继续讨论.希望大家有所收获,也欢迎同行指正.^_^



推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
author-avatar
Ki丶ng-james-LBJ威_112
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有