mysql 8.0集群搭建(一主多从和多主多从)

news/2025/2/21 10:21:04/

MYSQL8.0集群搭建 一主多从

    • 基础环境
    • **1. 下载 mysql rpm包**
    • **2.主节点添加主从同步账户**
    • **3.开启二进制日志文件和添加server-id**
    • 4.登入主节点mysql重置偏移量
    • 5.注册从节点
    • 6.启动 启动所有从节点的slave
    • 7.多主多从模式,(此模式基于上边一主多重模式搭建,虚拟机搭建可创建快照方便回退)
    • **8.主节点添加配置**
    • 9.多主多从同步
    • 10.多主多从测试
    • 主从修复

基础环境

iphostname
192.168.30.201mc1
192.168.30.202mc2
192.168.30.203mc3
192.168.30.204mc4
内存 1G
Cpu 1C

1. 下载 mysql rpm包

wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
也可以通过以下链接下载
链接:https://pan.baidu.com/s/1w_XG7YETYHtAkMK9g5UXIA?pwd=WNYB
提取码:WNYB

#主从节点都要安装启动
yum localinstall mysql80-community-release-el7-5.noarch.rpm
yum clean all
yum makecache
yum install -y mysql-community-server
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld

在这里插入图片描述
在这里插入图片描述
修改ROOT密码

#查看root初始化密码grep "password" /var/log/mysqld.log

在这里插入图片描述

mysql -uroot -p'取到的初始化密码'
--修改密码策略
set global validate_password.policy=LOW;
set global validate_password.mixed_case_count=0;
set global validate_password.number_count=0; 
set global validate_password.special_char_count=0; 
set global validate_password.length=1;
set global validate_password.check_user_name='OFF';
--这里将roo密码修改为 root
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

执行以上语句时如果遇到下方报错:
在这里插入图片描述
按照现有的密码规则改下密码就可以操作了,这里的密码是刚刚 grep “password” /var/log/mysqld.log获得的密码随便在后边加个数字

alter user 'root'@'localhost' identified by '1ytEl&8S!5Vq2'; 

2.主节点添加主从同步账户

mysql -uroot -p‘root’
修改密码策略:
创建用户:
用户名:copy
密码:123456

set global validate_password.policy=LOW;
set global validate_password.mixed_case_count=0;
set global validate_password.number_count=0; 
set global validate_password.special_char_count=0; 
set global validate_password.length=1;
set global validate_password.check_user_name='OFF';CREATE USER 'copy'@'%' IDENTIFIED BY '123456';
alter user 'copy'@'%' identified with mysql_native_password by '123456';
grant all privileges on *.* to 'copy'@'%' with grant option;
select host,user from mysql.user;

在这里插入图片描述

--查看copy用户权限情况,由于上面命令给的ALL权限所以这里显示结果比较多
show grants for 'copy'@'%';

在这里插入图片描述

下面属于 mysql 8.0创建用户的详解 此步骤可略过
–mysql 密码策略详解

--MySQL登录后使用这个命令查看密码策略
show variables like 'validate%';--可以使用以下命令进行修改
--密码验证策略低要求(0或LOW代表低级)
set global validate_password.policy=LOW;--密码至少要包含的小写字母个数和大写字母个数 0代表0个
set global validate_password.mixed_case_count=0;--密码至少要包含的数字个数 0代表0个。
set global validate_password.number_count=0; --密码至少要包含的特殊字符数 0代表0个
set global validate_password.special_char_count=0; -- 密码最小长度
set global validate_password.length=1;
--跳过用户验证 OFF关闭 ON开启
set global validate_password.check_user_name='OFF';

mysql8.0 用户操作详解

--创建用户
CREATE USER 'user'@'%' IDENTIFIED BY '123456';--修改密码
alter user 'user'@'host' identified by 'pwd';--按mysql_native_password加密方式修改密码
alter user 'user'@'%' identified with mysql_native_password by 'pwd';--修改权限 grant #auth on #databaseName.#table to '#userName'@'#host';
GRANT ALL PRIVILEGES ON *.* TO 'copy'@'%' WITH GRANT OPTION;--例子 :给test账号赋值 所有库表的 增删改查权限
grant all privileges on *.* to 'test'@'%';
--刷新权限
flush privileges;
--auth 代表权限,如下
--all privileges 全部权限
--select 查询权限
--select,insert,update,delete 增删改查权限
--select,[…]增…等权限--databaseName 代表数据库名#table 代表具体表,如下
--*.*代表全部表
--A.B 代表具体A库下的B表--userName 代表用户名--host 代表访问权限,如下
--%代表通配所有host地址权限(可远程访问)
--localhost为本地权限(不可远程访问)
--指定特殊Ip访问权限 如10.138.106.102--查看用户权限
show grants for 'copy'@'%';CREATE USER root@'%' IDENTIFIED BY '123456';
--删除用户
drop user 'root'@'%';
use mysql;
select host,user from user;

