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://xiahunao.cn/news/2804665.html

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

相关文章

电路设计(28)——交通灯控制器的multisim仿真

1.功能设定 南北、东西两道的红灯时间、绿灯时间均为24S,数码管显示倒计时。在绿灯的最后5S内,黄灯闪烁。有夜间模式:按下按键进入夜间模式。在夜间模式下,数码管显示计数最大值,两个方向的黄灯不停闪烁。 2.电路设计 …

【EI会议征稿通知】2024年软件自动化与程序分析国际学术会议(SAPA 2024)

2024年软件自动化与程序分析国际学术会议(SAPA 2024) 2024 International Conference on Software Automation and Program Analysis 在当今科技社会中,软件产业呈快速发展趋势,软件自动化与程序分析技术在提高软件质量、降低开发成本、提升…

fpga_cpu加速

一 cpu流水线执行指令 二 计算机体系结构 注:ARM就是典型的哈佛结构 三 cpu加速 同样采用流水线,哈佛结构的指令效率更高,通过指令预取,提高了流水线的并行度。

ROS1查看版本

目录 方法一方法二 方法一 rosversion -d方法二

[AutoSar]BSW_Com1 Can通信入门

目录 关键词平台说明一、车身CAN简介二、相关模块三、Can报文分类及信号流路径3.1 应用报文3.2 应用报文(多路复用multiplexer)3.3 诊断报文3.4 网络管理报文3.5 XCP报文(标定报文) 关键词 嵌入式、C语言、autosar、OS、BSW 平台…

微服务学习

一、服务注册发现 服务注册就是维护一个登记簿,它管理系统内所有的服务地址。当新的服务启动后,它会向登记簿交待自己的地址信息。服务的依赖方直接向登记簿要Service Provider地址就行了。当下用于服务注册的工具非常多ZooKeeper,Consul&am…

RT-Thread 时钟 timer delay 相关

前言 此处,介绍对delay 时钟 timer 这几部分之间的关联和相关的知识点;本来只是想介绍一下 delay的,但是发现说到delay 不先 提到 先验知识 晶振\时钟\时钟节拍\定时器 好像没法解释透彻,所以就变成了 晶振\时钟\时钟节拍\定时器\delay 的很简单的概括一遍;并附带上能直接运行的…

软件性能测试和功能测试有何联系和区别?第三方软件检测机构简析

软件性能测试和功能测试是软件开发过程中非常重要的两个环节。从根本上说,它们都是为了保证软件质量和可靠性,但它们的目标和方法却有所不同。 软件性能测试是评估软件在特定负载下的性能表现,包括响应时间、吞吐量、并发能力等指标。它通过…

LeetCode刷题日志-200.岛屿数量

思路: 遍历二维数组,每当遇到一个‘1’进行一次dfs,根据规则,将本次dfs到的所有元素标记为‘0’(放置重复dfs,并且能dfs到的元素一定是与当前遍历到的元素属于统一岛屿。)最后,dfs的…

Python isinstance函数

在Python编程中,isinstance()函数是一个常用的内置函数之一。它用于检查一个对象是否是某个类(或者某个类的子类)的实例。这个函数非常有用,可以在编写代码时进行类型检查,确保代码的健壮性和可靠性。本文将深入探讨Py…

分组密码的概念

分组密码 1. 分组密码的概念 分组密码(block cipher)又称为秘密钥密码或对称密码。使用分组密码对明文加密时,首先对明文分组,每组长度相同,然后对每组明文分别加密得到等长的密文。 在分组密码中,明文被分割多个块,加密后的密文也是多个块。分组密码大概结果如图所示…

【Web前端笔记11】JavaScript基础与变量

前言 11 JavaScript基础与变量 一、Js简介 1、JavaScript核心部分: 2、有非常广泛的使用领域 3、JavaScript与ECMAScript的关系 4、JavaScript版本 二、JavaScript名词解释 三、变量命名规则 四、变量类型 六大基本数据类型: 1、数字类型 2、…

LiveQing视频点播流媒体RTMP推流服务功能-支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务

LiveQing视频点播流媒体RTMP推流服务功能支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、验证HTTPS服务3、为什么要开启HTTPS3.1、安全性要求…

MATLAB使用绘图plot制作动态GIF

文章目录 1 前言2 DemoDemo 1 - 不使用函数Demo 2 - 使用函数 1 前言 在PPT展示或者博客创作中,有时需要插入动态图如GIF,来演示算法效果或者结果。在MATLAB中,可以通过一些代码,将绘图plot转化为动态的GIF。 其大致方法为&…

【计网】TCP的三次握手四次挥手

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 三次握手(Connection Establishment) 四次挥手(Connection Termination) 结语 我…

【安卓逆向】app防止截屏分析与去除

本次分析的app name为:5paH5qGI54uX 这款应用打开之后里面的内容是不允许截图的,防止截图分析:Android应用防止截屏_landroid/view/window;->setflags 0x2000-CSDN博客 App防止恶意截屏功能的方法:iOS、Android和鸿蒙系统的实…

linux监控系统资源命令

当前CPU内核版本 [rootVM-12-12-centos ~]# cat /proc/version Linux version 3.10.0-1160.11.1.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Fri Dec 18 16:34:56 UTC 2020 当前系统版本 [rootVM-12-1…

C++最佳实践之编译篇

C最佳实践之工程编译 在大型c/c工程开发中,往往会涉及多级CMakeLists.txt的调用,并且调用方式错综复杂,主要有以下两种方式: 1. 子目录中的CMakeList.txt独立生成目标,不作为主目标生成过程的依赖关系(比…

视频评论抓取软件|抖音数据抓取工具

最近我们推出了一款基于C#语言开发的工具。这款工具提供了丰富的功能,旨在帮助用户轻松获取抖音视频内容。让我们一起来详细介绍一下这款工具的主要功能模块: 1. 批量视频提取: 工具提供了便捷的批量视频提取功能,用户只需输入关…

挑战30天学完Python:Day16 日期时间

📘 Day 16 🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点…