【数据库集群】之一主一从

发布时间:2024年01月14日

一、mysql集群概念

集群架构设计的三个维度:可用性、扩展性、一致性
所谓mysql集群就是把多台数据库集成在一起提供数据库服务。
集群的目的:
负载均衡:解决高并发
高可用HA:服务可用性
远程备灾:数据有效性

对于数据库之上的业务层来说,基于 MySQL 的主从复制集群,单点写入 Master ,在 event 同步到 Slave 后,读逻辑可以从任何一个 Slave 读取数据,以读写分离的方式,大大降低 Master 的运行负载,同时提升了 Slave 的资源利用。

二、mysql集群环境配置实验

1、全新的服务器安装全新的数据库(可以在vm中克隆比较快,克隆的服务器要没有安装好数据库,实验环境:mysql80)

yum install mysql-community-server --downloadonly
find / -iname “mysql” 查找在哪个位置,在/var/cache/dnf/下

解释:从mysql官网下载rpm,yum下载,为了节约时间,可以只下载先不安装,然后把下载的安装包传到其他服务器去安装下一台数据库。

出现这些软件包
[root@localhost packages]# ll
total 59700
-rw-r--r--. 1 root root  3669387 Dec 17 01:27 mysql-community-client-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  1429852 Dec 17 01:27 mysql-community-client-plugins-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   570718 Dec 17 01:27 mysql-community-common-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  2381873 Dec 17 01:28 mysql-community-icu-data-files-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  1518324 Dec 17 01:28 mysql-community-libs-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root 51552173 Dec 17 01:29 mysql-community-server-8.0.35-1.el9.x86_64.rpm
[root@localhost packages]# pwd
/var/cache/dnf/mysql80-community-22d3d3ecd3d92106/packages

[root@localhost packages]# scp ./* root@192.168.85.134:~/

传到对方服务器去安装

[root@localhost packages]# yum install *.rpm 安装mysql

自此两台数据库安装完成。

2、配置域名解析

[root@localhost ~]# vim /etc/hosts
192.168.85.133 master
192.168.85.134 slave
[root@localhost ~]# scp /etc/hosts 192.168.85.134:/etc/hosts

3、一主一从服务器的配置:

一、主服务器的配置:

给主服务器创建库表,插入一点数据。

mysql> create database master;
mysql> create table master.master_table(
    -> name varchar(10));
mysql> insert into master.master_table values("111");

主服务器开启二进制日志并设置好id,后来用来在集群中区分数据库。

[root@localhost ~]# vim /etc/my.cnf
log_bin
server-id=1
[root@localhost ~]# systemctl restart mysqld

创建复制用户(从服务器要想从主服务器去拷贝数据是需要身份的):

mysql> create user ‘rep’@‘192.168.85.%’ identified by ‘Liang@123’;
mysql> grant replication slave,replication client on . to
‘rep’@‘192.168.85.%’;

备份Master数据库中的数据:

[root@localhost ~]# mysqldump -uroot -pLiang@123 --all-databases --single-transaction --source-data=2 --flush-logs > date +%F-mysql-all.sql
在这个备份的过程会产生新的数据,去模拟一下插入数据,,后面用日志备份。

二、从服务器的配置:

注意:关闭防火墙和selinux
在从服务器测试是否能连接到主服务器的数据库:

[root@localhost ~]# mysql -urep -pLiang@123 -h master
成功

设置数据库序号,在集群中区分数据库

[root@localhost ~]# vim /etc/my.cnf
log_bin
server-id=2
[root@localhost ~]# systemctl restart mysqld

手动同步数据:

mysql>set sql_log_bin=0 设置临时二进制文件不启用

mysql> source /root/2023-12-17-mysql-all.sql; 还原数据库在集群开始之前的数据

开始设置主服务:

mysql> change master to
master_host=‘master’,master_user=‘rep’,master_password=‘Liang@123’,master_log_file=‘localhost-bin.000003’,master_log_pos=157;

这条命令配置好后,从服务器就会主动向主服务器去拷贝新数据。

启动从设备:
mysql> start slave;

这个时候这个实验算是完成了,主服务的数据一旦发生改变,从服务器的数据库也会更着更新😁

查看启动状态:
mysql> show slave status\G;

     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    都是yes就非常欧克。

4、一主一从服务器的配置(自动协商二进制数据的位置)

这种不需要手动去指定从服务器学习新增主服务器的二进制数据位置,而是自动协商。
跟上面的实验差不多。
区别就是:
主从服务器都需要启动二进制日志,服务器ID,GTID

vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
从服务器也是一样,只是修改哈server-id就行

然后在从服务器中修改这个
mysql> change master to
master_host='master',master_user='rep',master_password='Liang@123',master_auto_position=1;

mysql> start slave;
这个实验就完成了,跟上个实验差不多。

文章来源:https://blog.csdn.net/qq_62331653/article/details/135044566
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。