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

集群技术

集群概述 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.rhkb.cn/news/261910.html

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

相关文章

flink sql 实战实例 及延伸问题:聚合/数据倾斜/DAU/Hive流批一体 等

flink sql 实战实例 及延伸问题 Flink SQL 计算用户分布Flink SQL 计算 DAU多topic 数据更新mysql topic接入mysql引入 upsert-kafka-connector 以1.14.4版本为例 数据倾斜问题:让你使用用户心跳日志(20s 上报一次)计算同时在线用户、DAU 指标…

【LeetCode】递归精选8题——基础递归、链表递归

目录 基础递归问题: 1. 斐波那契数(简单) 1.1 递归求解 1.2 迭代求解 2. 爬楼梯(简单) 2.1 递归求解 2.2 迭代求解 3. 汉诺塔问题(简单) 3.1 递归求解 4. Pow(x, n)(中等&…

机器人初识 —— 电机传动系统

一、背景 波士顿动力公司开发的机器人,其电机传动系统是其高性能和动态运动能力的核心部分。电机传动系统通常包括以下几个关键组件: 1. **电动马达**:波士顿动力的机器人采用了先进的电动马达作为主要的动力源,如伺服电机或步进…

【linux】shell命令 | Linux权限

目录 1. shell命令以及运行原理 2. Linux权限的概念 3. Linux权限管理 3.1 文件访问者的分类 3.2 文件类型和访问权限 3.3 文件权限值的表示方法 3.4 文件访问权限的相关设置方法 4. file指令 5. 目录的权限 6. 粘滞位 7. 关于权限的总结 1. shell命令以及运行原理 …

C++入门学习(三十二)二维数组定义方式

一维数组类似于一条“线”&#xff0c;而二维数组类似于一个“面”&#xff0c;二维数组也更像一个表格&#xff0c;由我们在“表格”中查询数据。 1、先定义数组&#xff0c;后赋值 int arr[2][3]; #include <iostream> using namespace std;int main() { int arr…

【2024软件测试面试必会技能】Jmeter_性能测试(5):负载测试和压力测试

负载测试 负载测试/容量测试&#xff1a;通过在测试过程中不断的调整负载&#xff0c;找到在多少用户量情况下&#xff0c;系统出现性能下降拐点&#xff1b;也被称为容量测试&#xff1b; 举例&#xff1a; 微信发送红包的负载测试&#xff1a; 1、找运维人员了解目前系统…

vue3中使用 tui-image-editor进行图片处理,并上传

效果图 下载包 pnpm i tui-image-editor pnpm i tui-color-picker调用组件 //html部分 <el-dialog v-model"imgshow" destroy-on-close width"40%" draggable align-center :show-close"true":close-on-click-modal"false">&l…

web安全学习笔记【13】——信息打点(3)

信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ爬虫&插件项目[1] #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源…

【Web前端笔记10】CSS3新特性

10 CSS3新特性 &#xff11;、圆角 &#xff12;、阴影 &#xff08;&#xff11;&#xff09;盒阴影 &#xff13;、背景渐变 &#xff08;&#xff11;&#xff09;线性渐变&#xff08;主要掌握这种就可&#xff09; &#xff08;&#xff12;&#xff09;径向渐变 &…

HTTP与HTTPS-HTTPS 的应用数据是如何保证完整性的?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTPS 的应用数据是如何保证完整性的? TLS 在实现上分为握手协议和记录协议两层 TLS 握手协议就是我们前面说的 TLS 四次握手的过程&#xff0c;负责协商加密算法和生成对称密钥&#xff0c;后续用此密…

【Python】实现一个类似于Glass2k的Windows窗口透明化软件

一 背景说明 网上看到一款Windows下的窗口透明化工具Glass2k&#xff08;Glass2k官网&#xff09;&#xff0c;可以简单地通过快捷键实现任意窗口的透明化&#xff0c;还挺方便的&#xff0c;想用Python自己实现一下类似的功能。 软件已经开源到&#xff1a;窗口透明化小工具开…

Java 面向对象进阶 14 抽象类和抽象方法(黑马)

抽象类不能实例化&#xff08;创建对象&#xff09;&#xff1a; 抽象类中不一定有抽象方法&#xff1a; 有抽象方法的类一定是抽象类&#xff1a; 可以有构造方法&#xff1a;&#xff08;作用&#xff1a;在创建子类对象时&#xff0c;给属性进行赋值的&#xff09; Perso…

RabbitMQ保证消息的可靠性

1. 问题引入 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送时丢失&#xff1a; 生产者发送的消息未送达exchange消息到达exchange后未到达queue MQ宕机&…

C++ Webserver从零开始:配置环境(九)——下载github的项目进行测试

前言 大家好&#xff0c;我又来更新Webserver的博客了。上一次更新这个专栏时2024.2.5号&#xff0c;离现在已经13天了。非常抱歉&#xff0c;中间隔了那么久。一方面是基础知识学完之后&#xff0c;就要开始自己写代码了。看基础知识和写代码是两回事&#xff0c;理论和实践的…

Git常用命令整理

在介绍安装和简单使用前&#xff0c;先看一下百度百科中的简介吧&#xff1a; ———————————————————————————————————————— Git --- The stupid content tracker, 傻瓜内容跟踪器。 Linux 是这样给我们介绍 Git 的&#xff1a; Git 是用…

Kafka进阶

文章目录 概要应用场景消息队列两种模式kafka的基础架构分区常见问题小结 概要 kafka的传统定义&#xff1a;kafka是一个分布式的基于发布\订阅模式的消息队列&#xff0c;主要用于大数据实时处理领域。 kafka的最新概念&#xff1a;kafka是一个开源的分布式事件流平台&#x…

UIKit 在 UICollectionView 中拖放交换 Cell 视图的极简实现

概览 UIKit 中的 UICollectionView 视图是我们显示多列集合数据的不二选择&#xff0c;而丰富多彩的交互操作更是我们选择 UICollectionView 视图的另一个重要原因。 如上图所示&#xff1a;我们实现了在 UICollectionView 中拖放交换任意两个 Cell 子视图的功能&#xff0c;这…

不要抱怨,不如抱 Java 运算符吧 (1)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

学习鸿蒙基础(5)

一、honmonyos的page路由界面的路径 新建了一个page,然后删除了。运行模拟器的时候报错了。提示找不到这个界面。原来是在路由界面没有删除这个page。新手刚接触找了半天才找到这个路由。在resources/base/profile/main_pages.json 这个和微信小程序好类似呀。 吐槽&#xf…

普中51单片机学习(串口通信)

串口通信 原理 计算机通信是将计算机技术和通信技术的相结合&#xff0c;完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类&#xff1a;并行通信与串行通信。并行通信通常是将数据字节的各位用多条数据线同时进行传送 。控制简单、传输速度快&#xff1…