Mysql-数据库集群的搭建以及数据库的维护

news2024/12/23 22:45:31

一、数据库的维护

1.数据库的备份与恢复

1)备份指定数据库

#mysqldump -u root -p zx > ./zx.dump

2)备份所有库

#mysqldump -u root -p --all-databases > ./all.dump

3)恢复所有库

#mysql -u root -p < ./all.dump

4)恢复指定数据库

#mysql -u root -p test <./test.dump(*******)

注:要恢复指定数据库,实际上是恢复该数据库下所有的表。因此,该数据库必须存在

2.执行数据库维护

1)ANALYZE TABLE 用来检查表的键是否正确:(用于维护索引)

 analyze table orders;

2)CHECK TABLE 用来检查表的各种问题 check table orders;

3)REPAIR TABLE 用来修复表 repair table orders;

3.检查日志文件

1)MariaDB 日志文件 /var/log/mariadb

2)DBMS 内部日志

binlog:二进制日志,记录的 DBMS 上所有的 DDL 和 DML 语句

errlog:错误日志,记录 DBMS 上发生的错误慢查询日志

3)MariaDB 配置文件所在路径:/etc/my.cnf.d

MariaDB 配置文件模板所在路径:/usr/share/mysql

MariaDB 数据库文件所在路径:/var/lib/mysql

4.性能提升

查看数据库相关参数的设定

show variables;

二、三种常见的 MariaDB 集群2.3 用的比较多

1.DRBD+Keepalived+MariaDB

DRBD 为块同步复制技术,采用主从双机(一主一备)配置。备机会从主机同步主机数据。缺点是会发生脑裂

2.Haproxy+Galera+MariaDB Galera 为多主多活

注:Galera 同步复制与其他方式同步复制的区别其他集群的节点同步方式为辅节点读取主节点的事务日志,将日志解析为代码再在本机上执行。

Galera 集群是主节点上的事务处理封装为一个单元,并将该单元发往各节点,经过验证后各节点各自执行该事务,完成数据或事务的同步。

工作原理:a:备份一个节点的数据库内容,然后到其他节点上进行恢复

          b:在其中一个节点上对数据库进行操作,这些修改就会被封装为write_set 然后再发往集群中的其他节点。

          c:其他节点接受后先验郑是不是本集群发送来的,如果确定是本集群发送过来的那么根据write-set 在自己上面执行,从而使集群内的数据库内容保持一致性。

3.mariadb 本身的主从集群

工作原理:a:备份主机的数据库,然后到备机上进行恢复

          b:让备机自动读取主机的binlogs内容

          c:把备机读取的binlogs内容恢复为sql语句,并执行

从而上述进行了之后 主机就和备机的数据库内容保持一致了

三、集群搭建

1.为什么要使用集群

MariaDB 作为 Mysql 的一个分支,在开源项目中已经广泛使用,例如大热的 openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的。

2 .MariaDB 集群的功能和原理

1)使用软件:MariaDB-Galera-Cluster

MariaDB 集群是 MariaDB 同步多主机集群。它仅支持 XtraDB/ InnoDB 存储引擎。

2)主要功能:同步复制

真正的 multi-master,即所有节点可以同时读写数据库自动的节点成员控制,失效节点自动被清除新节点加入数据自动复制真正的并行复制,行级用户可以直接连接集群,使用感受上与 MySQL 完全一致

3)实现原理:

Galera 集群的复制功能基于 Galeralibrary 实现,为了让 MySQL 与 Galera library 通讯,特别针对 MySQL 开发了 wsrep API。Galera 插件保证集群同步数据,保持数据的一致性,靠的就是可认证的复制:

当客户端发出一个 commit 的指令,在事务被提交之前,所有对数据库的更改都会被 write-set 收集起来,并且将 write-set 纪录的内容发送给其他节点。 write-set 将在每个节点进行认证测试,测试结果决定着节点是否应用 write-set 更改数据。

如果认证测试失败,节点将丢弃 write-set;如果认证测试成功,则事务提交。

3.如何搭建集群环境

1)准备好实虚拟机(2 台以上)

首先要保证真实机可以连接到网络。建议将虚拟机主机名改为指定的主机名(如:zx,zx2 等)

2)配置好本地 yum 源,注意确保本机已经安装了 rsync。

3)配置网络源,从指定的源地址下载安装 MariaDB-Galera-server

4)从真实机导入两个目录,并放在/mnt/mysql 中

#cd /etc/yum.repos.d/

#vim sql.repo

[s]

name = sql

baseurl = file:///mnt/mysql

gpgcheck=1

enabled=0

#yum --enablerepo=s -y install MariaDB-Galera-server

注:确保 yum 源配置文件准确无误(特别注意 yum 源的名称要与安装命令中的名称保持一致)

4)安装好软件后,编辑配置文件

