MySQL主从搭建--保姆级教学
MYSQL主从搭建步骤
主节点
# 进入目录
cd /opt# 下载安装包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 解压
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 拷贝到/usr/local
mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local# 进入/usr/local
cd /usr/local# 修改名称为mysql-8.0.20
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20# 创建存放数据文件夹
mkdir /usr/local/mysql-8.0.20/data# 创建用户及用户组
groupadd mysql
useradd -g mysql mysql# 授权
chown -R mysql.mysql /usr/local/mysql-8.0.20# 初始化数据库(记录临时密码)
cd /usr/local/mysql-8.0.20/./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize ;# 配置my.cnf
vi /etc/my.cnf# 清空,使用下面内容
// 文件内容开始[mysqld]
basedir=/usr/local/mysql-8.0.20
datadir=/usr/local/mysql-8.0.20/data
character-set-server=utf8
lower-case-table-names=1
default_authentication_plugin=mysql_native_password# 主从复制-主机配置
# 主服务器唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(可设置多个)
binlog-do-db=test
# 设置logbin格式
binlog_format=STATEMENT// 文件内容结束# 建立Mysql服务
cp -a ./support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql# 检查服务是否生效
chkconfig --list mysql# 启动、停止、重启
service mysql start
service mysql stop
service mysql restart# 创建软连接
ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin # 登录(使用临时密码)
mysql -uroot -p# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password';# 退出,使用新密码登录
quit
mysql -uroot -p# 修改root权限,增加远程连接
use mysql
update user set host ='%' where user='root';
alter user 'root'@'%' identified with mysql_native_password by 'new password';
flush privileges;# 退出
quit
从节点
# 进入目录
cd /opt# 下载安装包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 解压
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 拷贝到/usr/local
mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local# 进入/usr/local
cd /usr/local# 修改名称为mysql-8.0.20
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20# 创建存放数据文件夹
mkdir /usr/local/mysql-8.0.20/data# 创建用户及用户组
groupadd mysql
useradd -g mysql mysql# 授权
chown -R mysql.mysql /usr/local/mysql-8.0.20# 初始化数据库(记录临时密码)
cd /usr/local/mysql-8.0.20/./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize ;# 配置my.cnf
vi /etc/my.cnf# 清空,使用下面内容
// 文件内容开始[mysqld]
basedir=/usr/local/mysql-8.0.20
datadir=/usr/local/mysql-8.0.20/data
character-set-server=utf8
lower-case-table-names=1
default_authentication_plugin=mysql_native_password# 主从复制-从机配置
# 从服务器唯一ID
server-id=2
# 启用中继日志
relay-log=mysql-relay// 文件内容结束# 建立Mysql服务
cp -a ./support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql# 检查服务是否生效
chkconfig --list mysql# 启动、停止、重启
service mysql start
service mysql stop
service mysql restart# 创建软连接
ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin # 登录(使用临时密码)
mysql -uroot -p# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password';# 退出,使用新密码登录
quit
mysql -uroot -p# 修改root权限,增加远程连接
use mysql
update user set host ='%' where user='root';
alter user 'root'@'%' identified with mysql_native_password by 'new password';
flush privileges;# 退出
quit
- 关闭主从数据库服务器防火墙或开放3306端口
# 查看防火墙状态
systemctl status firewalld# 关闭防火墙
systemctl stop firewalld
- 主从数据库测试是否已经可以远程访问
# 主数据库服务器测试从数据库
mysql -uroot -p -h192.168.182.132(从节点ip) -P3306# 从数据库服务器测试主数据库
mysql -uroot -p -h192.168.182.128(主节点ip) -P3306
- 主数据库创建用户slave并授权
# 登录
mysql -uroot -p# 创建用户
create user 'slave'@'%' identified with mysql_native_password by 'password';# 授权
grant replication slave on *.* to 'slave'@'%';# 刷新权限
flush privileges;
- 从数据库验证slave用户是否可用
mysql -uslave -p -h192.168.182.128(主节点) -P3306
- 主数据库查询服务ID及Master状态
# 登录
mysql -uroot -p# 查询server_id是否可配置文件中一致
show variables like 'server_id';# 若不一致,可设置临时ID(重启失效)
set global server_id = 1;# 查询Master状态,并记录 File 和 Position 的值
show master status;# 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化
- 从数据库中设置主数据库
# 登录
mysql -uroot -p# 查询server_id是否可配置文件中一致
show variables like 'server_id';# 若不一致,可设置临时ID(重启失效)
set global server_id = 2;# 设置主数据库参数
change master to master_host='192.168.182.128',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;#注意:master_log_file和master_log_pos为主节点中执行show master status;后的值!!!
#注意:master_log_file和master_log_pos为主节点中执行show master status;后的值!!!
#注意:master_log_file和master_log_pos为主节点中执行show master status;后的值!!!# 开始同步
start slave;# 若出现错误,则停止同步,重置后再次启动
stop slave;
reset slave;
start slave;# 查询Slave状态
show slave status\G# 查看是否配置成功
# 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。
测试
通过工具连接主从数据库或者在服务器连接。
注意:主数据库的配置文件中配置了需要同步的数据库,因此只会同步配置的数据库,不配置则同步全部。
# 在主数据库创建数据库test
create database test;# 从数据库查看
show databases;# 在主数据库创建表
use test;
create table t_user(id int, name varchar(20));# 插入数据
insert into t_user values(1, 'C3Stones');# 在从数据库查看
use test;
select * from t_user;# 其他删改查操作请自行测试
异常
1.Slave_IO_Running为NO
问题原因:
(1)网络不通
(2)防火墙端口未开放
(3)mysql账户密码错误
(4)mysql主从机配置文件写错
(5)配置从机连接语法错误
(6)主机未开放账户连接权限
解决步骤:
(1)网络不通:用ping指令尝试是否可以接收到返回的数据
(2)防火墙端口未开放:
1:查看防火状态
systemctl status firewalld
service iptables status2:暂时关闭防火墙
systemctl stop firewalld
service iptables stop3:永久关闭防火墙
systemctl disable firewalld
chkconfig iptables off4:重启防火墙
systemctl enable firewalld
service iptables restart
(3)mysql账户密码错误:用"mysql -u用户名 -p密码 -h主机ip"尝试登录主机
(4)主数据库参数设置错误(注意此条命令的参数)
change master to master_host='192.168.182.128',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;
若配置错误
1.停止已经启动的绑定
stop slave;2.重置绑定
reset master;3.重新配置、执行复制主机命令
change master to master_host='192.168.182.128',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;4.启动复制
start slave;
2.Slave_SQL_Running为NO
原因
主节点中有数据库test,执行drop database test时成功,但是从节点中没有test库,所以执行失败。此失败不对数据库造成影响,所以可忽略,选择跳过此处错误。#停止从服务
mysql> stop slave; #表示跳过一步错误,后面的数字可变
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;#重启slave服务
mysql> start slave;之后再用mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ok,现在主从同步状态正常了。。。
相关文章:
MySQL主从搭建--保姆级教学
MYSQL主从搭建步骤 主节点 # 进入目录 cd /opt# 下载安装包 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 解压 tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 拷贝到/usr/local mv /opt/mysql-8.0.20-linux-g…...
Modbus通信协议--RTU
一、RTU介绍 MODBUS协议支持多种功能码,不同的功能码对应不同的操作: 0x01读线圈状态0x02读离散输入状态0x03读保持寄存器0x04读输入寄存器0x05写单个线圈0x06写单个保持寄存器0x0F写多个线圈0x10写多个保持寄存器 二、实验 1.0x03功能码读单个保持寄…...
我是大学生,应该选系统运维方向,还是web开发方向?
选择系统运维方向还是Web开发方向取决于你的兴趣、职业目标和个人技能。以下是对这两个方向的详细对比和建议,帮助你做出更明智的选择 双方比较 🤦♀️系统运维方向 优点: 稳定性:系统运维工作通常比较稳定,许多…...
Qt窗口与对话框
目录 Qt窗口 1.菜单栏 2.工具栏 3.状态栏 4.滑动窗口 QT对话框 1.基础对话框QDiaog 创建新的ui文件 模态对话框与非模态对话框 2.消息对话框 QMessageBox 3.QColorDialog 4.QFileDialog文件对话框 5.QFontDialog 6.QInputDialog Qt窗口 前言:之前以上…...
【笔记】Windows 中 一键部署本地私人专属知识库:MaxKB + Docker + MaxKB docker + Ollama
Docker的部署: Docker下载直接进入链接: https://www.docker.com/ Docker使用需要启动Docker,启动Docker以后,会在桌面右下角看到Docker的一个图标: 只有启动了Docker以后,Docker的各种命令才可以使用。 好像还需要…...
【Vue】scoped解决样式冲突
默认情况下写在组件中的样式会 全局生效 → 因此很容易造成多个组件之间的样式冲突问题。 全局样式: 默认组件中的样式会作用到全局,任何一个组件中都会受到此样式的影响 局部样式: 可以给组件加上scoped 属性,可以让样式只作用于当前组件 一、代码示例 BaseOne…...
word模板内容替换
1.pom引入依赖: <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version> </dependency> <dependency><groupId>com.deepoove</groupId><a…...
docker安装和使用
1. docker-ce Docker Community Edition (CE): 功能: 这是 Docker 的主要组件,用于创建、管理和运行容器。它包括 Docker 守护进程 (dockerd),该守护进程负责处理容器的生命周期,包括创建、启动、停止和删除容器。用途: 允许用户在其系统上…...
【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图
前天写了篇博文讲到用PlantUML来绘制C类图和流程图。后台有读者留言,问这步能否自动化生成,不想学习 PlantUML 语法。 我想了下,发现这事可行,确实可以做到通过自然语言的描述就能实现 UML图的绘制,昨天晚上加了个班到…...
C++访问越界
常见场景 访问数组元素越界vector容器访问等 vector<int>;vec<2>;字符串访问越界string str;str[2];array数组访问越界字符串处理,没有添加’\0’字符,导致访问字符串的时候越界了;使用类型强转,让一个大…...
MATLAB format
在MATLAB中,format 是一个函数,用于控制命令窗口中数值的显示格式。这个函数可以设置数值的精度、显示的位数等。以下是一些常用的 format 命令: format long:以默认的长格式显示数值,通常显示15位有效数字。format s…...
Face Forgery Detection by 3D Decomposition
文章目录 Face Forgery Detection by 3D Decomposition研究背景研究目标创新点方法提出问题研究过程技术贡献实验结果未来工作Face Forgery Detection by 3D Decomposition 会议:CVPR2021 作者: 研究背景 面部伪造引发关注传统面部伪造检测主要关注原始RGB图像研究目标 将…...
socket网络编程——多进程、多线程处理并发
如下图所示, 当一个客户端与服务器建立连接以后,服务器端 accept()返回,进而准备循环接收客户端发过来的数据。 如果客户端暂时没发数据,服务端会在 recv()阻塞。此时,其他客户端向服务器发起连接后,由于服务器阻塞了,无法执行 accept()接受连接,也就是其他客户端发送…...
C++---模板进阶(非类型模板参数,模板的特化,模板分离编译)
我们都学习和使用过模板,而这篇文章我们来将一些更深入的知识。在此之前,我们在使用C编程时可以看到模板是随处可见的,它能支持泛型编程。模板包括函数模板和类模板,我们有的人可能会说是模板函数和模板类,但严格讲这样…...
锂电池寿命预测 | Matlab基于SSA-SVR麻雀优化支持向量回归的锂离子电池剩余寿命预测
目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 【锂电池剩余寿命RUL预测案例】 锂电池寿命预测 | Matlab基于SSA-SVR麻雀优化支持向量回归的锂离子电池剩余寿命预测(完整源码和数据) 1、提取NASA数据集的电池容量,以历史容量作…...
整理好了!2024年最常见 20 道 Kafka面试题(十)
上一篇地址:整理好了!2024年最常见 20 道 Kafka面试题(九)-CSDN博客 十九、Kafka的消费者如何实现幂等性? 在Kafka中,幂等性指的是消费者处理消息时,即使多次接收到同一条消息,也能…...
Paper Survey——3DGS-SLAM
之前博客对多个3DGS SLAM的工作进行了复现及代码解读 学习笔记之——3DGS-SLAM系列代码解读_gs slam-CSDN博客文章浏览阅读1.9k次,点赞15次,收藏45次。最近对一系列基于3D Gaussian Splatting(3DGS)SLAM的工作的源码进行了测试与…...
搜索与图论:深度优先搜索
搜索与图论:深度优先搜索 题目描述参考代码 题目描述 参考代码 #include <iostream>using namespace std;const int N 10;int n; int path[N]; bool st[N];void dfs(int u) {// u n 搜索到最后一层if (u n){for (int i 0; i < n; i) printf("%d …...
AMD显卡和英伟达显卡哪个好?
显卡是计算机中负责处理图形和视频输出的硬件设备,主要分为两种类型:AMD的A卡和NVIDIA的N卡。那么AMD显卡和英伟达显卡哪个好?怎么选? 答:不能一概而论地说哪个好,因为它们各有优势,选择应基于…...
5.31.8 学习深度特征以实现判别定位
1. 介绍 尽管没有对物体的位置提供监督,但卷积神经网络 (CNN) 各层的卷积单元实际上可以充当物体检测器。尽管卷积层具有这种出色的物体定位能力,但当使用全连接层进行分类时,这种能力就会丧失。最近,一些流行的全卷积神经网络,如 Network in Network (NIN) [13] 和 Goog…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
