热门标签 | 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新特性演示完成,当然有些还需要进一步探究.在以后的博文中会继续讨论.希望大家有所收获,也欢迎同行指正.^_^



推荐阅读
  • 通过SQL Server的复制功能,可以实现高效的数据同步与更新。该技术允许在不同的数据库之间复制和分发数据及数据库对象,并确保这些数据保持一致性和实时性。SQL Server复制机制不仅支持单向数据传输,还支持双向同步,适用于多种应用场景,如分布式系统、灾难恢复和数据仓库更新等。 ... [详细]
  • 触发器是数据库中一种特殊类型的存储过程,其执行依赖于预定义的事件,而非直接调用。在数据库管理中,触发器主要用于实现数据完整性、自动化日志记录及复杂业务规则的执行。当对数据库中的表、视图等对象进行插入、更新或删除操作时,系统将自动激活相关的触发器,以确保数据的一致性和安全性。此外,通过合理设计和优化触发器,还可以显著提升数据库性能和响应速度。 ... [详细]
  • MySQL 8.0 中的二进制日志格式详细解析及其官方文档参考。本文介绍了MySQL服务器如何使用不同的日志记录格式来记录二进制日志,包括早期版本中基于SQL语句的复制机制(即基于语句的日志记录)。此外,还探讨了其他日志记录方式,如基于行的日志记录和混合日志记录模式,并提供了配置和管理这些日志格式的最佳实践。 ... [详细]
  • 在使用 PHP 通过 SSL 安全连接到 MySQLi 数据库服务器时,遇到了一些技术难题。我的环境包括一个 Web 服务器和一个数据库服务器,两者均使用 OpenSSL 生成了证书。尽管证书内容一致,但在尝试从 Web 服务器使用 `mysql` 命令进行连接时,仍然遇到了问题。为了确保连接的安全性和稳定性,需要进一步检查证书配置和 PHP 的 SSL 设置,以排除潜在的配置错误或兼容性问题。 ... [详细]
  • 本文提供了Oracle数据库日常管理和操作的实用指南,详细介绍了如何创建表的SQL代码示例,例如:`CREATE TABLE test (id VARCHAR2(10), age NUMBER);` 同时,还涵盖了数据表的基本维护、索引优化及常见问题解决策略,旨在帮助数据库管理员提升工作效率和数据管理能力。 ... [详细]
  • 本文探讨了Node.js Cluster模块在多核CPU环境下的应用及其性能测试。通过安装`async`包并利用Node.js自带的`http`和`cluster`模块,创建了一个名为`cluster.js`的文件,该文件根据系统CPU核心数动态生成多个工作进程,以实现负载均衡和提高应用性能。实验结果表明,使用Cluster模块能够显著提升高并发场景下的响应速度和处理能力。 ... [详细]
  • 在MySQL权限管理实践中,新安装的MySQL系统可能会遇到连接问题,如root用户无法访问。本文总结了相关解决方案,包括如何创建新账户(例如:用户名为test,密码为12),并详细介绍了权限分配和管理的策略,以确保系统的安全性和稳定性。 ... [详细]
  • 简介springboot开启事务很简单,只需要一个注解Transactional就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了 ... [详细]
  • SpringDataJPA是SpringBoot体系中约定优于配置的最佳实现,大大简化了项目中数据库的操作。从本课开始将会从JPA的由来开始讲解,什么是JPA、SpringBoot ... [详细]
  • Druid 连接池中出现 15 分钟延迟,疑似因 Socket 超时后重新建立连接所致
    2019独角兽企业重金招聘Python工程师标准背景在应用端通过mybatis的interceptor自定义Plugin拦截Executor,统计输出sql的执行耗时。今天生 ... [详细]
  • 我有一项服务,可以插入和更新表中的行。 当有人同时启动20个对该服务的 ... [详细]
  • 在 Asp.net 应用中,动态加载 DropDownList 控件的数据源是一项常见需求。本文探讨了如何高效地从数据库中获取数据,并实时更新下拉列表,确保用户界面始终与后台数据保持同步。通过使用 ADO.NET 和 LINQ to SQL 技术,开发者可以轻松实现这一功能,同时提高应用的性能和用户体验。文中还提供了代码示例和最佳实践,帮助开发者解决常见的数据绑定问题。 ... [详细]
  • 深入解析 SQL Server 中的聚合函数 SUM() 使用方法与技巧 ... [详细]
  • 在安装 Greenplum 的过程中,正确配置 `gpinitsystem_config` 文件是至关重要的一步。本文详细介绍了如何优化该文件,以确保数据库集群的高效初始化和稳定运行。通过调整关键参数,用户可以更好地适应不同的硬件环境和业务需求,从而提升系统的整体性能。 ... [详细]
  • 本文详细介绍了在 CentOS 6.7 x64 环境下配置 MySQL 5.6.29 的 GTID 主从复制方法。主库 IP 为 192.168.0.65,备库 IP 为 192.168.0.66。通过逐步指导,帮助读者顺利实现高可用性和数据一致性。 ... [详细]
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社区 版权所有