Mysql-数据库集群的搭建以及数据库的维护-程序员宅基地

技术标签: 备库重搭  mysql集群模式  mysql  数据库  adb  

一、数据库的维护

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)结果如下

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42795092/article/details/137555017

智能推荐

NeurIPS 2023 | FedFed:特征蒸馏应对联邦学习中的数据异构-程序员宅基地

文章浏览阅读75次。作者 |杨智钦单位 |北京航空航天大学来源|将门创投在本文中,我们提出了一种新的即插即用的联邦学习模块,FedFed,其能够以特征蒸馏的方式来解决联邦场景下的数据异构问题。FedFed首次探索了对数据中部分特征的提取与分享,大量的实验显示,FedFed能够显著地提升联邦学习在异构数据场景下的性能和收敛速度。论文标题:FedFed: Feature Distillation against..._about [neurips 2023] "fedfed: feature distillation against data heterogeneit

《Ray Tracing in One Weekend》——Chapter 1: Output an image_c++如何输出图片-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏3次。《Ray Tracing in One Weekend》目录 第一部分:学习总结问题二:用C++输出第一张图片 第二部分:原文截图《Ray Tracing in One Weekend》目录_c++如何输出图片

spring-cloud-kubernetes与k8s的configmap_spring-cloud-starter-kubernetes-config maven-程序员宅基地

文章浏览阅读8k次,点赞7次,收藏9次。spring-cloud-kubernetes-config是spring-cloud-kubernetes框架下的一个库,用于将kubernetes的configmap作为配置文件,提供给springboot应用_spring-cloud-starter-kubernetes-config maven

BZOJ2753: [SCOI2012]滑雪与时间胶囊(最小生成树)-程序员宅基地

文章浏览阅读307次。传送门题意: n个有高度的点和m条边,边只能从高点到低点走,求最小树形图??题解: 最小生成树。 朱刘算法求最小树形图只能得70分,考虑更高效的算法。首先对图分层,发现低层节点对高层答案没有影响,考虑先处理高层的边。现在假设已经处理了高层的所有边,对于本层的边,其实就是一颗最小生成树。因为高层连向本层的边看做双向边没有任何影响。那么直接把边按照层数排序,第二关键字用权值排序即可。#includ

PySide:Python语言在GUI开发中的利器-程序员宅基地

文章浏览阅读1.3k次。python GUI开发中PySide2、PySide6及PyQt间区别,python版本要求,官方文档支持等_pyside

opencv+python Hough变换的基本原理_opencv python hough_multi_scale-程序员宅基地

文章浏览阅读3.3k次,点赞4次,收藏19次。Hough变换思想(参数空间变换):在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。在实际应用中,y=kx+b形式..._opencv python hough_multi_scale

随便推点

vs2019安装和使用教程(详细)-程序员宅基地

文章浏览阅读10w+次,点赞565次,收藏2.9k次。vs2019安装和使用教程(详细)_vs2019

【渝粤题库】陕西师范大学201941 Java程序设计 作业(专升本)_which of the following are correct? _____ a. strin-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏2次。《JAVA程序设计》作业一、选择题编译HelloWorld.java的正确命令是:java HelloWorld.class B)java HelloWorld.java C)javac HelloWorld.java正确运行HelloWorld.java的正确命令是:java HelloWorld B)javac HelloWorld.java C)javac HelloWorld.class下面程序代码,使用多行注释正确的是:A) // int k=9;// int j=8_which of the following are correct? _____ a. string[] list = new string{

Zynq UltraScale+ MPSoC:嵌入式设计 UG1209 视频教程_zynq ultrascale+ mpsoc 嵌入式设计方法指南-程序员宅基地

文章浏览阅读812次。注:本文转自赛灵思中文社区论坛,源文链接在此。本文原作者为XILINX工程师。以下为个人译文,仅供参考,如有疏漏之处,还请不吝赐教。本篇博文提供了一份视频列表,用于展示 (UG1209) 中的教程。这些视频是使用 Vivado Design Suite 2019.1 版和赛灵思软件开发套件 (SDK) 创建的。其中所含示例均为针对 Zynq UltraScale+ MPSoC ZCU102 Rev1 评估板的示例。视频 1 演示了如何使用 ZCU102 评估板来运行应用。虽然大部分视频都使_zynq ultrascale+ mpsoc 嵌入式设计方法指南

浅谈拉格朗日插值法_y_j_gi-程序员宅基地

文章浏览阅读284次。拉格朗日插值法_y_j_gi

hbase性能调试 转-程序员宅基地

文章浏览阅读263次。_hfile.format.version

MIT算法导论——第五讲.Linear Time Sort_linear time sorting-程序员宅基地

文章浏览阅读896次。本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记。所有内容均来自MIT公开课Introduction to Algorithms中Charles E. Leiserson和Erik Demaine老师的讲解。(http://v.163.com/special/opencourse/algorithms.html)第五节-------线性时间_linear time sorting

推荐文章

热门文章

相关标签