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

MySQL之主从复制

概述:

将主库的数据 变更同步到从库,从而保证主库和从库数据一致。

它的作用是 数据备份,失败迁移,读写分离,降低单库读写压力

原理:

主服务器上面的任何修改都会保存在二进制日志( Bin-log日志) 里面。 从服务器上面启动一个I/O线程, 连接到主服务器上面请求读取二进制(Bin-log)日志,然后把读取到的二进制日志写到本地的Realy-log(中继日志)里面。 从服务器上面同时开启一个SQL线程,读取Realy-log(中继日志),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。

搭建:

1.准备服务器

2.配置主库

3.配置从库

4.测试主从复制

实践

1.首先准备俩台安装MySQL的纯净服务器 

主库:192.168.231.153

从库:192.168.231.136  

关闭防火墙与selinux

在俩台服务器做域名解析

vim /etc/hosts

192.168.231.153  master

192.168.231.136  slave

俩台服务器都做如下操作:
同步时间,修改时区
#ntpdate time.windows.com
#timedatectl  set-timezero Asia/Shanghai修改主机名
#hostnamectl set-hostname  zhuku
#hostnamectl set-hostname   congku配置静态ip
# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
将dhcp改为static
IPADDR=本机ip
GATEWAY=192.168.231.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8

清理环境在安装MySQL之前

俩台服务器都需要做的操作
[root@slave ~]#yum -y erase `rpm -qa |  grep -E "mysql|mariadb"`
[root@slave ~]# rm -rf /etc/my*  /var/lib/mysql* /var/log/mysql*
#检查一下,环境清理干净没有
[root@slave ~]# [[ ! -f /etc/my.cnf ]] && [[ ! -d /var/lib/mysql ]] && [[ ! -f /usr/bin/mysql ]] && echo "数据库已清除" || echo "数据库未清理"

安装mysql

启动服务:
# systemctl start mysqld
寻找密码
grep password  /var/log/mysqld.log 
也可以
mysqladmin -p"`awk '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password 'Qianfeng@123'
这条命令是直接登录MySQL,顺便将密码修改以后 可以登录也可以是,获取新的MySQL的密码
#  awk  '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log

2.配置主库:

创建日志目录并赋予权限

# mkdir /var/log/mysql
# chown  -R mysql.mysql /var/log/mysql

编辑主库服务器的配置文件 /etc/my.cnf

[mysqld]
log-bin=/var/log/mysql/mysql-bin       #启用二进制文件日志记录
server-id=1          # 服务id,保证整个集群环境唯一
read-only=0         #1是只读,0是读写

重启服务

# systemctl restart mysqld

在主库登录MySQL,创建用户

为了用户在从库中用来连接主库的账号


mysql>  grant replication slave on *.* to  '用户名'@'ip' identified by '密码';  
这是为用户分配主从复制的权限,并创建用户刷新:
mysql> flush  privileges;

查看二进制日志坐标

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      313 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3.配置从库

编辑从库服务器的配置文件my.cnf

[mysqld]
server-id=2
read-only=1     #普通用户一般只有只读,可以不写

重启mysql服务

# systemctl restart mysqld

登录mysql

此处登录的是你从库mysql的root用户登录的账号与密码,不是在主库创建的用户

mysql>  change master to master_host='主库的ip',master_user='连接主库用户名',master_password='连接主库用户的密码',master_log_file='日志文件名',mastre_log_pos='日志位置';日志位置就是在主库show master status查出来那个数字   ----313+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      313 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

当你第一次记不住这么多命令时,可以直接

mysql > ? change master to出现下列,直接复制CHANGE MASTER TOMASTER_HOST='source2.example.com',MASTER_USER='replication',MASTER_PASSWORD='password',MASTER_PORT=3306,MASTER_LOG_FILE='source2-bin.001',MASTER_LOG_POS=4,MASTER_CONNECT_RETRY=10;然后: mysql > ?e
进入文本编辑器内,将复制的 内容进行修改 然后保存即可

启动:

mysql> start slave;

查看主从同步状态:

mysql> show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.231.153   -----主库的ipMaster_User: itcast     -----用来连接主库的用户名   Master_Port: 3306  ------端口Connect_Retry: 60Master_Log_File: mysql-bin.000001          -----二进制日志名字Read_Master_Log_Pos: 313Relay_Log_File: congku-relay-bin.000002   -----中继日志名字Relay_Log_Pos: 479Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: Yes         --------主要看俩个IO线程是否成功启动Slave_SQL_Running: Yes         --------看SQL线程是否成功启动Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: 

4.测试主从复制

