MySQL数据库集群技术主从复制 一主一从详细讲解

news/发布时间2024/6/1 7:50:58

集群技术

集群概述 MySQL复制技术

集群目的

  • 负载均衡

    • 解决高并发

  • 高可用HA

    • 服务可用性

  • 远程灾备

    • 数据有效性

 

类型

  • 一主一从

  • 一主双从

  • 双主双从

原理

 

 

  • 概念

    • 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。

    • 备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。

    • 备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。

  • 环境

    • 全新服务器-互相通信

    • 全新安装mysql80-分别安装

    • 配置域名解析

 

master1:192.168.142.139
slave1:192.168.142.140
[root@service ~]# vim /etc/hosts
192.168.142.139 master1
192.168.142.140 slave1

主服务器配置

  • 部署一台新mysql服务器。准备好域名解析。

  • 准备数据

mysql> create database master1db;
Query OK, 1 row affected (0.05 sec)mysql> use master1db;
Database changed
mysql> create table master1db.master1tab(name char(50));
Query OK, 0 rows affected (0.03 sec)mysql> insert into master1db.master1tab values (1111);
Query OK, 1 row affected (0.02 sec)mysql> insert into master1db.master1tab values (2222);
Query OK, 1 row affected (0.00 sec)
  • 开启二进制日志

[root@service ~]# vim /etc/my.cnf
server-id=1
log_bin
[root@service ~]# systemctl restart mysqld
  • 创建复制用户

mysql> create user 'rep'@'192.168.142.%' identified by 'Wyxbuke00.';
Query OK, 0 rows affected (0.03 sec)mysql> grant replication slave,replication client on *.* to 'rep'@'192.168.142.%' ;
Query OK, 0 rows affected (0.00 sec)
  • 备份master数据库的数据

[root@service ~]# mysqldump -uroot -p'Wyxbuke00.' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F` -mysql-all.sql
[root@service ~]# ll
总用量 444848
-rw-r--r--. 1 root root         0  2月 22 16:12 2024-02-22
-rw-r--r--. 1 root root   1288580  2月 22 16:10 2024-02-22-mysql-all.sql
观察二进制日志分割点
-- CHANGE MASTER TO MASTER_LOG_FILE='service-bin.000003', MASTER_LOG_POS=157;
  • 准备数据2

mysql> insert into master1db.master1tab values (33333333);
Query OK, 1 row affected (0.00 sec)mysql> insert into master1db.master1tab values (44444);
Query OK, 1 row affected (0.00 sec)

从服务器配置

  • 测试rep用户是否可用

[root@server ~]# mysql -urep -pWyxbuke00. -h master1
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 
  • 启动服务器序号

