最新mysql8.3 保姆级 主从复制搭建教程

news2024/11/26 9:57:51

mysql 主从复制搭建

服务器配置表

机器ip操作系统
主机192.168.31.25华为openEuler-22.03-LTS-SP3
从机192.168.31.184华为openEuler-22.03-LTS-SP3
从机192.168.31.228华为openEuler-22.03-LTS-SP3

1、在3台机器上安装独立的 mysql

1.1 创建myql文件夹用来存放mysql包

mkdir -p /opt/mysql

1.2 上传并解压 mysql.tar包

tar -zxf mysql-8.3.0-linux-glibc2.28-x86_64.tar.xz

1.3 重命名解压后的mysql文件夹

mv mysql-8.3.0-linux-glibc2.28-x86_64 mysql8.3

1.4 添加环境变量

添加Path环境变量,命令如下:export PATH=$PATH:/opt/mysql/mysql8.3/bin

1.5 创建用户组合用户

(创建一个用户组:mysql)groupadd mysql (创建一个系统用户:mysql并且指定用户组为mysql)useradd -r -g mysql mysql 不创建此用户安装过程会报错

1.6 添加数据目录

1、创建数据目录:mkdir -p /opt/mysql/mysql8.3/data
2、更改属主和数组:chown -R mysql:mysql /opt/mysql/mysql8.3/data
3、更该模式:chmod -R 750 /opt/mysql/mysql8.3/data

1.7 进入mysql8.3 并创建 my.cnf 文件 并写入以下内容

vi mysql8.3/my.cnf

