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

一、数据库的维护

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 , zx 2 等)

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

相关推荐
71-31 天前
MySQL的安装和卸载组件
笔记·学习·mysql
雷工笔记1 天前
Navicat Premium 17 软件安装记录
数据库
wenlonglanying1 天前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
数据库小组1 天前
10 分钟搞定!Docker 一键部署 NineData 社区版
数据库·docker·容器·database·数据库管理工具·ninedata·迁移工具
爬山算法1 天前
MongoDB(38)如何使用聚合进行投影?
数据库·mongodb
l1t1 天前
Deep Seek总结的APSW 和 SQLite 的关系
数据库·sqlite
Pocker_Spades_A1 天前
基于代价模型的连接条件下推:复杂SQL查询的性能优化实践
数据库·sql·性能优化
huan1991101 天前
Python使用PyMySQL操作MySQL完整指南
数据库·python·mysql
双星系统1 天前
ABB机器人DSQC 679示教器电缆选型与故障排查(附原装型号对照表)
网络·数据库·机器人·工业4.0·工业机器人
TDengine (老段)1 天前
TDengine 视图功能使用
大数据·数据库·servlet·时序数据库·tdengine·涛思数据