3.开启二进制日志文件和添加server-id

所有节点

systemctl stop mysqld
vim /etc/my.cnf

主节点/etc/my.cnf添加内容:

log-bin=mysql-bin
server-id=xxx

从节点/etc/my.cnf添加内容:

server-id=xxx

注意,注意,注意,只有master节点有mysql-bin配置,每个节点的server-id必须不同
主节点内容:
在这里插入图片描述
从节点内容:
在这里插入图片描述

systemctl start mysqld

**

4.登入主节点mysql重置偏移量

**

mysql -uroot -proot
--重置偏移量如果不重置,从节点也会创建copy用户
reset master;
show master status;

在这里插入图片描述
获取到
二进制文件名字 : mysql-bin.000001
Position : 157
这里获取的信息之后会用到

5.注册从节点

登入所有从节点的mysql上执行以下命令:
master_host : 主节点主机名
master_user : 第2步创建的主从同步账户
master_port : 主节点mysql服务的端口号,因为没有这里改过所以是 3306
master_password : 第2步创建的主从同步账户的密码
master_log_file : 第4步获取的二进制文件名字
master_log_pos : 第4步获取的Position值

stop slave;
reset slave;change master to master_host='mc1',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157;

6.启动 启动所有从节点的slave

start slave;
show slave status \G
在这里插入图片描述
这两项 为 YES说明搭建成功了:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

测试步骤:
在主节点创建test_mc库去从节点上看是否有被同步;

主节点:
在这里插入图片描述
从节点:
在这里插入图片描述
主从同步成功

7.多主多从模式,(此模式基于上边一主多重模式搭建,虚拟机搭建可创建快照方便回退)

mc1mc3,mc2
mc2mc1,mc4

在这里插入图片描述

8.主节点添加配置

停止所有节点mysql服务

systemctl stop mysqld

由于之前 mc1已经配置 log-bin=mysql-bin ,这里mc2也要变为主节点所以mc2也要配置下

下面配置只在 mc1 和 mc2两个主上配置:

auto_increment_increment=2
auto_increment_offset=1
log-slave-updates
sync_binlog=1

auto_increment_increment :
参数为2偶数主键偏移量递增,为1奇数递增

auto_increment_offset:
主键偏移量开始位置

log-slave-updates
从库做为其他从库的主库时 log-slave-updates参数是必须要添加的,因为从库要作为其他从库的主库,必须添加该参数

sync_binlog=1
一次事务更新一回

注意:auto_increment_offse两个主的配置,一个为1 一个为2

MC1配置:
在这里插入图片描述
MC2配置:
在这里插入图片描述

9.多主多从同步

启动所有节点mysql 服务

systemctl start mysqld

为 mc2创建同步用户
mysql -uroot -p‘root’
修改密码策略:
创建用户:
用户名:copy
密码:123456

set global validate_password.policy=LOW;
set global validate_password.mixed_case_count=0;
set global validate_password.number_count=0; 
set global validate_password.special_char_count=0; 
set global validate_password.length=1;
set global validate_password.check_user_name='OFF';CREATE USER 'copy'@'%' IDENTIFIED BY '123456';
alter user 'copy'@'%' identified with mysql_native_password by '123456';
grant all privileges on *.* to 'copy'@'%' with grant option;
select host,user from mysql.user;

如下图权限和远程接受远程访问没有问题
在这里插入图片描述
在这里插入图片描述

在mc2,mc3上执行

stop slave;
reset slave;
change master to master_host='mc1',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157;
start slave;
show slave status \G

mc2和 mc3截图 从图中可以看出 master_host是mc1
在这里插入图片描述
在这里插入图片描述

在mc1,mc4上执行

stop slave;
reset slave;
change master to 
change master to master_host='mc2',master_user='slave',master_password='Slave_123',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=157;
start slave;
show slave status \G

从图中可以看出mc1和 mc4的 master_host是mc2

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