[mysql]
# 默认字符集
default-character-set=utf8mb4
[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
server-id=1
user=mysql
socket =/tmp/mysql.sock
# 安装目录
basedir=/opt/mysql/mysql8.3
# 数据存放目录
datadir=/opt/mysql/mysql8.3/data/mysql
log-bin=/opt/mysql/mysql8.3/data/mysql/mysql-bin
innodb_data_home_dir=/opt/mysql/mysql8.3/data/mysql
innodb_log_group_home_dir=/opt/mysql/mysql8.3/data/mysql
#日志及进程数据的存放目录
log-error =/opt/mysql/mysql8.3/data/mysql/mysql.log
pid-file  =/opt/mysql/mysql8.3/data/mysql/mysql.pid
# 服务端使用的字符集默认为8比特编码
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1

 ##################以上要修改的########################
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 1024
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 64M
thread_cache_size = 128

#query_cache_size = 128M
tmp_table_size = 128M
explicit_defaults_for_timestamp = true
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

binlog_format=mixed

binlog_expire_logs_seconds =864000

# 创建新表时将使用的默认存储引擎
default_storage_engine = InnoDB
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
transaction-isolation=READ-COMMITTED

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 4M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

特别注意:以上配置中 server-id 3台机器不能一样

1.8 初始化MySQL

bin/mysqld --defaults-file=/opt/mysql/mysql8.3/my.cnf --basedir=/opt/mysql/mysql8.3  --datadir=/opt/mysql/mysql8.3/data/mysql --user=root --initialize-insecure

1.9 启动mysql

/opt/mysql/mysql8.3/bin/mysqld_safe --defaults-file=/opt/mysql/mysql8.3/my.cnf &

1.10 登录(首次免密)

/bin/mysql -u root --skip-password

1.11 修改密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

1.12 刷新权限

FLUSH PRIVILEGES;

1.13 设置允许远程登录访问(需要登录到MySQL服务中进行设置)

mysql> use mysql
mysql> update user set user.Host='%'where user.User='root';
mysql> flush privileges;
mysql> quit

2、设置主从复制

2.1 修改主从机器的 my.cnf 配置文件 并添加以下内容,若之前配置有则可以忽略

vi /opt/mysql/mysql8.3/my.cnf
#主节点
## 开启二进制日志并指定 server-id
log-bin=mysql-bin
binlog_format=mixed
server-id=1
vi /opt/mysql/mysql8.3/my.cnf
#从节点
## 开启中继日志并指定 server-id 和 只读
# log-bin=mysql-bin
# binlog_format = mixed
relay-log=mysql-relay-bin
server-id=2
read-only=on

2.2 重启mysql

service mysql restart
或者
ps aux | grep mysql
找到进程id
kill -9 pid
然后重新启动mysql
/opt/mysql/mysql8.3/bin/mysqld_safe --defaults-file=/opt/mysql/mysql8.3/my.cnf &

2.3 设置主从主节点配置

2.3.1 修改 my.cnf 配置文件
vi my.cnf
#若之前有配置且一样 现在不用配置
## 开启二进制日志并指定 server-id
log-bin=mysql-bin
binlog_format=mixed
server-id=1
2.3.2 重启 mysql
service mysql restart
或
ps aux | grep mysql 查询mysql 进程pid 然后 kill -9 pid
然后运行
/opt/mysql/mysql8.3/bin/mysqld_safe --defaults-file=/opt/mysql/mysql8.3/my.cnf &
2.3.3 创建具有复制权限的用户 ,此处 Mysql 5.7 和 Mysql 8.0 有些区别
========================================= Mysql 5.7 ============================================
## 使用 root 账户,其他账户会有权限不足的情况
mysql -uroot -p

## 这句话意思是,主机允许 slave 用户,通过密码 123456,在 192.168.1.2 这台服务器上访问当前这台 master
mysql> grant replication slave on *.* to slave@192.168.1.2 identified by '123456';

## 刷新
flush privileges;
===============================================================================================

========================================= Mysql 8.0 ============================================
## 使用 root 账户,其他账户会有权限不足的情况
mysql -uroot -p

## mysql8.0 授权用户需要先创建,创建和授权同一条语句的话会报错
mysql> create user 'slave'@'192.168.31.184' identified by '123456';
mysql> create user 'slave'@'192.168.31.228' identified by '123456';
## 再授权
mysql> grant replication slave on *.* to 'slave'@'192.168.31.184' with grant option;
mysql> grant replication slave on *.* to 'slave'@'192.168.31.228' with grant option;

## 刷新
flush privileges;
===============================================================================================

2.3.4 查看 master 信息
mysql> show master status;

2.4 从机配置(2台从机完全一样特别注意server-id 3台机器都不能一样)

2.4.1 修改 my.cnf 配置文件
vim my.cnf

## 开启中继日志并指定 server-id 和 只读
# log-bin=mysql-bin
# binlog_format = mixed
relay-log=mysql-relay-bin
server-id=2
read-only=on

2.4.2 重启 mysql
service mysql restart
或
ps aux | grep mysql 查询mysql 进程pid 然后 kill -9 pid
然后运行
/opt/mysql/mysql8.3/bin/mysqld_safe --defaults-file=/opt/mysql/mysql8.3/my.cnf &
2.4.3 让从机成为 Slave
mysql -uroot -p
mysql> stop slave;
## 设置从机监听主机:master_log_file 和 master_log_pos 与主机 master 信息一致 与上图中的信息一致
mysql> change master to master_host='192.168.31.25',master_user='slave',master_password='123456',master_log_file='mysql-bin.000005', master_log_pos=3150;
mysql> start slave;
2.4.4 查看 Slave 状态
mysql> show slave status\G;

## 等待主机发送事件
Slave_IO_State : Waiting for master to send event
## 若它为 No,检查下主机防火墙是否已关闭
Slave_IO_Running: Yes
## 这俩项都是 yes 则配置成功
Slave_SQL_Running: Yes

2.5 踩坑

上图中 io 状态为 no,查看mysql日志

登录mysql后
SHOW VARIABLES LIKE '%log_error%';

开日志并找到原因 

大模型给出的解释是

简单的理解就是要在 master 节点设置以下信息

ALTER USER 'slave'@'192.168.31.184' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'slave'@'192.168.31.228' IDENTIFIED WITH mysql_native_password BY '123456';

然后重复 2.4.2 和 2.4.3 这2步 之后恢复正常

3 测试

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

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

相关文章

Centos7 搭建Mongodb 分片集群4.0/ PSA(三成员副本集)

MongoDB 简介:1、优点和缺点:2、MongoDB适用的业务场景:Centos7 搭建Mongodb 分片集群一、安装MongoDB社区版4.01、配置程序包管理系统(`yum`)2、安装对应版本的MongoDB软件包。3、创建运行mongodb的目录并禁用SELinux4、修改文件打开数5、初始化系统5.1、创建config配置…

LeetCode-5. 最长回文子串【字符串 动态规划】

LeetCode-5. 最长回文子串【字符串 动态规划】 题目描述:解题思路一:动态规划五部曲解题思路二:动态规划[版本二]解题思路三:0 题目描述: 给你一个字符串 s,找到 s 中最长的回文 子串 。 如果字符串的反序…

AndroidAutomotive模块介绍(二)应用及接口介绍

前言 上一篇文章中从整体角度描述了 Android Automotive 模块。本篇文章将对 Android Automotive 中的 APP 以及 API 部分展开描述。 上一篇:AndroidAutomotive模块介绍(一)整体介绍 下一篇:AndroidAutomotive模块介绍&#xff0…

GitHub repository - Branch - SSH clone URL - Clone in Desktop - Download ZIP

GitHub repository - Branch - SSH clone URL - Clone in Desktop - Download ZIP 1. Branch2. SSH clone URL3. Clone in Desktop4. Download ZIPReferences 1. Branch 显示当前分支的名称。从这里可以切换仓库内分支,查看其他分支的文件。 2. SSH clone U…

JavaWeb--JavaScript-事件绑定/BOM/DOM编程

目录 1. 事件绑定 1.1. 什么是事件 1.2. 常见事件 1.3. 事件的绑定 1.3.1. 属性绑定 1.3.2. DOM编程绑定 1.4. 事件的触发 1.4.1. 行为触发 1.4.2. DOM编程触发 2. BOM 编程 2.1. 什么是 BOM 2.2. window对象的常见属性(了解) 2.3. window对象的常见方法(了解) 2…

京东详情比价接口优惠券(2)

京东详情API接口在电子商务中的应用与作用性体现在多个方面,对于电商平台、商家以及用户都带来了显著的价值。 首先,从应用的角度来看,京东详情API接口为开发者提供了一整套丰富的功能和工具,使他们能够轻松地与京东平台进行交互。…

【机器学习】Logistic与Softmax回归详解

在深入探讨机器学习的核心概念之前,我们首先需要理解机器学习在当今世界的作用。机器学习,作为人工智能的一个重要分支,已经渗透到我们生活的方方面面,从智能推荐系统到自动驾驶汽车,再到医学影像的分析。它能够从大量…

16路HDMI+AV流媒体IPTV高清编码器JR-3216HD

产品简介: JR-3216HD 16路高清HDMIAV编码器是专业的高清音视频编码产品,该产品具有支持16路高清HDMI音视频采集功能,16路标清AV视频采集功能,16路3.5MM独立外接音频输入,编码输出双码流H.264格式,音频MP3/…

视频号小店究竟有什么秘密,值得商家疯狂入驻,商家必看!

大家好,我是电商花花。 我们都知道视频号和抖音本身都是一个短视频平台,但是随着直播电商的发展,背后的流量推动逐步显露出强大的红利市场和变现机会。 视频号小店流量大和赚钱之外,还非常适合普通人创业。 这也使得越来越多的…

访问者模式【行为模式C++】

1.概述 访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。 访问者模式主要解决的是数据与算法的耦合问题,尤其是在数据结构比较稳定,而算法多变的情况下。为了不污染数据本身,访问者会将多种算法独立归档&…

SpringBoot中使用Jackson序列化返回

SpringBoot中使用Jackson序列化返回 在Spring Boot应用中,使用Jackson库来处理JSON的序列化和反序列化是一种常见的做法。Jackson是一个高效的JSON处理器,广泛用于Java环境中,尤其是在与Spring框架集成时。本文将详细介绍如何在Spring Boot中…

Leetcode算法训练日记 | day24

一、组合问题 1.题目 Leetcode:第 77 题 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4…

汽车咨询|基于SprinBoot的汽车资讯管理系统设计与实现(源码+数据库+文档)

汽车资讯管理系统目录 基于SprinBoot的汽车资讯管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&#xff…

关于 Amazon DynamoDB 的学习和使用

文章主要针对于博主自己的技术栈,从Unity的角度出发,对于 DynamoDB 的使用。 绿色通道: WS SDK for .NET Version 3 API Reference - AmazonDynamoDBClient Amazon DynamoDB Amazon DynamoDB is a fast, highly scalable, highly available,…

全景剖析SSD SLC Cache缓存设计原理-2

四、SLC缓存对SSD的寿命是否有优化? 当使用QLC或TLC NAND闪存并将其切换到SLC模式进行写入时,会对闪存的寿命产生以下影响: 短期寿命提升: SLC模式下,每个存储单元仅存储一个比特数据,相对于QLC或TLC来说…

matlab学习002-函数及流程控制语句

目录 一,matlab编程基础 1)matlab脚本和函数文件 ①脚本文件 ②函数文件 2)函数的定义和调用 ①定义 ②调用 3)程序流程控制 ①使用for求 122^2……2^622^63之和 ②使用while语句求122^2……2^622^63之和 ③使用matl…

【御控物联】 Java JSON结构转换(2):对象To对象——属性重组

文章目录 一、JSON结构转换是什么?二、案例之《JSON对象 To JSON对象》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换,生成新的JS…

【Python】实现导入、提交文件并显示其路径的基础GUI界面

The tkinter package (“Tk interface”) 是一个基于Tcl/Tk GUI工具标准的Python接口。集合在大多数操作系统都有Tk和tkinter 库,包括MacOS,Window还有一些Unix类的操作系统 【基础操作】 1 设置窗口 # -*- coding: utf-8 -*- from tkinter import *#创…

2024年认证杯SPSSPRO杯数学建模D题(第一阶段)AI绘画带来的挑战全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 D题 AI绘画带来的挑战 原题再现: 2023 年开年,ChatGPT 作为一款聊天型 AI 工具,成为了超越疫情的热门词条;而在 AI 的另一个分支——绘图领域,一款名为 Midjourney(MJ&…

Matlab调C/C++简单模板例子

如果你是需要快速搭建一个matlab调c/c环境,这篇文章可以参考 有了c代码,想在matlab里面调用,可以参考我这个模板 matlab调用代码: clear all close all clcinput1 1; input2 2;[output1,output2] mexfunction(input1,input2);…