[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
[root@server ~]# vim /etc/my.cnf
不用在从设备上开启二进制日志,没有人向从设备请求日志。server-id=2
[root@server ~]# systemctl restart mysqld
  • 手动同步数据

从主服务器发送
[root@service ~]# scp 2024-02-22-mysql-all.sql slave1:/tmp/
root@slave1's password: 
2024-02-22-mysql-all.sql
到从服务器查看
[root@server ~]# ls /tmp
2024-02-22-mysql-all.sql  [root@server ~]# mysql -u root -p
Enter password:
mysql> set sql_log_bin=0;\
Query OK, 0 rows affected (0.00 sec)mysql> source /tmp/2024-02-22-mysql-all.sql ;
Query OK, 0 rows affected (0.00 sec)mysql> use master1db;
Database changed
mysql> select *from master1db.master1tab;
+------+
| name |
+------+
| 1111 |
| 2222 |
+------+
2 rows in set (0.00 sec)
  • 设置主服务器

mysql> change master to master_host='master1', master_user='rep', master_password='Wyxbuke00.',master_log_file='localhost-bin.000004',master_log_pos=157;
Query OK, 0 rows affected, 8 warnings (0.01 sec)
CHANGE MASTER TO MASTER_LOG_FILE=‘mysqld-bin.000004’,MASTER_LOG_POS=157;
  • 启动从设备

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 查看启动状态

mysql> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Master_Host: master1Master_User: repMaster_Port: 3306Connect_Retry: 60Master_Log_File: localhost-bin.000003Read_Master_Log_Pos: 157Relay_Log_File: server-relay-bin.000004Relay_Log_Pos: 126Relay_Master_Log_File: binlog.000038Slave_IO_Running: NoSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 126Relay_Log_Space: 337Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 13114Last_IO_Error: Got fatal error 1236 from source when reading data from binary log: 'Could not find first log file name in binary log index file'Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1Master_UUID: d5ddcb15-d063-11ee-a4cc-000c2904e4beMaster_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: 240222 16:42:23Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0Network_Namespace: 
1 row in set, 1 warning (0.00 sec)ERROR: 
No query specified

此时,发生报错 Last_IO_Error: Got fatal error 1236 from source when reading data from binary log: 'Could not find first log file name in binary log index file';

解决方案

到从服务器输入
mysql> stop slave-> ;
到master机器登陆mysql:记录master的bin的位置,例如:mysql> show master status;
mysql> show master status;
+--------------------+----------+--------------+------------------+-------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------------+----------+--------------+------------------+-------------------+
| service-bin.000004 |      157 |              |                  |                   |
+--------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
必要时使用flush log;进行刷新
到从数据库修改:mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> change master to master_log_file='service-bin.000004',master_log_pos=157;
Query OK, 0 rows affected, 3 warnings (0.01 sec)mysql> change master to master_host='master1',master_user='rep',master_password='Wyxbuke00.',master_log_file='service-bin.000004';
Query OK, 0 rows affected, 8 warnings (0.02 sec)mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: master1Master_User: repMaster_Port: 3306Connect_Retry: 60Master_Log_File: service-bin.000004Read_Master_Log_Pos: 157Relay_Log_File: server-relay-bin.000002Relay_Log_Pos: 328Relay_Master_Log_File: service-bin.000004Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 157Relay_Log_Space: 539Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1Master_UUID: d5ddcb15-d063-11ee-a4cc-000c2904e4beMaster_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0Network_Namespace: 
1 row in set, 1 warning (0.00 sec)
问题解决!
  • 返回主服务器(master1)更新数据,在从服务器(slave1)观察是否同步。

主服务器添加数据
mysql> insert into master1db.master1tab values (55555);
Query OK, 1 row affected (0.00 sec)
从服务器查看数据是否同步
mysql> select * from master1db.master1tab;
+-------+
| name  |
+-------+
| 1111  |
| 2222  |
| 55555 |
+-------+
3 rows in set (0.00 sec)

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征

基于DEM/LUCC等数据统计得到各集水区流域特征 提取不同集水区各类土地利用类型比例步骤1:划分集水区为独立面单元步骤2:批量掩膜提取得到各集水区土地利用类型比例步骤3:导入各集水区LUCC数据并统计得到各类型占比 提取坡度特征流域面坡度河道…

【机器学习基础】正则化

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战 欢迎订阅&am…

linux系统git仓库

git仓库 获取 Git 仓库(初始化仓库)创建裸库创建本地库 获取 Git 仓库(初始化仓库) 创建裸库 git仓库服务器创建useradd git passwd git mkdir /git-root/ cd /git-root/git init --bare shell.git #制作裸库chown -R git:gi…

【MySQL面试复习】发现了某个SQL语句执行很慢,如何进行分析?

系列文章目录 在MySQL中,如何定位慢查询? 系列文章目录发现了某个SQL语句执行很慢,如何进行分析? 发现了某个SQL语句执行很慢,如何进行分析? 一般SQL语句执行过慢的话需要考虑是否是聚合查询和多表查询&a…

DevOps VS 敏捷的区别是什么?

原文链接:DevOps VS 敏捷_软件开发生产线 CodeArts_理论实践_DevOps概览 当我们面对敏捷和DevOps的时候,总会不可避免的思考下面这些问题: 敏捷是什么?DevOps是什么?两者有什么区别?持续集成不是XP里面的…

万界星空科技MES系统,实现数字化智能工厂

万界星空科技帮助制造型企业解决生产过程中遇到的生产过程不透明,防错成本高,追溯困难,品质不可控,人工效率低下,库存积压,交期延误等问题,从而达到“降本增效”的目标。打通各个信息孤岛&#…

动态规划3,地下城游戏

思路: 经验题目要求 a.以某个位置为结尾… dp[i][j]表示:走到【i,j】位置的时候,所需要的最初最低血量。 b.以某个位置为起点 dp[i][j]表示,从【i,j】出发,到达终点,所需要的最低初…

2024.2.21 模拟实现 RabbitMQ —— 实现转发规则

目录 需求分析 直接交换机(Direct ) 主题交换机(Topic ) 扇出交换机(Fanout ) Topic 交换机转发规则 routingKey 组成 bindingKey 组成 匹配规则 情况一 情况二 情况三 实现 Router 类 校验 b…

vue-nextTick(nextTick---入门到离职系列)

官方定义 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM。 个人理解 假设我们更改了某个 dom 元素内部的文本&#xff0c;而这时候我们想直接打印这个更改之后的文本是需要 dom 更新之后才会实现的。 小案例 <tem…

前端导出下载文件后提示无法打开文件

问题 项目中的导出文件功能&#xff0c;导出下载后的文件打开提示如下&#xff1a; 原因 对返回的响应数据进行打印&#xff0c;发现响应数据为字符串格式&#xff0c;前期规划的后端返回数据应该 blob 对象的。后经排查后发现是请求头缺少了响应数据格式的配置&#xff0c;应…

petalinux_zynq7 驱动DAC以及ADC模块之四:python实现http_api

前文&#xff1a; petalinux_zynq7 C语言驱动DAC以及ADC模块之一&#xff1a;建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二&#xff1a;petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…

wpf 简单实验 数据更新 列表更新

1.概要 1.1 需求 一个列表提供添加修改删除的功能&#xff0c;添加和修改的内容都来自一个输入框 1.2 要点 DisplayMemberPath"Zhi"列表.ItemsSource datalist;(列表.SelectedItem ! null)(列表.SelectedItem as A).Zhi 内容.Text;datalist.Remove((列表.Selec…

紫外-可见吸收光谱法(UV-Vis)是最常用吸收光谱技术 市场持续扩大

紫外-可见吸收光谱法&#xff08;UV-Vis&#xff09;是最常用吸收光谱技术 市场持续扩大 紫外-可见吸收光谱法&#xff0c;也称为紫外-可见分光光度法&#xff0c;简称UV-Vis&#xff0c;利用样品分子在紫外和可见光激发下产生电子能级跃迁形成的吸收光谱&#xff0c;对元素进行…

JavaAPI常用类02

目录 基本数据类型封装类 包装类常用属性方法 8中基本数据类型各自所对应的包装类 以下方法以java.lang.Integer为例 代码 运行 装箱和拆箱 装箱 何为装箱 代码 范围问题 代码 运行 拆箱 代码 String类 概述 代码 运行 创建形式 画图讲解 代码 运行 构造…

Stable Diffusion 3正式发布,旨在巩固其在AI图像领域相对于Sora和Gemini的领先地位

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

JAVA工程师面试专题-《Mysql》篇

目录 一、基础 1、mysql可以使用多少列创建索引&#xff1f; 2、mysql常用的存储引擎有哪些 3、MySQL 存储引擎&#xff0c;两者区别 4、mysql默认的隔离级别 5、数据库三范式 6、drop、delete 与 truncate 区别&#xff1f; 7、IN与EXISTS的区别 二、索引 1、索引及索…

四、分类算法 - 朴素贝叶斯算法

目录 1、朴素贝叶斯算法 1.1 案例 1.2 联合概率、条件概率、相互独立 1.3 贝叶斯公式 1.4 朴素贝叶斯算法原理 1.5 应用场景 2、朴素贝叶斯算法对文本进行分类 2.1 案例 2.2 拉普拉斯平滑系数 3、API 4、案例&#xff1a;20类新闻分类 4.1 步骤分析 4.2 代码分析 …

Android中Transition过渡动画的简单使用

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一、布局xml文件代码如下&#xff1a; <?xml version"1.0" encoding&quo…

数字信号处理:傅里叶分析

本文主要参考视频如下&#xff1a; 数字信号处理9-1_线性时不变系统对复指数信号的响应_哔哩哔哩_bilibili 傅里叶分析的主要研究内容如下所示&#xff1a; 注意&#xff0c;计算机中使用的离散傅里叶变换并不是离散时间傅里叶变换&#xff1b; 前四种都是理论上的变换方式&…

rabbitmq知识梳理

一.WorkQueues模型 Work queues&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息。 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于消息的消费速度。长此以往&#xff0c;消息就会堆积越来越多&#xff0c…
推荐文章