当前位置: 首页 > news >正文

linux搭建mysql主从复制(一主一从)

目录

0、环境部署

1、主服务器配置

1.1  修改mysql配置文件

1.2  重启mysql

1.3  为从服务器授权

1.4  查看二进制日志坐标

2、从服务器配置

2.1  修改mysql配置文件

2.2  重启mysql

2.3  配置主从同步

2.4  开启主从复制

3、验证主从复制

3.1  主服务器上创建test_db

3.2  从服务器上查看test_db

4、报错解决

Slave_IO_Running: No

Slave_IO_Running: Connecting

补充


0、环境部署

设备操作系统 IP地址mysql版本
master主服务器openEuler release 22.03 (LTS-SP2)192.168.48.1318.0.37 for Linux on x86_64 (Source distribution)
slave从服务器openEuler release 22.03 (LTS-SP2)192.168.48.1328.0.37 for Linux on x86_64 (Source distribution)

注:openEuler release 22.03 (LTS-SP2)的内核为 Linux 5.10.0-153.12.0.92.oe2203sp2.x86_64

#下载mysql
yum install -y mysql-server
#防火墙放行mysql3306端口(防火墙没开忽略此操作)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports | grep 3306
#关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
reboot
#启动mysql
systemctl start mysqld
#检查mysql是否成功启动
ps -ef | grep mysql
#设置mysql开机自启
systemctl enable mysqld
#登录mysql
mysql -uroot -p

该版本mysql首次登录密码为空,直接回车即可

1、主服务器配置

1.1  修改mysql配置文件

vim /etc/my.sql

server-id=1#必选项
read-only=0
binlog_format=MIXED
log-slave-updates=true
log-bin=mysql-bin#不添加此项默认为binlog.0000x格式

1.2  重启mysql

systemctl restart mysqld

1.3  为从服务器授权

mysql -uroot -p
#创建elysia用户,允许登录远程主机IP为192.168.48.132,密码为elysia@123
CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED WITH mysql_native_password BY 'elysia@123';
#为elysia用户授予所有权限,包括了replication slave权限
GRANT ALL PRIVILEGES ON *.* TO 'elysia'@'192.168.48.132';
#刷新权限
flush privileges;

1.4  查看二进制日志坐标

show master status\G;

当前使用的二进制文件的名字为:mysql-bin.000001 

当前偏移量为:2405

2、从服务器配置

2.1  修改mysql配置文件

echo server-id=2 >> /etc/my.cnf

从服务器server-id不能与主服务器一样

2.2  重启mysql

systemctl restart mysqld

2.3  配置主从同步

mysql -u root -p
change master to master_host='192.168.48.131',#主服务器IP
master_user='elysia',#用于复制的用户,必须有replication slave权限
master_password='elysia@123',#用于复制用户的密码
master_log_file='mysql-bin.000001',#当前使用的二进制日志文件binlog
master_log_pos=2405;#binlog的位置

2.4  开启主从复制

start slave;
#查看当前主从复制状态
show slave status\G;

出现双yes即可

3、验证主从复制

3.1  主服务器上创建test_db

#创建一个test_db数据库
create database test_db;
#创建一个dept表
use test_db;
create table dept (dept1 int ,dept_name varchar(11)) charset=utf8;
#插入数据
insert into dept values
(101,'财务'),
(102,'销售'),
(103,'IT技术'),
(104,'行政');

3.2  从服务器上查看test_db

#查看当前数据库; 
show databases;
#查看表的内容;
select * from test_db.dept;

从服务器上出现test_db,并且成功查询,主从复制搭建成功

4、报错解决

Slave_IO_Running: No

查看 Last_IO_Error 

报错原因:

二进制文件位置坐标错误

解决:将master_log_pos改为正确位置即可

其他可能错误:

  • 从服务器mysql远程连接主服务器失败;
  • 两台虚拟机uuid或者mac地址重复(可能你的两台虚拟机由同一台克隆而来);

Slave_IO_Running: Connecting

