MySQL 双主复制的优缺点与实现方法

yumo66610个月前 (05-09)技术文章156

MySQL 双主复制是一种高可用性解决方案,它可以在两台主库之间同步数据,这样就有了两个可以进行写操作的数据库。

MySQL 双主复制的优点:

可用性提高:双主复制能够保证在一台主机故障时另一台主机可以立即接管工作,提高了系统的可用性。
负载均衡:双主复制可以将读请求分散到两台主机上,从而提高系统的读性能。
数据安全性:双主复制能够保证数据在两台主机上同步,从而提高数据的安全性。

MySQL 双主复制的缺点:

复杂性增加:双主复制相对于单主复制来说更加复杂,需要额外的配置和维护。
性能影响:双主复制需要在两台主机之间进行数据同步,这会对系统的写性能产生影响。
冲突处理:双主复制需要解决处理两台主机之间的写冲突问题, 当双主都写入了同一条数据时, 需要人工干预或者采用特定策略解决。

前提条件

下面是实现 MySQL 双主复制的步骤:

在两台服务器上分别安装 MySQL,并配置好网络环境。确保两台服务器能互相通信。

在两台服务器上都创建复制帐号,允许对方连接。在两台服务器上分别执行以下命令:

CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';

在主库1上执行 FLUSH TABLES WITH READ LOCK 命令,锁定数据库。这将阻止在备份期间进行任何数据修改。

FLUSH TABLES WITH READ LOCK;

在主库1上执行 SHOW MASTER STATUS 命令,记录下当前的 binlog 文件名和位置。用于在主库2上配置复制。

SHOW MASTER STATUS;

在主库2上执行 CHANGE MASTER TO 命令,将主库1的信息配置到主库2上。

CHANGE MASTER TO MASTER_HOST='host1',MASTER_USER='repl_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=123;

在主库2上执行 START SLAVE 命令,启动主库2的复制进程。

START SLAVE;

在主库1上执行 UNLOCK TABLES 命令,解锁数据库。

UNLOCK TABLES;

在主库2上执行 FLUSH TABLES WITH READ LOCK 命令,锁定数据库。


FLUSH TABLES WITH READ LOCK;

在主库2上执行 SHOW MASTER STATUS 命令,记录下当前的 binlog 文件名和位置。

SHOW MASTER STATUS;

在主库1上执行 CHANGE MASTER TO 命令,将主库2的信息配置到主库1上。


CHANGE MASTER TO MASTER_HOST='host2',MASTER_USER='repl_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=456;

在主库1上执行 START SLAVE 命令,启动主库1的复制进程。



START SLAVE;

在主库2上执行 UNLOCK TABLES 命令,解锁数据库。

UNLOCK TABLES;

使用 SHOW SLAVE STATUS 命令查看两台主库的复制状态。

SHOW SLAVE STATUS;

配置两台主库的监控,比如使用 Nagios/Zabbix 监控主库状态,在主库出现故障时自动切换到另一台主库。

注意,在双主复制中,两台主库都可以进行读写操作,所以需要注意冲突的问题。

另外,这些步骤中的很多细节都需要根据实际环境进行调整。双主复制需要两台MySQL都是5.7版本或更高版本,且需要打开gtid模式。

相关文章

这份MySQL全面手册,受喜爱程度不输任何大厂笔记

MySQL是目前最流行的开放源代码数据库管理系统,全世界的装机量已超过400万台。本书详细介绍了如何使用可定制的关系数据库管理系统支持健壮的、可靠的、任务关键的应用程序。今天给大家分享的是一份MySQ...

全程软件测试(六十八):数据库MySQL从零开始入门—读书笔记

第一章 数据库概述1.1、数据库的好处将数据持久化到本地提供结构化查询功能1.2、数据库的常见概念DB:数据库,存储数据的仓库DBMS:数据库管理系统,又称为数据库软件或者数据库产品,用于创建和管理数...

MySQL、Oracle、SqlServer的区别(oraclemysqlsqlserver三者的区别)

鉴于和数据库打交道日益频繁,遂决定写一篇关于Oracle、SqlServer、MySQL区别的个人观点。MySQL是大学时的主要学习对象,但刚参加工作时转到了SqlServer,现在主要接触的是Ora...

MySQL 5.7 新特性大全和未来展望(mysql五个特性)

本文转自微信公众号: 高可用架构作者:杨尚刚引用美图公司数据库高级 DBA,负责美图后端数据存储平台建设和架构设计。前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存...

MySQL数据库入门(四)数据类型简介

在MySQL中数据类型有以下五种:数字整数:常用的有2种,一是int型,int型最多可以表示10位数字(无符号的4开头,有符号的2开头;二是tinyint unsigned,用来表示年龄(值范围是0-...

运维角度浅谈:MySQL数据库优化(mysql优化技巧实战)

本博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段:1、数据库表设计项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构...