主库!
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| company            |
| db1                |
| mysql              |
| performance_schema |
| school             |
| sys                |
| xian               |
+--------------------+
8 rows in set (0.00 sec)从库:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| xian               |
+--------------------+
5 rows in set (0.00 sec)

这是因为配置主从复制是在主库已经存在这些库以后配置的

!!!!在主库创建库,创建表,写入数据
mysql> create database db2;
mysql> create table db2.zhucong(id int,name varchar(50),age int);mysql> insert into zhucong(id,name,age) values(1,'aaa',18),values(2,'bbb',19) ,(3,'ccc',20);mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   18 |
|    2 | bbb  |   19 |
|    3 | ccc  |   20 |
+------+------+------+
3 rows in set (0.00 sec)!!!在从库查看
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db2                |
| mysql              |
| performance_schema |
| sys                |
| xian               |
+--------------------+mysql> use db2;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| zhucong       |
+---------------+
1 row in set (0.00 sec)mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   18 |
|    2 | bbb  |   19 |
|    3 | ccc  |   20 |
+------+------+------+

修改主库中的表数据,查看从库是否有变化

主库:
mysql> update zhucong set age=21;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   21 |
|    2 | bbb  |   21 |
|    3 | ccc  |   21 |
+------+------+------+
3 rows in set (0.00 sec)查看从库:
mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   21 |
|    2 | bbb  |   21 |
|    3 | ccc  |   21 |
+------+------+------+
3 rows in set (0.00 sec)

配置好主从复制以后,从库记录的只是主库以后的日志文件,要想从库备份主库之前的可以,先将主库之前的数据库文件备份然后拷贝到从库,然后从库在进行恢复即可。

当从库所在的服务器关闭后,主库所执行操作,当从库服务器再次开启时,从库服务器会自动同步主库服务器

附加:

获取本机的uuid

[root@slave ~]# uuidgen 
b392cd4c-9e3d-4596-9a72-0805c2162c8f

修改本机的uuid

#  vim /var/lib/mysql/auto.cnf

base64加密与解密

[root@slave mysql]# echo “马龙” | base64 
4oCc6ams6b6Z4oCdCg==
[root@slave mysql]# echo "4oCc6ams6b6Z4oCdCg==" | base64 -d
“马龙”

相关文章:

MySQL之主从复制