配置文件位置:/etc/my.cnf.d/server.cnf

修改以下内容:

19行:wsrep_provider=/usr/lib64/galera/libgalera_smm.so(节点间互相通信)

wsrep-enabled MySQL (前身是MySQL/Galera cluster) 可使用wsrep 复制提供者如Galera 到一个集群中。wsrep API 是复制接口的抽象层,支持全局事务 ID、真正的多主节点复制、冲突检测和并行处理。对触发器和存储过程来说是透明的。目前只支持 InnoDB 存储引擎和 DDL命令。

上述语句中 wsrep 复制提供者为 libgalera_smm.so( 实际上我们安装MariaDB-Galera-server,就是为了获取这个模块)

这一行指定了由哪个模块负责复制数据。

20.行:wsrep_cluster_address="gcomm://192.168.1.2,192.168.1.3"

这一行指定了集群的所有节点

21行:binlog_format=row

二进制日志:只是跟修改相关的操作,可以理解为一个重做日志,用于复制的基本凭据; MySQL 记录二进制日志的格式为 row,即:不记录每条 sql 语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或 function、或 trigger 的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是 alter table 的时候会让日志暴涨。

这一行指定了二进制日志记录的格式(日志格式为 bin_log,存储格式为 row)

22行:default_storage_engine=InnoDB

这一行指定了默认的数据库存储引擎为 InnoDB

23行:innodb_autoinc_lock_mode=2

这一行是专门用来在使用 auto_increment 的情况下调整锁策略的, 0 (全部使用表锁), 1 (默认)(可预判行数时使用新方式,不可时使用表锁),2 (全部使用新方式,不安全,不适合 replication)

24 行:bind-address=0.0.0.0代表所有ip

这一行绑定了监听的 IP 地址

增加以下内容:

wsrep_cluster_name="test_cluster"(指定 Cluster 名字) wsrep_node_address="192.168.1.2"(当前节点ip) (指定 wsrep 节点地址,这里指当前节点)

wsrep_sst_method=rsync (复制方式为 rsync)

5)启动集群:

#/etc/rc.d/init.d/mysql bootstrap (主节点运行)

6)配置 mysql 的基本设置

#mysql_secure_installation 初始化mysql

7)配置其他节点( host ntp etc/yum.repos.d/sql.repo  下载 MariaDB-G alera-server vim /etc/my.cnf.d/server.cnf配置文件差不多 除了ip

8)在节点处启动 mysql #systemctl start mysql

4.验证集群是否搭建成功

1)#mysql -u root -p >show status like 'wsrep_%';

在显示结果中:wsrep_connected = on 链接已开启 wsrep_cluster_size =2 集群中节点的数量

wsrep_incoming_addresses =192.168.1.2:3306,192.168.1.3:3306 集群中节点的访问地址

2)在其中一个节点处创建一个数据库,在其他节点查看是否可见

3)结果如下

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SqlServer快速导出数据库结构的方法

1、查询出所有的表 SELECT name, id From sysobjects WHERE xtype u ORDER BY name ASC 2、根据表名查询出表结构 select syscolumns.name as "列名", systypes.name as "数据类型", syscolumns.length as "数据长度", sys.extended_prope…

【数据结构】考研真题攻克与重点知识点剖析 - 第 7 篇:查找

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

Redis中的集群(三)

