MySQL数据库主从集群搭建

快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)

MySQL数据库主从集群搭建

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。

作用:
1.做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
2.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
3.读写分离,使数据库能支撑更大的并发。
1–在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)。
2–在从服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)。

基于binlog的主从复制搭建

在这里插入图片描述

MySQL提供的主从复制结构种类很多,但主库和从库配置方式几乎相同,实战中较多使用的为一主一从,一主多从模式,以下就以一主多从模式为例进行配置

步骤

  1. 准备环境
    提前准备三台搭建了MySQL以及关闭防火墙的linux,并保证三台MySQL起始数据一致,实战中最好是新的mysql,方便操作,如果无法新建需使用数据备份方式将数据库数据恢复一致
  1. 数据库中创建并授权有主从复制权限账户
    mysql> grant replication slave,reload,super on . to ‘testslave’@‘%’ identified by ‘111111’;
    #监牢模式
    mysql> flush privileges;
    #注意:生产环境中密码采用高级别的密码,实际生产环境中将’%'换成具体的ip
    #注意:该用户理论上只需要主库存在,从库不需要创建,但在实战中,由于各种突发情况从库随时有可能升级为主库,所以所有从库也要创建
    replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
    super权限:允许用户使用修改全局变量的SET语句以及CHANGE MASTER语句
    reload权限:必须拥有reload权限,才可以执行flush [tables | logs | privileges]
  1. 主库的配置
    修改数据库配置文件 /etc/my.cnf
    保证主库以下两点
    1.binlog日志功能打开
    2.拥有server-id,并且在该主从复制集群中唯一

重启数据库

在这里插入图片描述

#进入主库查看当前主库状态
mysql> show master status\G
#注意:此次查询关注file和position两条信息,从库配置时使用

在这里插入图片描述

  1. 从库的配置
    修改数据库配置文件 /etc/my.cnf
    保证从库有唯一的server-id

重启数据库

在这里插入图片描述

进入从库
#查看从库当前监听主库状态
mysql> show slave status\G
Empty set (0.00 sec) #默认未开启监听

#执行如下命令
mysql> CHANGE MASTER TO
MASTER_HOST=‘192.168.240.134’, #主库ip
MASTER_USER=‘testslave’, #主库用户名
MASTER_PASSWORD=‘123456’, #主库密码
MASTER_LOG_FILE=‘mylog.000001’, #主库配置文件
MASTER_LOG_POS=154; #主库日志偏移量

#开启监听
mysql> start slave;

#查看从库当前监听主库状态
mysql> show slave status\G

在这里插入图片描述

  1. 其余从库做相同配置
  1. 配置完成后查看主从复制是否实现

原理

在这里插入图片描述

Mysql的主从复制中主要有三个线程:master(binlog dump thread)、slave(I/O thread 、SQL thread),Master一条线程和Slave中的两条线程。
master(binlog dump thread)主要负责Master库中有数据更新的时候,会按照binlog格式,将更新的事件类型写入到主库的binlog文件中。并且,Master会创建log dump线程通知Slave主库中存在数据更新,这就是为什么主库的binlog日志一定要开启的原因。
I/O thread线程在Slave中创建,该线程用于请求Master,Master会返回binlog的名称以及当前数据更新的位置、binlog文件位置的副本。然后,将binlog保存在 「relay log(中继日志)」 中,中继日志也是记录数据更新的信息。
SQL thread也是在Slave中创建的,当Slave检测到中继日志有更新,就会将更新的内容同步到Slave数据库中,这样就保证了主从的数据的同步。

总结:
步骤一:主库db的更新事件(update、insert、delete)被写到binlog
步骤二:从库发起连接,连接到主库
步骤三:此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库
步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log.
步骤五:从库还会创建一个SQL线程,从relay log里面读取内容,将更新内容写入到slave的db.

#查看线程
mysql> SHOW PROCESSLIST\G

在这里插入图片描述
在这里插入图片描述

基于GTID的主从复制搭建

全局事务标识:global transaction identifiers(GTID)
是用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置。

事务

事务:事务是数据库为保证SQL操作完整性而提供的一种机制。保证一个业务对应的多条SQL要么同时成功,要么同时失败。

事务的ACID
  • Atomicity 原子性 保证多条SQL要么同时成功,要么同时失败。
  • Consistency 一致性 事务执行前后,数据的状态是一致的。
  • Isolation 隔离性 并发访问相同数据时,不同用户是否可以看到另外一个用户未提交的数据。oracle默认只能看到提交后的。
  • Durability 持久性 一个事务一旦提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

步骤

  1. 准备三台mysql机器环境,并且创建mysql并赋予权限,同上
  1. 主库配置
    修改数据库配置文件 /etc/my.cnf
    保证以下四点
    log-bin=/opt/liuyh/log #定义server id master必写
    server-id=111 #开启binlog日志,master必写
    gtid_mode=ON #开启gtid
    enforce_gtid_consistency=1 #强制gtid