概述: 将主库的数据 变更同步到从库,从而保证主库和从库数据一致。 它的作用是 数据备份,失败迁移,读写分离,降低单库读写压力 原理: 主服务器上面的任何修改都会保存在二进制日志( Bin-log日志…...

[leetcode 单调栈] 901. 股票价格跨度 M

设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。 例如,如果未来 7 天股票的价格是 [100…...

Java线程池:并发编程的利器

Java线程池:并发编程的利器 在多任务、高并发的时代,Java并发编程显得尤为重要。其中,Java线程池是一种高效的管理线程的工具,能够提高应用程序的性能和响应速度。本文将深入探讨Java线程池的工作原理、应用场景以及简单示例&…...

ARM硬件断点

hw_breakpoint 是由处理器提供专门断点寄存器来保存一个地址,是需要处理器支持的。处理器在执行过程中会不断去匹配,当匹配上后则会产生中断。 内核自带了硬件断点的样例linux-3.16\samples\hw_breakpoint\data_breakpoint.c static void sample_hbp_h…...

Java使用WebSocket(基础)

准备一个html页面 <!DOCTYPE HTML> <html> <head><meta charset"UTF-8"><title>WebSocket Demo</title> </head> <body><input id"text" type"text" /><button onclick"send()&…...

图像处理与计算机视觉--第五章-图像分割-自适应阈值分割

文章目录 1.自适应阈值分割介绍2.自适应阈值函数参数解析3.高斯概率函数介绍4.自适应阈值分割核心代码5.自适应阈值分割效果展示6.参考文章及致谢 1.自适应阈值分割介绍 在图片处理过程中&#xff0c;针对铺前进行二值化等操作的时候&#xff0c;我们希望能够将图片相应区域内所…...

记一次问题排查

1785年&#xff0c;卡文迪许在实验中发现&#xff0c;把不含水蒸气、二氧化碳的空气除去氧气和氮气后&#xff0c;仍有很少量的残余气体存在。这种现象在当时并没有引起化学家的重视。 一百多年后&#xff0c;英国物理学家瑞利测定氮气的密度时&#xff0c;发现从空气里分离出来…...

【Spring Boot】创建一个 Spring Boot 项目

创建一个 Spring Boot 项目 1. 安装插件2. 创建 Spring Boot 项目3. 项目目录介绍和运行注意事项 1. 安装插件 IDEA 中安装 Spring Boot Helper / Spring Assistant / Spring Initializr and Assistant插件才能创建 Spring Boot 项⽬ &#xff08;有时候不用安装&#xff0c;直…...

flutter中使用缓存

前言 在flutter项目中使用ListView或者PageView等有滚动条组件的时候&#xff0c;切换页面的时候&#xff0c;再切换回来会丢失之前的滑动状态&#xff0c;这个时候就需要需要使用缓存功能 缓存类 import package:flutter/material.dart;class KeepAliveWrapper extends Sta…...

京东数据分析平台:9月中上旬白酒消费市场数据分析

9月份&#xff0c;围绕白酒的热点不断。9月5日&#xff0c;瑞幸咖啡官微发布消息称&#xff0c;瑞幸与贵州茅台跨界合作推出的酱香拿铁刷新单品纪录&#xff0c;首日销量突破542万杯&#xff0c;销售额破1亿元。9月14日&#xff0c;贵州茅台官微发布消息称与德芙推出联名产品“…...

Linux安装 spark 教程详解

目录 一 准备安装包 二 安装 scala 三 修改配置文件 1&#xff09;修改 workers 文件 2&#xff09;修改 spark-env.sh文件 四 进入 spark 交互式平台 一 准备安装包 可以自行去 spark 官网下载想要的版本 这里准备了 spark3.1.2的网盘资源 链接: https://pan.baidu.com…...

动态内存管理函数(malloc,calloc,realloc,free)

动态内存函数 1.1malloc和free C语言提供了一个动态内存开辟的函数&#xff1a; void* malloc (size_t size); 这个函数向内存申请一块连续可用的空间&#xff0c;并返回指向这块空间的指针。 如果开辟成功&#xff0c;则返回一个指向开辟好空间的指针。如果开辟失败&#…...

云表|都有生产管理模块,MES和ERP有什么不同,该如何选择

MES和ERP是生产制造领域的两大知名系统&#xff0c;虽然早已声名鹊起&#xff0c;但仍有不少人难以明确区分两者的差异。下面将详细阐述这两个系统的不同之处。首先&#xff0c;要了解MES和ERP的定义。 MES系统&#xff1a;全称制造执行系统&#xff08;Manufacturing Executio…...

C语言 - 数组

目录 1. 一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3. 数组越界 4. 数组作为函数参数 4.1…...

Vue 中的插槽(Slot),有什么用,不同插槽的区别?

Vue 中的插槽&#xff08;Slot案例详解&#xff09; 是一种非常有用的功能&#xff0c;用于组件之间的内容分发和复用。以下是关于插槽的一些重要概念&#xff1a; 插槽的作用: 插槽允许你将组件的内容分发到其子组件中&#xff0c;以实现灵活的组件复用和自定义布局。通过插槽…...

Linux登录自动执行脚本

一、所有用户每次登录时自动执行。 1、在/etc/profile文件末尾添加。 将启动命令添加到/etc/profile文件末尾。 2、在/etc/profile.d/目录下添加sh脚本。 在/etc/profile.d/目录下新建sh脚本&#xff0c;设置每次登录自动执行脚本。有用户登录时&#xff0c;/etc/profile会遍…...

架构方法、模型、范式、治理

从架构方法、模型、范式、治理等四个方面介绍架构的概念和方法论、典型业务场景下的架构范式、不同架构的治理特点这3个方面的内容...

Linux 安全 - 内核提权

文章目录 前言一、简介1.1 prepare_creds1.2 commit_creds 二、demo参考资料 前言 在这篇文章&#xff1a;Linux 安全 - Credentials 介绍了 Task Credentials 相关的知识点&#xff0c;接下来给出一个内核编程提权的例程。 一、简介 内核模块提权主要借助于 prepare_creds …...

数字三角形加强版题解(组合计数+快速幂+逆元)

Description 一个无限行的数字三角形&#xff0c;第 i 行有 i 个数。第一行的第一个数是 1 &#xff0c;其他的数满足如下关系&#xff1a;如果用 F[i][j] 表示第 i 行的第 j 个数&#xff0c;那么 F[i][j]A∗F[i−1][j]B∗F[i−1][j−1] &#xff08;不合法的下标的数为 0 &a…...

MySQL:主从复制-基础复制(6)

环境 主服务器 192.168.254.1 从服务器&#xff08;1&#xff09;192.168.254.2 从服务器&#xff08;2&#xff09;192.168.253.3 我在主服务器上执行的操作会同步至从服务器 主服务器 yum -y install ntp 我们去配置ntp是需要让从服务器和我们主服务器时间同步 sed -i /…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...