集群 槽指派 记录节点的槽指派信息。 clusterNode结构的slots属性和numslot属性记录了节点负责处理哪些槽: struct clusterNode { // ... unsigned char slots[16384/8];int numslots; // ... }slots属性是一个二进制位数组(bit array)&#xff0c;这个数组的长度位16384/8…

CLI的使用与IOS基本命令

1、实验目的 通过本实验可以掌握&#xff1a; CLI的各种工作模式个CLI各种编辑命令“?” 和【Tab】键使用方法IOS基本命令网络设备访问限制查看设备的相关信息 2、实验拓扑 CLI的使用与IOS基本命令使用拓扑如下图所示。 3、实验步骤 &#xff08;1&#xff09;CLI模式的切…

《前端面试题》- CSS - CSS选择器的优先级

行内样式1000 d选择器100 属性选择器、class或者伪类10 元素选择器&#xff0c;或者伪元素1 通配符0 参考网址&#xff1a;https://blog.csdn.net/jbj6568839z/article/details/113888600https://www.cnblogs.com/RenshuozZ/p/10327285.htmlhttps://www.cnblogs.com/zxjwlh/p/6…

【机器学习】一文掌握机器学习十大分类算法(上)。

十大分类算法 1、引言2、分类算法总结2.1 逻辑回归2.1.1 核心原理2.1.2 算法公式2.1.3 代码实例 2.2 决策树2.2.1 核心原理2.2. 代码实例 2.3 随机森林2.3.1 核心原理2.3.2 代码实例 2.4 支持向量机2.4.1 核心原理2.4.2 算法公式2.4.3 代码实例 2.5 朴素贝叶斯2.5.1 核心原理2.…

mybatis-plus与mybatis同时使用别名问题

在整合mybatis和mybatis-plus的时候发现一个小坑&#xff0c;单独使用mybatis&#xff0c;配置别名如下&#xff1a; #配置映射文件中指定的实体类的别名 mybatis.type-aliases-packagecom.jk.entity XML映射文件如下&#xff1a; <update id"update" paramete…

骑砍2霸主MOD开发(2)-基础开发环境搭建

一.骑砍2霸主程序架构 二.骑砍2霸主C#接口层代码查看 1.C#反编译工具dnspy下载: 2.骑砍2霸主游戏引擎接口查看: 例如IMBAgent interface接口: #调用TaleWorlds.Native.dll中的函数 [EngineMethod("get_movement_flags", false)] uint GetMovementFlags(UIntPtr agen…

MySQL高级(索引语法、创建索引、查看索引、删除索引)

创建索引 create [unique | fulltext] index index_name on table_name (index_col_name,...); 查看索引 show index from table_name; 删除索引 drop index index_name on table_name; 案例演示&#xff1a; 先来创建一张表 tb_user&#xff0c;并且查询测试数据。 cre…

OLAP在线实时 数据分析平台

随着业务的增长&#xff0c;精细化运营的提出&#xff0c;产品对数据部门提出了更高的要求&#xff0c;包括需要对实时数据进行查询分析&#xff0c;快速调整运营策略&#xff1b;对小部分人群做 AB 实验&#xff0c;验证新功能的有效性&#xff1b;减少数据查询时间&#xff0…

easyExcel - 动态复杂表头的编写

目录 前言一、情景介绍二、问题分析三、代码实现方式一&#xff1a;head 设置方式二&#xff1a;模板导出方式三&#xff1a;自定义工具类 前言 Java-easyExcel入门教程&#xff1a;https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如何使用 easyExcel&…

Java基于微信小程序的日语学习小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

IMU状态预积分噪声模型

IMU状态预积分噪声模型 IMU状态预积分噪声模型旋转部分速度部分平移部分总结 IMU状态预积分噪声模型 根据之前的推导&#xff0c;得出了IMU状态预积分的测量模型&#xff0c;同时得到了噪声部分的定义公式&#xff0c;其中噪声部分罗列如下&#xff1a; 由于噪声项的定义比较复…

51单片机+TN901非接触式红外测温设计论文与源码PCB等资料

1、摘要 温度测量技术应用十分广泛&#xff0c;而且在现代设备故障检测领域中也是一项非常重要的技术。但在某些应用领域中&#xff0c;要求测量温度用的传感器不能与被测物体相接触&#xff0c;这就需要一种非接触的测温方式来满足上述测温需求。本论文正是应上述实际需求而设…

【2024】Rancher的安装与介绍

———————————————————————————— 记录一下rancher的学习与使用过程 本部分内容包括rancher的介绍、特点、与k8s关系和部署等内容 ———————————————————————————— Rancher是什么&#xff1f; 简单来说&#xff0c;Ranc…

RabbitMQ如何保证消息的幂等性???

在RabbitMQ中&#xff0c;保证消费者的幂等性主要依赖于业务设计和实现&#xff0c;而非RabbitMQ本身提供的一种直接功能。 在基于Spring Boot整合RabbitMQ的场景下&#xff0c;要保证消费者的幂等性&#xff0c;通常需要结合业务逻辑设计以及额外的技术手段来实现。以下是一个…

由近期 RAGFlow 的火爆看 RAG 的现状与未来

4 月 1 日&#xff0c;InfiniFlow &#xff08;英飞流&#xff09;的端到端 RAG 解决方案 RAGFlow 正式开源&#xff0c;首日即获得了 github 千星&#xff0c;目前已接近 3000 star。在这之前&#xff0c;InfiniFlow 还开源了专门用于 RAG 场景的 AI 原生数据库 Infinity&…

Emacs之实现复制当前已打开文件buffer(一百三十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

网络安全---非对称数据加密签名验证

一、课题描述 三位同学一组完成数据的非对称加密和数字签名验证传输。 三位同学分别扮演图中 Alice、Bob 和 CA 三个角色&#xff0c;Bob 和 Alice 从 CA 中获得数字证书、Bob 向 Alice 发送秘密发送一段加密并签名后的信息&#xff0c;Alice 获取 Bob 发送的加密信息&#x…

LeetCode 994—— 腐烂的橘子

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 1.记录下初始新鲜橘子的位置到 notRotting&#xff0c;我们按照行把二维数组拉成一维&#xff0c;所以&#xff0c;一个vector 就可以实现了&#xff1b;2.如果没有新鲜橘子&#xff0c;那么第 0 分钟所有橘子已经…