mysql主从 系统存储(10)——MySQL简单主从方案及暴露的问题

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

总体来说注意以下几点

  1. slave上查询尽量用到索引

  2. master my.cnf 配置优化

  3. 比主从更可靠的是drbd+keepalive,hearbeat好像更专业点

  4. slave同步过滤  过滤user表,看效果

#replicate-wild-ignore-table =performance_schema.%


gtid

[MySQL 5.6] GTID内部实现、运维变化及存在的bug

http://mysqllover.com/?p=594


gtid-mode用来设置是否开启GTID功能,如果要开启GTID功能,需要同时开启log-bin和log_slave_updates功能,另外还需要开启enforce_gtid_consistency功能。gtid_mode参数可以设置为on、off、upgrade_step_1、upgrade_step_2四种值,其中upgrade_step_1和upgrade_step_2是给将来mysql可能的新功能预留的,对当前的myql没有任何意义。同时,mysql建议在mysql_upgrade的时候,关闭gtid_mode功能和enforce_gtid_consistency功能,因为Mysql在upgrade期间可能会操作非事务的MyISAM存储引擎表,会引起报错

SHOW CREATE TABLE mysql.gtid_executed\G

select @@global.gtid_executed\G

将GTID值持久化保存在一张InnoDB表中,并与用户事务一起进行提交,从而实现数据的一致性

START TRANSACTION;


# user statement

......

INSERT INTO mysql.gtid_executed VALUES (...)

END;

需要注意的是表mysql.gtid_executed是在主服务器和从服务器上有进行更新的,而表slave_relay_log_info仅在从服务器上更新

MySQL 5.7对于表mysql.gtid_executed的更新策略也有些不同,如果没有主服务器没有开启log_bin或者从服务器没有开启log_slave_updates,其会每一个事物更新表gtid_executed,这样服务器重启后可以快速知道当前服务器执行到的GTID位置。因此,用户可能在服务器上看到类似如下的内容

select * from mysql.gtid_executed;

select thread_id,thread_os_id,name,processlist_command,processlist_state from threads where name like '%compress%'\G



参考http://blog.csdn.net/yinwenjie/article/details/52935140

因为主从现在在用,所以关注一下

工作原理

这里写图片描述

MySQL一主多从搭建方式

这里写图片描述

master my.cnf

# my.cnf文件中没有涉及Replicaion机制的配置信息,就不在这里列出了

......

# 开启日志

log_bin


# 以下这些参数会在后文进行说明  (红色参数要特别注意)

sync_binlog=1 

binlog_format=mixed

binlog-do-db=qiang

binlog_checksum=CRC32

binlog_cache_size=2M

max_binlog_cache_size=1G

max_binlog_size=100M


# 必须为这个MySQL服务节点设置一个集群中唯一的 server id信息

server_id=140

# 只用MySQL客户端,都可以进行设置:

# 这里我们直接使用root账号进行同步,但是生产环境下不建议这样使用

> grant replication slave on *.* to root@192.168.61.141 identified by '123456'


# 通过以下命令,可以查看设置完成后的Master节点工作状态

> show master status;

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

| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| kp2-bin.000002 |      404 | qiang        |                  |                   |

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


slave my.cnf

# my.cnf文件中没有涉及Replicaion机制的配置信息,就不在这里列出了

......

# 开启日志

log-bin


sync_relay_log=1


# 必须为这个MySQL服务节点设置一个集群中唯一的server id信息

server_id=142

......


# 请注意这里设置的用户名和密码信息要和Master上的设置一致

# 另外master log file所指定的文件名也必须和Master上使用的日志文件名一致

> change master to master_host='192.168.61.140',master_user='root',master_password='123456', master_log_file='kp2-bin.000002',master_log_pos=120;


# 启动Savle同步

> start slave;


# 然后我们就可以使用以下命令查看salve节点的同步状态

> show slave status;

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

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.61.140

                  Master_User: root

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: kp2-bin.000002

          Read_Master_Log_Pos: 404

               Relay_Log_File: vm2-relay-bin.000002

                Relay_Log_Pos: 565

        Relay_Master_Log_File: kp2-bin.000002

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

                    ......

             Master_Server_Id: 140

                  Master_UUID: 19632f72-9a90-11e6-82bd-000c290973df

             Master_Info_File: /var/lib/mysql/master.info

                    SQL_Delay: 0

          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

                   ......

                Auto_Position: 0