查看 Last_IO_Error 

 报错原因:这个错误表明连接到MySQL数据库时,使用了caching_sha2_password身份验证插件,但是要求进行安全连接。也就是,你在从服务器mysql上使用了以下格式的命令创建了从服务器的登录用户

CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED BY 'elysia@123';

解决方法:

ALTER USER 'elysia'@'192.168.48.132' IDENTIFIED WITH mysql_native_password BY 'elysia@123';

补充

CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED BY 'elysia@123';

CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED WITH mysql_native_password BY 'elysia@123';

的区别:

这两个 SQL 语句的区别在于用户的身份验证机制。

  • 1. `CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED BY 'elysia@123';`: 这条语句创建了一个名为 'elysia' 的用户,该用户可以从 IP 地址为 '192.168.48.132' 的主机连接到 MySQL 数据库。通过 `IDENTIFIED BY 'elysia@123'` 指定了用户的密码。这种方式使用的身份验证插件是默认的 `caching_sha2_password`,这是 MySQL 8.0 版本及以上的默认身份验证插件。
  • 2. `CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED WITH mysql_native_password BY 'elysia@123';`:这条语句也创建了一个名为 'elysia' 的用户,同样可以从 IP 地址为 '192.168.48.132' 的主机连接到 MySQL 数据库。不同之处在于,通过 `IDENTIFIED WITH mysql_native_password` 指定了用户要使用的身份验证插件,即 `mysql_native_password`。这是旧版本 MySQL 使用的默认身份验证插件,它在 MySQL 8.0 版本中被 `caching_sha2_password` 替代。

因此,这两个语句的主要区别在于用户的身份验证机制。如果你的 MySQL 数据库版本是 MySQL 8.0 及以上,推荐使用第一个语句,因为它使用了更安全的默认身份验证插件。如果你需要与旧版本的 MySQL 数据库兼容,可以使用第二个语句指定使用 `mysql_native_password` 身份验证插件。

相关文章:

  • Autosar RTE配置-Assembly和Delegation的使用-基于ETAS软件
  • Collections.unmodifiableList
  • 【Vue】Vue3 安装 Tailwind CSS 入门
  • Golang | Leetcode Golang题解之第240题搜索二维矩阵II
  • vue2导入elementui组件库
  • LabVIEW电路产品功能自动检测系统
  • 目标检测入门:4.目标检测中的一阶段模型和两阶段模型
  • 【ELK+Kafka+filebeat分布式日志收集】分布式日志收集详解
  • Flutter 状态管理新境界:多Provider并行驱动UI
  • 快捷:通过胶水语言实现工作中测试流程并行、加速
  • nginx全局块的user指令
  • 基于 Vue 3 和 Element Plus 构建图书管理系统
  • 计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
  • Airdrop 2049 第二季如何捕捉全新机遇?专家大咖带你揭秘!
  • B树:深入解析与实战应用
  • [译]如何构建服务器端web组件,为何要构建?
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Android框架之Volley
  • css属性的继承、初识值、计算值、当前值、应用值
  •  D - 粉碎叛乱F - 其他起义
  • docker容器内的网络抓包
  • Next.js之基础概念(二)
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • React16时代,该用什么姿势写 React ?
  • ubuntu 下nginx安装 并支持https协议
  • Vultr 教程目录
  • 成为一名优秀的Developer的书单
  • 程序员该如何有效的找工作?
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 简单实现一个textarea自适应高度
  • 前端学习笔记之观察者模式
  • 浅谈web中前端模板引擎的使用
  • 让你的分享飞起来——极光推出社会化分享组件
  • 十年未变!安全,谁之责?(下)
  • 智能合约开发环境搭建及Hello World合约
  • Python 之网络式编程
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • # 数据结构
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (arch)linux 转换文件编码格式
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Java入门)抽象类,接口,内部类
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (备忘)Java Map 遍历
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (三) diretfbrc详解
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)程序员疫苗:代码注入
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .aanva
  • .gitignore不生效的解决方案