重启数据库
在这里插入图片描述
3. 从库配置
修改数据库配置文件 /etc/my.cnf
server-id=112
gtid_mode=ON
enforce_gtid_consistency=1

重启数据库

在这里插入图片描述

#进入从库
mysql> stop slave; #停止数据库监听
Query OK, 0 rows affected (0.01 sec)

#设置从库监听信息
mysql> change master to
master_host=‘192.168.240.134’, #主ip 地址 最好用域名
master_user=‘testslave’, #主服务上面创建的用户
master_password=‘123456’,
master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

#开启监听
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

#查看从库监听状态
mysql> show slave status\G

  1. 其余从库做相同配置
  1. 查看主从复制状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/216030.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LedControl 库说明文档

LedControl 库最初是为基于 8 位 AVR 处理器的 Arduino 板编写的。但由于该代码不使用处理器的任何复杂的内部功能,因此具有高度可移植性,并且应该在任何支持 和 功能的 Arduino(类似)板上pinMode()运行digitalWrite() 。 单个 M…

大金仓数据库:kingbase学习

kingbase学习 1.简介2. 安装3. 基础使用3.1 客户端连接3.2 表数据测试3.2.1 建表创建字段备注 3.2.2 数据写入测试3.2.2 查询测试json查询测试 4.springboot实战4.1 maven依赖4.2 连接配置4.3 mybatis-plus测试4.4 liquibase整合(1). 使用pg方式替换kingbase驱动上面(2). 修改j…

Windows核心编程 跨进程操作

目录 进程A拿到进程B句柄是否能用 句柄的权限 关于句柄表 跨进程使用句柄-继承 CreateProcess:bInheritHandles OpenProcess FindWinodw GetCurrentProcess 跨进程使用句柄-拷贝 跨进程操作内存 WriteProcessMemory VirtualProtectEx ReadProcessMemo…

ky10 server x86 auditd安装(日志审计系统)

概述 Auditd工具可以帮助运维人员审计Linux,分析发生在系统中的发生的事情。Linux 内核有用日志记录事件的能力,包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞(如多次失败的登录尝试,或者…

Mac Ubuntu双系统解决WiFi和WiFi 5G网络不可用问题

文章目录 设备信息1. Ubuntu WiFi不可用解决方式查看Mac的网卡型号根据网卡型号搜索获取到的解决方法查看WiFi名字问题参考链接 2. 解决WiFi重启后失效问题打开终端创建.sh脚本文件编辑脚本文件复制粘贴脚本修改脚本权限创建并编辑systemd service文件复制粘贴下文到systemd se…

Python可迭代对象排序:深入排序算法与定制排序

更多Python学习内容:ipengtao.com 排序在计算机科学中是一项基础而关键的操作,而Python提供了强大的排序工具来满足不同场景下的排序需求。本文将深入探讨Python中对可迭代对象进行排序的方法,涵盖基础排序算法、sorted函数的应用、以及定制排…

x-www-form-urlencoded的含义解释,getReader()和getParameter()的区别

1、x-www-form-urlencoded x-www-form-urlencoded是一种编码格式,它是一种常见的编码方式,用于在HTTP请求中 传输表单数据 。在这种编码方式下,表单数据被编码为URL格式,然后作为请求体(payload)发送。 需要…

《尚品甄选》:后台系统——结合redis实现用户登录

文章目录 一、统一结果实体类二、统一异常处理三、登录功能实现四、CORS解决跨域五、图片验证码六、登录校验功能实现6.1 拦截器开发6.2 拦截器注册 七、ThreadLocal 要求: 用户输入正确的用户名、密码以及验证码,点击登录可以跳转到后台界面。未登录的用…

【信息隐藏】信息隐藏基础

00 学习资源 0.1 推荐书籍 1.多媒体安全基础导论 复旦大学出版社 蓝皮; 2.隐写学原理与技术(赵险峰)科学出版社 蓝皮 0.2 视频课程 南开大学-信息隐藏技术(没看) 0.3 代码资源 GitHub一位phd:https:/…

JDBC编程方法及细节

JDBC(Java Database Connectivity)是Java编程语言用于连接和操作数据库的API(Application Programming Interface)。它为开发人员提供了一组Java类和接口,用于与各种关系型数据库进行通信。使用JDBC,开发人…

点大商城V2.5.3分包小程序端+小程序上传提示限制分包制作教程

这几天很多播播资源会员反馈点大商城V2.5.3小程序端上传时提示大小超限,官方默认单个包都不能超过2M,总分包不能超20M。如下图提示超了93KB,如果出现超的不多情况下可采用手动删除一些images目录下不使用的图片,只要删除超过100KB…

git提交报错error: failed to push some refs to ‘git url‘

1.产生错误原因 想把本地仓库提交到远程仓库,报错信息如下 git提交报错信息 error: src refspec master does not match any error: failed to push some refs to git url 错误原因: 我们在创建仓库的时候,都会勾选“使用Reamdme文件初始化…