一主多从方案的使用建议

一主多从的MySQL集群方式主要针对读密集型业务系统,其主要目标是将MySQL服务的读写压力进行分离。

使用固态硬盘作为MySQL服务的块存储基础,并使用RAID 10磁盘阵列作为硬件层构建方案——这是生产环境下单个MySQL服务节点的基本组成逻辑

这里写图片描述

应使用一个独立的Salve节点作为备用的Master节点,虽然这种方式不可作为异地多活方案的基础但可作为本地高可用方案的实现基础。当然,为了防止由于日志错误导致的备份失败,这个备份的Salve节点也可以采用MySQL Replicaion机制以外的第三方同步机制,例如:Rsync、DRBD。Rsync是笔者在工作实践中经常使用的,进行MySQL数据增量同步的方式,而DRBD的差异块同步方式是互联网上能够找到最多资料的方式:

这里写图片描述

在后续的文章中,我们还会专门讨论针对Master节点的集群调整方案,并且建议读者如何使用适合系统自身业务的高可用方案。例如使用Keepalived / Heartbeat进行主备Master节点的切换

这里写图片描述

复杂的统计查询需要专门的Salve节点进行支持。参与生产环境实时业务处理的任何MySQL服务节点,在这些服务节点上所运行的SQL查询应该尽可能简单,并且需要使用索引对检索进行支持。特别是数据量非常大的数据表,必须保证所有的检索操作都有索引提供支持,否则Table Full Scan的检索过滤方式不但会拖慢检索操作本身,还可能会明显拖慢其它的事务操作。通过MySQL提供的执行计划功能,技术人员能够很方便实现以上的要求。如果您的业务系统存在复杂的业务查询要求,例如周期性的财务流水报表,周期性的业务分组统计报表等,那么您最好专门准备一个(或多个)脱离实时业务的Salve节点,完成这个工作


需要业务系统开发人员投入的维护精力就会呈几何级增长。

高可用层面的问题:在MySQL一主多从集群中,虽然存在多个Salve节点(read业务性质节点),但是一般只存在一个Master节点(write业务性质节点)。某一个(或多个)Salve节点崩溃了,不会对整个集群造成太大影响(但可能影响上层业务系统的某一个子系统)




本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1870724,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
21天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
|
23天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
25 1
|
23天前
|
存储 Java 关系型数据库
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
17 0
|
1月前
|
存储 缓存 关系型数据库
MySQL的varchar水真的太深了——InnoDB记录存储结构
varchar(M) 能存多少个字符,为什么提示最大16383?innodb怎么知道varchar真正有多长?记录为NULL,innodb如何处理?某个列数据占用的字节数非常多怎么办?影响每行实际可用空间的因素有哪些?本篇围绕innodb默认行格式dynamic来说说原理。
834 6
MySQL的varchar水真的太深了——InnoDB记录存储结构
|
1月前
|
关系型数据库 MySQL 开发工具
MySQL5.7主从配置(Docker)
MySQL5.7主从配置(Docker)
728 0
|
1月前
|
SQL 关系型数据库 MySQL
解决MySQL主从慢同步问题的常见的解决方案:
解决MySQL主从慢同步问题的方法有很多,以下是一些常见的解决方案: 1. 检查网络连接:确保主从服务器之间的网络连接稳定,避免网络延迟或丢包导致数据同步缓慢。 2. 优化数据库配置:调整MySQL的配置参数,如增大binlog文件大小、调整innodb_flush_log_at_trx_commit等参数,以提高主从同步性能。 3. 检查IO线程和SQL线程状态:通过SHOW SLAVE STATUS命令检查IO线程和SQL线程的状态,确保它们正常运行并没有出现错误。 4. 检查主从日志位置:确认主从服务器的binlog文件和位置是否正确,避免由于错误的日志位置导致同步延迟。 5.
122 1
|
6天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
14天前
|
监控 安全 关系型数据库
基于vue2 + element +mysql医院不良事件上报系统源码
不良事件管理系统从时间上报、PDCA分析、事件整改、评估效果实行闭环管理和分析,满足医院追根溯源,全流程闭环管理,提高不良事件上报率,减少同类不良事件发生,提高医疗安全。通过报告不良事件,及时发现潜在的不安全因素
19 1
|
15天前
|
SQL 关系型数据库 MySQL
mysql主从同步出错解决办法
mysql主从同步出错解决办法
10 0