10.多主多从测试

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

数据同步成功

从数据库开启只读模式,避免和 主节点数据不一致
停止所有 从节点 mysql服务

systemctl stop mysqld
vim /etc/my.cnf

添加如下内容:

read_only = 1
super_read_only = 1

在这里插入图片描述

启动所有 从节点 mysql服务

systemctl start mysqld
show global variables like "%read_only%";

在这里插入图片描述

主从修复

解决办法一
注意:适用于mysql主从数据不严谨,数据无需紧密同步情况下使用,耗时短

stop slave;
--这里的 1 指定的是 你跳过事务的次数,如果有很多事务没有同步需要设置大一点
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;

解决办法二:
注意:重新做主从,数据能够完全同步,耗时长

--主节点 锁表 防止新数据写入
flush tables with read lock;
--查看master偏移量
show master status;

在这里插入图片描述

#把主机点mysql库导出(因为指定了主机,我直接在父节点获取到了备份sql)
#mc2是我主节点主机名称
mysqldump -uroot -p123456 --all-databases  > mysql.bak.sql
#这里mc1是我的从节点
scp -r mysql.bak.sql mc1:/tmp

在这里插入图片描述

--停止从库
stop slave;
--关闭只读权限
set global read_only=0;
set global super_read_only=0;
--导入备份数据
source /tmp/mysql.bak.sql
--打开只读权限
set global read_only=1;
set global super_read_only=1;
--查看只读权限是否打开成功
show variables like '%read_only%';

在这里插入图片描述

--重新做主从 记得改master_log_pos,要跟master偏移量一样
change master to master_host='mc2',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1201081;
--启动slave
start slave;
--查看slave状态
show slave status \G

在这里插入图片描述

# mysql


http://www.ppmy.cn/news/35818.html

相关文章

为什么说学人工智能一定要学Python?

学习人工智能需要掌握大量的数据处理和算法实现,而Python作为一种高级编程语言,具有简单易学、灵活多变、开源丰富的库等优点,成为了人工智能领域广泛应用的语言之一。 具体来说,Python在人工智能中的优势包括: ​​…

nginx配合vite开启gzip压缩以及各种问题处理

1、导入压缩插件 import compressPlugin from "vite-plugin-compression";2、vite配置压缩插件 plugins: [vue(),compressPlugin({verbose: true, // 默认即可disable: false, //开启压缩(不禁用),默认即可deleteOriginFile: true, //删除源文件thresho…

黑马程序员 linux 学习笔记入门部分合集

ubuntu 安装 本课程使用 ubuntu 系统。 ubuntu 官网 - download。 上面会显示有两个版本,每年 ubuntu 发布两个版本,LTS 是长期维护版,所以相对会较稳定。 介绍 Linux 发行版本 不管什么版本,内核都是一样的。 RPM based&a…

从零开始学Python第08课:常用数据结构之列表-1

在开始本节课的内容之前,我们先给大家一个编程任务,将一颗色子掷6000次,统计每种点数出现的次数。这个任务对大家来说应该是非常简单的,我们可以用1到6均匀分布的随机数来模拟掷色子,然后用6个变量分别记录每个点数出现…

【网络分析】并查集/树上差分

2069. 网络分析 文章目录题目描述解题思路代码实现题目描述 给出一个 nnn个孤立点的图,每个点上的权值都是 000,进行 mmm 次操作 操作 1 :把两个点所在的连通块合并起来 操作 2 :向某个点所在的连通块的所有点累加一个值 n≤104,m…

如何应对上手英文工具站的 8 大误区

这次给大家带来程序员如何应对上手英文工具站的 几点误区,帮助大家跳出程序员思维,一起出海软件掘金 ~ ----- 小小分割线 ----- 误区一:以为参加了这一次航海,就可以赚到美刀。这样想,往往很难达到预期。 我的看法&…

济南高新技术企业认定条件

济南高新技术企业认定条件2022 (一)企业申请认定时须注册成立一年以上; (二)企业通过自主研发、受让、受赠、并购等方式,获得对其主要产品(服务)在技术上发挥核心支持作用的知识产权…

跨域常见的解决方案

目录 一:什么是跨域 二:为什么会跨域 三:跨域的解决方案 1.代理服务器 1.1.生产环境 1.2.开发环境 2.JSONP 3.CORS 一:什么是跨域 跨域是指浏览器在向一个服务器发送请求时,该请求的地址与当前页面的地址不同…