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

MySQL主从同步详解

文章目录

  • MySQL主从同步概述
    • MySQL主从同步原理
    • MySQL主从同步结构模式
    • MySQL主从同步搭建
      • 搭建步骤
      • 一主一从
      • 实验环境
        • master主机
        • slave1主机
        • 验证主从同步
      • 一主多从
        • master主机
        • slave2主机
        • 验证主从同步
    • MySQL主从同步复制模式
  • 读写分离技术
    • MaxScale简介
      • 部署MaxScale服务器
      • 授权用户
        • master主机操作
        • slave主机操作
        • 启动服务
      • 测试读写分离服务

MySQL主从同步概述

  • 实现不同MySQL服务器之间数据实时同步的解决方案
  • 通过主从同步可以实现数据备份的作用

MySQL主从同步原理

在这里插入图片描述

MySQL主从同步结构模式

  • 一主一从
  • 一主多从
  • 链式复制
  • 互为主从(扩展实验)

MySQL主从同步搭建

搭建步骤

- master(主服务器)
​ 1)开启binlog日志
​ 2)授权主从同步用户
​ 3)备份已有数据
- slave1(从服务器)
​ 1)设置server_id,可不开启binlog日志
​ 2)还原数据(实现主从结构前保证服务器基础数据统一)
​ 3)搭建主从关系

一主一从

在这里插入图片描述

实验环境

使用模板机克隆实验虚拟机(配置如下信息)

主机名IP地址角色
master192.168.8.100主服务器
slave1192.168.8.101从服务器1

配置master主机

[root@template ~]# hostnamectl set-hostname master					#配置主机名
[root@master ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.100/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes 
[root@master ~]# nmcli connection up ens160

配置slave主机

[root@template ~]# hostnamectl set-hostname slave1
[root@slave1 ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.101/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes 
[root@slave1 ~]# nmcli connection up ens160

2台主机均使用WindTerm远程链接

将master和slave1搭建成MySQL主从结构

master主机
[root@master ~]# dnf -y install mysql-server mysql
[root@master ~]# systemctl start mysqld
[root@master ~]# systemctl enable mysqld

master主机指定server_id,开启binlog日志

[root@master ~]# vim /etc/my.cnf.d/mysql-server.cnf
#...此处省略1万字,在第4行下方写入,不要写行号!...13 [mysqld]14 server_id=10015 log_bin=master#...此处省略1万字...
 [root@master ~]# systemctl restart mysqld				#重启动mysqld服务[root@master ~]# ls /var/lib/mysql/master.*			#验证是否成功
/var/lib/mysql/master.000001  /var/lib/mysql/master.index
[root@master ~]# mysqladmin -uroot password '123qqq...A'	#修改密码

用户授权(用户slave1,密码为slavepwd,这个用户用于从服务器连接主服务器同步数据)

  • 使用 mysql_native_password 插件验证该用户的密码
  • REPLICATION SLAVE 表示使用户拥有向主服务器复制的权限
mysql> CREATE USER 'slave1'@'%' IDENTIFIED with mysql_native_password BY 'slavepwd';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';

查看日志信息

mysql> SHOW MASTER STATUS ;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| master.000002 |      984 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

备份master主机上的数据(虽然现在没有多余的数据,但工作中一定会有旧数据)

#备份已有数据
[root@master ~]# mysqldump -hlocalhost -uroot -p'123qqq...A' -A > ab1.sql#同步备份文件
[root@master ~]# scp ab1.sql 192.168.8.101:/root				
slave1主机
  • 运行数据库服务
  • 指定 server_id
  • 指定主服务器信息
  • 启动 slave 进程
  • 查看状态
  • 需要先将master上的数据手动还原至slave主机
  • 确保master主机和slave主机UUID是不相同的,因为都是从模板克隆的裸机,所以这里可以不用考虑该问题

slave1主机安装mysql

[root@slave1 ~]# dnf -y install mysql-server mysql 

slave1主机修改server_id

[root@slave1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
...此处省略1万字...13 [mysqld]14 server_id=10115 datadir=/var/lib/mysql...此处省略1万字...
[root@slave1 ~]# systemctl restart mysqld						#重启服务

slave1主机设置密码

[root@slave1 ~]# mysqladmin -uroot password '123qqq...A'		#修改密码

还原master主机备份过来的数据

[root@slave1 ~]# mysql  -uroot -p'123qqq...A' <  /root/ab1.sql 	#数据还原

slave1指定主服务器信息

####指定主服务器信息
#MASTER_HOST=       				指定主服务器的IP地址
#MASTER_USER=       				指定主服务器授权用户 
#MASTER_PASSWORD=   				指定授权用户的密码
#MASTER_LOG_FILE=   				指定主服务器binlog日志文件(到master上查看)
#MASTER_LOG_POS=   					指定主服务器binlog日志偏移量(去master上查看)
mysql> CHANGE MASTER TO -> MASTER_HOST="192.168.8.100",				#指定自己主服务器master的IP地址-> MASTER_USER="slave1", -> MASTER_PASSWORD="slavepwd",-> MASTER_LOG_FILE="master.000001",-> MASTER_LOG_POS=655;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> START SLAVE;					#启动SLAVE进程
mysql> SHOW SLAVE STATUS \G			#查看主从同步状态
验证主从同步

主服务器master写入数据验证

mysql> CREATE DATABASE sre;			#新建sre库

从服务器slave1写入数据验证

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sre                |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

主服务器master写入数据验证

mysql> CREATE TABLE sre.t1(id INT,name CHAR(10));
mysql> INSERT INTO sre.t1 VALUES(1,"Sam");
mysql> INSERT INTO sre.t1 VALUES(2,"Jack");

从服务器slave1写入数据验证

mysql> SELECT * FROM sre.t1;
+------+------+
| id   | name |
+------+------+
|    1 | Sam  |
|    2 | Jack |
+------+------+

一主多从

在这里插入图片描述

主机名IP地址角色
master192.168.8.100主服务器
slave1192.168.8.101从服务器1
slave2192.168.8.102从服务器2

使用模板机克隆slave2虚拟机

[root@template ~]# hostnamectl set-hostname slave1
[root@slave2 ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.102/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes 
[root@slave2 ~]# nmcli connection up ens160
master主机

master主机需要重新完全备份(因为相对与上次备份已经产生了新数据)

[root@master ~]# mysqldump -uroot -p'123qqq...A' -A > ab2.sql
[root@master ~]# scp ab2.sql 192.168.8.102:/root
slave2主机

slave2主机操作

[root@slave2 ~]# dnf -y install mysql-server mysql

slave2主机修改server_id

[root@slave2 ~]# vim /etc/my.cnf...此处省略1万字...13 [mysqld]14 server_id=10215 datadir=/var/lib/mysql...此处省略1万字...
[root@slave2 ~]# systemctl restart mysqld		#重启服务
[root@slave2 ~]# systemctl enable mysqld		#将服务设置为开机自启

slave2主机设置密码

[root@slave2 ~]# mysqladmin -hlocalhost -uroot password '123qqq...A'

还原master主机备份过来的数据(使用ab2.sql)

[root@slave2 ~]# mysql  -uroot  -p'123qqq...A' <  /root/ab2.sql		#数据还原

slave2指定主服务器信息

  • MASTER_LOG_FILE和MASTER_LOG_POS指定为master主机现使用的文件(SHOW MASTER STATUS查看)

  • master主机查看(每个人都不一样,以自己的为准)

mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| master.000001 |     1599 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
####slave2指定主服务器信息
#MASTER_HOST=       				指定主服务器的IP地址
#MASTER_USER=       				指定主服务器授权用户 
#MASTER_PASSWORD=   				指定授权用户的密码
#MASTER_LOG_FILE=   				指定主服务器binlog日志文件(到master上查看)
#MASTER_LOG_POS=   					指定主服务器binlog日志偏移量(去master上查看)
mysql> CHANGE MASTER TO -> MASTER_HOST="192.168.8.100",				#指定自己主服务器master的IP地址-> MASTER_USER="slave1", -> MASTER_PASSWORD="slavepwd",-> MASTER_LOG_FILE="master.000001",-> MASTER_LOG_POS=1599;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> START SLAVE;					#启动SLAVE进程
mysql> SHOW SLAVE STATUS \G			#查看主从同步状态
验证主从同步

master测试数据写入

mysql> CREATE TABLE sre.t2(id INT,name CHAR(10),male ENUM("male","female"));
mysql> INSERT INTO sre.t2 VALUES(1,"Sam","male");
mysql> INSERT INTO sre.t2 VALUES(2,"Janner","female");

slave1验证数据是否同步

mysql> USE sre;
mysql> SHOW TABLES;						#多出了sre.t2表
mysql> SELECT * FROM sre.t2;
+------+--------+--------+
| id   | name   | male   |
+------+--------+--------+
|    1 | Sam    | male   |
|    2 | Janner | female |
+------+--------+--------+
2 rows in set (0.00 sec)

slave2验证数据是否同步

mysql> USE sre;
mysql> SHOW TABLES;						#多出了sre.t2表
mysql> SELECT * FROM sre.t2;
+------+--------+--------+
| id   | name   | male   |
+------+--------+--------+
|    1 | Sam    | male   |
|    2 | Janner | female |
+------+--------+--------+
2 rows in set (0.00 sec)

MySQL主从同步复制模式

MySQL主从同步复制模式指的是主服务器(执行写操作的服务器)什么时候将SQL命令的执行结果返还给客户端

分为三种情况:

  • 异步复制(默认)

    • 主节点在执行写操作后,将写操作的日志异步发送到从节点。主节点不会等待从节点的同步完毕,直接讲结果返回给客户端,因此主节点可以以较高的速度执行写操作,而从节点可能会有一定的延迟。由于异步复制的延迟,如果主节点故障或数据丢失,可能会造成从节点数据与主节点不一致。
  • 全同步复制

    • 在全同步复制中,主节点在执行写操作后,等待所有从节点全部同步完数据之后,在将结果返回至客户端这样可以确保主节点和从节点的数据一致性,但会影响主节点的写操作速度,因为主节点需要等待从节点的确认。
  • 半同步复制

    • 在半同步复制中,主节点在执行写操作后,等待至少一个从节点同步完数据再将结果返回至客户端。这样可以提高主节点的写操作速度,同时保证主节点和至少一个从节点的数据一致性。但如果从节点故障或延迟高,可能会造成主节点的等待时间增加。

读写分离技术

  • 使用模板机克隆实验虚拟机(配置如下信息,配置IP地址信息,这里不再重复演示)
  • master和slave1继续沿用上方主从关系
主机名IP地址角色
master192.168.8.100主服务器
slave2192.168.8.102从服务器
maxscale192.168.8.99读写分离服务器

MaxScale简介

  • MaxScale 代理软件
    • 由 MySQL 的兄弟公司 MariaDB 开发
    • 下载地址 https://downloads.mariadb.com/files/MaxScale
  • 将maxscale-24.02.1-1.rhel.8.x86_64.rpm 上传至maxscale主机的/root

部署MaxScale服务器

maxscale主机安装maxscale

[root@maxscale ~]# dnf -y install lrzsz
[root@maxscale ~]# dnf -y localinstall maxscale-24.02.1-1.rhel.8.x86_64.rpm 

maxscale主机修改修改读写分离服务配置文件

[root@maxscale ~]# cp /etc/maxscale.cnf  /etc/maxscale.cnf.bak #先备份,以防改错
[root@maxscale ~]# vim /etc/maxscale.cnf						#修改主配置文件
...12 [maxscale]13 threads=auto
...
#指定要代理的数据库服务器,[server2]部分需要自己手工定义21 [server1]22 type=server23 address=192.168.8.100					#指定主服务器地址24 port=330625 [server2]26 type=server27 address=192.168.8.102					#指定从服务器地址28 port=3306 
...
#指定监控用户maxscalemon,用于登录后端服务器,检查服务器的运行状态和主从状态47 [MariaDB-Monitor]48 type=monitor49 module=mariadbmon50 servers=server1,server2					#上边的定义的主机51 user=maxscalemon						#指定监控用户52 password=123qqq...A						#指定监控用户的密码53 monitor_interval=2s...86 #[Read-Only-Service]					#只读服务不需要,这段全部注释87 #type=service88 #router=readconnroute89 #servers=server190 #user=service_user91 #password=service_pw92 #router_options=slave
...
#定义读写分离服务器配置99 [Read-Write-Service]
100 type=service
101 router=readwritesplit
102 servers=server1,server2				#指定读写分离服务器	
103 user=maxscalerouter					#指定路由用户
104 password=123qqq...A					#指定路由用户密码			...
#只读服务配置信息加上注释
118 #[Read-Only-Listener]
119 #type=listener
120 #service=Read-Only-Service
121 #protocol=mariadbprotocol
122 #port=4008...
#读写分离配置信息,默认端口号为4006
124 [Read-Write-Listener]
125 type=listener
126 service=Read-Write-Service
127 protocol=mariadbprotocol
128 port=4006

授权用户

  • 根据/etc/maxscale.cnf配置要求,需要在master主机和slave主机授权用户
    • maxscalemon用户,密码为123qqq…A
    • maxscalerouter用户,密码为123qqq…A
    • 创建监控用户maxscalemon,用于登录后端服务器,检查服务器的状态
    • 创建路由用户maxscalerouter,检测客户端的用户名和密码在后端数据库中是否存在
    • REPLICATION SLAVE:该权限能够同步数据,查看从服务器上slave的状态;
    • REPLICATION CLIENT:该权限可以获取数据库服务的状态(数据库服务是否允许,主从是否正常)
master主机操作

授权maxscalemon用户

[root@master ~]# mysql -uroot -p'123qqq...A'
mysql> CREATE USER 'maxscalemon'@'%' IDENTIFIED WITH mysql_native_password BY '123qqq...A';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'maxscalemon'@'%';

授权maxscalerouter用户

  • 只是检查用户是否存在,所以此用户只需对mysql库下表有查询权限即可
mysql> CREATE USER 'maxscalerouter'@'%' IDENTIFIED WITH mysql_native_password BY '123qqq...A';
mysql> GRANT SELECT ON mysql.* TO 'maxscalerouter'@'%';
slave主机操作
  • 由于已经设置了主从同步,所slave主机也可以不用操作,因为已经自动同步,如果未同步则手工创建

授权maxscalemon用户

[root@slave2 ~]# mysql -uroot -p'123qqq...A'
mysql> CREATE USER 'maxscalemon'@'%' IDENTIFIED WITH mysql_native_password BY '123qqq...A';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'maxscalemon'@'%';

授权maxscalerouter用户

  • 只是检查用户是否存在,所以此用户只需对mysql库下表有查询权限即可
mysql> CREATE USER 'maxscalerouter'@'%' IDENTIFIED WITH mysql_native_password BY '123qqq...A';
mysql> GRANT SELECT ON mysql.* TO 'maxscalerouter'@'%';
启动服务

maxscale主机操作

[root@maxscale ~]# systemctl restart maxscale
[root@maxscale ~]# systemctl enable maxscale

测试读写分离服务

master主机授权测试用户

[root@master ~]# mysql -uroot -p'123qqq...A'
mysql> CREATE USER 'sam'@'%' IDENTIFIED WITH mysql_native_password BY '123qqq...A';
mysql> GRANT ALL ON *.* TO 'sam'@'%';

maxscale充当客户端访问读写分离服务器

[root@maxscale ~]# dnf -y install mysql				#安装mysql连接命令
[root@maxscale ~]# mysql -h192.168.8.99 -P4006 -usam -p"123qqq...A"
mysql> CREATE DATABASE study;						#创建study库
mysql> CREATE TABLE study.t1(id INT,name VARCHAR(20));  	#创建表
mysql> INSERT INTO study.t1 VALUES(1,'tom');				#插入数据

master主机验证查看数据

[root@master ~]# mysql -uroot -p'123qqq...A'
mysql> SELECT * FROM study.t1;
+------+------+
| id   | name |
+------+------+
|    1 | tom  |
+------+------+

slave主机验证查看数据

[root@slave2 ~]# mysql -uroot -p''123qqq...A'
mysql> SELECT * FROM study.t1;
+------+------+
| id   | name |
+------+------+
|    1 | tom  |
+------+------+

slave主机插入数据,主服务器不会同步;

使用maxscale充当客户端访问验证,能看到slave插入的数据,代表查询操作是slave主机提供服务;

slave主机操作

mysql> INSERT INTO study.t1 VALUES(2,"jerry");			#插入数据

maxscale充当客户端主机访问验证

[root@maxscale ~]# mysql -h192.168.8.99 -P4006 -usam -p"123qqq...A"
mysql> SELECT * FROM study.t1;							#能查询到代表读写分离成功
+------+-------+
| id   | name  |
+------+-------+
|    1 | tom   |
|    2 | jerry |
+------+-------+
2 rows in set (0.00 sec)

相关文章:

MySQL主从同步详解

文章目录 MySQL主从同步概述MySQL主从同步原理MySQL主从同步结构模式MySQL主从同步搭建搭建步骤一主一从实验环境master主机slave1主机验证主从同步 一主多从master主机slave2主机验证主从同步 MySQL主从同步复制模式 读写分离技术MaxScale简介部署MaxScale服务器授权用户maste…...

Python 单元测试基础脚本

单元测试的概念&#xff1a; 单元测试是针对程序中最小可测试单元进行检查和验证的过程。在Python中&#xff0c;通常一个函数或方法就是一个测试单元。 unittest框架&#xff1a; Python自带了一个名为unittest的单元测试框架&#xff0c;它受JUnit启发&#xff0c;为开发者提…...

鸿蒙开发-在ArkTS中实现socket功能

基本概念 在 ArkTS 中实现 Socket 功能主要涉及到网络通信中的套接字(Socket)编程。Socket 是一种用于在不同设备(如客户端和服务器)之间进行双向通信的接口&#xff0c;它允许应用程序发送和接收数据。在网络编程中&#xff0c;有两种主要的 Socket 类型&#xff1a;基于 TCP…...

【设计模式系列】策略模式(二十四)

一、什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是软件设计模式中的一种行为型模式。它定义了一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以互换使用&#xff0c;算法的变化不会影响使用算法的用户。策略模式让算法的变化独立于…...

D92【python 接口自动化学习】- pytest基础用法

day92 pytest的skip和skipif用法 学习日期&#xff1a;20241208 学习目标&#xff1a;pytest基础用法 -- pytest的skip和skipif用法 学习笔记&#xff1a; 测试用例跳过 skip和skipif用法&#xff0c;测试用例跳过 pytest.mark.skip 跳过标记的用例 pytest.mark.skipif(1 …...

spring中的@Bean和@Component有什么区别?

定义和作用范围 Bean&#xff1a; 是一个方法级别的注解。它主要用于在Java配置类&#xff08;使用Configuration注解的类&#xff09;中定义一个Bean。这个方法返回的对象会被Spring容器管理。例如&#xff0c;假设我们有一个配置类AppConfig&#xff1a; import org.sprin…...

docker入门

安装 官方下载 系统&#xff1a;CentOS 7.9 配置docker yum源。 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo启动docker 关机后下次开机又得执行 sudo systemctl start dock…...

HDR视频技术之六:色调映射

图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域&#xff0c;因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备&#xff08;例如普通人家使用的电视&#xff0…...

MySQL高可用之MHA

华子目录 MHA概述为什么要用MHA什么是MHAMHA的组成MHA的特点故障切换备选主库的算法 MHA工作原理MHA环境搭建环境准备开始部署MHAMHA软件使用介绍配置MHA的管理环境创建MHA管理的模板文件 测试 模拟故障MySQL-master切换手动切换&#xff08;在master存活状态下切换&#xff09…...

区块链——基本概念、技术原理

一、区块链基本概念 &#xff08;一&#xff09;区块链定义 区块链&#xff08;Blockchain&#xff09;是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。通俗一点说&#xff0c;区块链技术就指一种全民参与记账的方式&#xff0c;是一种防篡改、共享的、可…...

docker 部署共享文档ZFile

1、拉取ZFile镜像 docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/tirling-pdf/zfile:latest 2、创建文件夹和进入文件夹 mkdir zfile && cd zfile 3、创建docker-compose.yml配置文件。 vim docker-compose.yml version: 3.3 service…...

C# 自定义组件实现表格的多层表头功能

在 WinForms 中&#xff0c;想要实现多层表头功能时&#xff0c;DataGridView 本身并不支持该功能&#xff0c;而且又不希望使用第三方控件&#xff0c;因此选择通过自定义组件来实现这一需求。 首先&#xff0c;展示一下程序实现的效果&#xff1a; 接下来&#xff0c;创建一…...

给Squid代理添加HTTP basic认证

HTTP basic认证是一种简单的认证机制&#xff0c;要求用户在请求资源前提供有效的用户名和密码。 实例: 给Squid代理添加HTTP basic认证 要求: 只允许用户名为peter,密码为123的请求通过认证, 其他请求返回407(Proxy认证失败) 步骤 1 使用htpasswd工具&#xff0c;生成用户…...

使用伪装IP地址和MAC地址进行Nmap扫描

使用伪装IP地址和MAC地址进行Nmap扫描 在某些网络设置中&#xff0c;攻击者可以使用伪装的IP地址甚至伪装的MAC地址进行系统扫描。这种扫描方式只有在可以保证捕获响应的情况下才有意义。如果从某个随机的网络尝试使用伪装的IP地址进行扫描&#xff0c;很可能无法接收到任何响…...

Oceanbase离线集群部署

准备工作 两台服务器 服务器的配置参照官网要求来 服务器名配置服务器IPoceanbase116g8h192.168.10.239oceanbase216g8h192.168.10.239 这里选oceanbase1作为 obd机器 oceanbase安装包 选择社区版本的时候自己系统的安装包 ntp时间同步rpm包 联网机器下载所需的软件包 …...

剑指Offer-1 存在重复元素

记录学习过程 题目连接 题目连接 题目描述 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 示例一、 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;true 解释&…...

react跳转传参的方法

传参 首先下载命令行 npm react-router-dom 然后引入此代码 前面跳转的是页面 后面传的是你需要传的参数接参 引入此方法 useLocation()&#xff1a;这是 react-router-dom 提供的一个钩子&#xff0c;用于获取当前路由的位置对象location.state&#xff1a;这是从其他页面传…...

【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤

&#x1f399;告诉你&#xff1a;Java是世界上最美好的语言 &#x1f48e;比较擅长的领域&#xff1a;前端开发 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持续下去的动力&#xff01; 目录 一. 作者有话说 …...

CSS学习记录04

CSS边框 CSS border 属性指定元素边框的样式、宽度和颜色。border-style 属性指定要显示的边框类型。dotted - 定义点线边框dashed - 定义虚线边框solid - 定义实线边框double - 定义双边框groove - 定义3D坡口边框&#xff0c;效果取决于border-color值ridge - 定义3D脊线边框…...

Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例

1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId><version>3.1.6</version></dependency> 2、配置application.yml 加入Kafk…...

vue3【实战】图表【组件封装】Chart ( 原生 ECharts ,支持自适配屏幕缩放,动态响应图表配置修改)

效果预览 技术方案 vue3 ( vite | TS | AutoImport ) Element Plus UnoCSS ECharts 技术要点 ECharts 实例的类型 let myChart: echarts.ECharts | null null默认生成随机 id id: {type: String,default: () > Math.random().toString(36).substring(2, 8)},深度监听图…...

Oracle系统性能监控工具oswatcher演示

1、关于 OSW OSWatcher 的使用符合 Oracle 的标准许可条款&#xff0c;并且不需要额外的许可即可使用&#xff01;&#xff01;&#xff01;&#xff01; OSWatcher (oswbb) 是一种 UNIX shell 脚本的集合&#xff0c;主要用于收集和归档操作系统和网络的度量&#xff0c;以便…...

Unix、GNU、BSD 风格中 ps 参数的区别

注&#xff1a;本文为“不同风格中 ps 命令参数的区别”相关文章合辑。 未去重。 BSD 风格和 UNIX 风格中 ps 参数的区别 作者&#xff1a;Daniel Stori 译者&#xff1a;LCTT Name1e5s | 2017-06-17 10:53 One Last Question ps aux 以及 ps -elf 都是查看进程的方式&…...

Jenkins环境一站式教程:从安装到配置,打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1

文章目录 Jenkins环境一站式教程&#xff1a;从安装到配置&#xff0c;打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1一、环境准备1.1 机器规划1.2 环境配置1.2.1 设置主机名1.2.2 停止和禁用防火墙1.2.3 更新系统 二、安装配置Jenkins2.1 安装JDK…...

百度文心一言全解析

一、技术基础 模型架构 多层神经网络构建&#xff1a;深度神经网络结构&#xff0c;包含多个隐藏层&#xff0c;有效处理复杂语言信息。注意力机制运用&#xff1a;精准聚焦文本关键部分&#xff0c;理解语义关联与重要性分布。多头注意力并行&#xff1a;多维度分析文本&#…...

在python中使用布尔逻辑

布尔是python中常见类型。它的值只能是两项内容之一&#xff1a;true或false. 编写"if"语句 若要在python中表达条件逻辑&#xff0c;可以使用if语句。——编写If语句离不开逻辑运算符&#xff1a;等于、不等于、小于、大于或等于、大于和大于或等于。 在python中…...

【Web】AlpacaHack Round 7 (Web) 题解

Treasure Hunt flag在md5值拼接flagtxt的文件里&#xff0c;如 d/4/1/d/8/c/d/9/8/f/0/0/b/2/0/4/e/9/8/0/0/9/9/8/e/c/f/8/4/2/7/e/f/l/a/g/t/x/t 访问已经存在的目录状态码是301 访问不存在的目录状态码是404 基于此差异可以写爆破脚本 这段waf可以用url编码绕过 做个lab …...

汽车48V电气系统

汽车48V电气系统 汽车48V电气系统汽车48V电气系统设计汽车48V电气系统测试汽车48V系统是48V供电和12V供电共存的么?48V供电系统是如何与12V供电系统共存的?48V电气系统测试的难点有哪些?在汽车48V电气系统通信测试中,如何向12V的控制器和48V的控制器供电?汽车48V电气系统通…...

完美解决Qt Qml窗口全屏软键盘遮挡不显示

1、前提 说明&#xff1a;我使用的是第三方软键盘 QVirtualKeyboard QVirtualKeyboard: Qt5虚拟键盘支持中英文,仿qt官方的virtualkeyboard模块,但使用QWidget实现。 - Gitee.com 由于参考了几篇文章尝试但没有效果&#xff0c;链接如下&#xff1a; 文章一&#xff1a;可能…...

docker逃逸总结

一、 检查是否在docker容器中 通过以下两个地方来判断 # 是否存在此文件 ls -al /.dockerenv# 在其中是否包含docker字符串 cat /proc/1/cgroup除了上面两种外还有其他方式判断&#xff0c;如检测mount、fdisk -l查看硬盘 、判断PID 1的进程名等也可用来辅助判断。 容器逃逸…...

DSA 和 ECDSA 签名算法

DSA 和 ECDSA 签名算法 基本介绍Java实现DSA创建密钥对签名验签 ECDSA创建密钥对签名验签 Go实现ECDSA创建密钥对签名验签 DSA创建密钥对签名验签 基本介绍 DSA 是一种基于离散对数问题的数字签名算法。它使用私钥和公钥对来进行签名和验证操作。 ECDSA 是基于椭圆曲线密码体制…...

Scrapy的简单实现

Scrapy的简单实现 1. Scrapy是什么 Scrapy是一个用于抓取网站&#xff08;即网页爬取&#xff09;和从网页中提取结构化数据的开源框架。它为编写网络爬虫来抓取网站内容提供了高效、灵活的方式&#xff0c;并将这些信息以常见的格式保存&#xff0c;如JSON、CSV或XML。Scrap…...

Python之爬虫入门--示例(2)

一、Requests库安装 可以使用命令提示符指令直接安装requests库使用 pip install requests 二、爬取JSON数据 &#xff08;1&#xff09;、点击网络 &#xff08;2&#xff09;、刷新网页 &#xff08;3&#xff09;、这里有一些数据类型&#xff0c;选择全部 &#xff08…...

JS的for in和for of

for...in 语句 工作原理 遍历属性&#xff1a;for...in 遍历对象的所有可枚举属性&#xff0c;这些属性不仅限于对象本身的属性&#xff0c;还包括原型链上的可枚举属性。返回键名&#xff1a;每次迭代时&#xff0c;循环变量会得到当前属性的键&#xff08;即字符串形式的属…...

Spring IoC的基本概念

引言 在 Java 中&#xff0c;出现了大量轻量级容器&#xff0c;这些容器有助于将来自不同项目的组件组装成一个有凝聚力的应用程序。这些容器的底层是它们如何执行布线的常见模式&#xff0c;它们将这一概念称为“控制反转”。 &#x1f3e2; 本章内容 &#x1f3ed; IoC服务…...

解决GitHub项目泄露API密钥问题

文章目录 所有的步骤参考gpt步骤一 使用环境变量步骤二 撤销并移除历史中的API密钥(1) 安装: pip install git-filter-repo(2) 清除特定文件 git filter-repo --path PATH_TO_YOUR_FILE --invert-paths出错解决 步骤三 处理移除的 origin 远程步骤四 强制推送到GitHub步骤五 重…...

【BUG】VMware|vmrest正在运行此虚拟机,无法配置或删除快照

VMware版本&#xff1a;VMware 16 文章目录 省流版问题解决方案 详细解释版问题解决方案总结 省流版 问题 只读&#xff0c;因为vmrest正在运行虚拟机。 解决方案 参考&#xff1a;虚拟机设置&#xff0c;只读&#xff0c;因为vmrest正在运行此虚拟机。有谁遇到过这种问题吗&…...

Ruby On Rails 笔记2——表的基本知识

Active Record Basics — Ruby on Rails Guides Active Record Migrations — Ruby on Rails Guides 原文链接自取 1.Active Record是什么&#xff1f; Active Record是MVC模式中M的一部分&#xff0c;是负责展示数据和业务逻辑的一层&#xff0c;可以帮助你创建和使用Ruby…...

VideoConvertor.java ffmpeg.exe

VideoConvertor.java ffmpeg.exe 视频剪切原理 入点 和 出点 选中时间点&#xff0c;导出...

java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigur

在运行代码的过程中&#xff0c;报出以下错误&#xff1a; java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration.redisTemplate 或者是&#xff1a; Caused by: java.lang.IllegalArgu…...

C#设计模式--策略模式(Strategy Pattern)

策略模式是一种行为设计模式&#xff0c;它使你能在运行时改变对象的行为。在策略模式定义了一系列算法或策略&#xff0c;并将每个算法封装在独立的类中&#xff0c;使得它们可以互相替换。通过使用策略模式&#xff0c;可以在运行时根据需要选择不同的算法&#xff0c;而不需…...

Webpack Tree Shaking 技术原理及应用实战,优化代码,精简产物

前言 在前端开发中&#xff0c;优化代码体积和提升应用性能是至关重要的课题。Webpack 提供了多种优化手段来帮助开发者实现这一目标&#xff0c;Tree Shaking 就是其中一种非常重要的优化技术&#xff0c;它通过在编译阶段移除未被使用的代码模块&#xff0c;从而显著减小最终…...

C++(十二)

前言&#xff1a; 本文将进一步讲解C中&#xff0c;条件判断语句以及它是如何运行的以及内部逻辑。 一&#xff0c;if-else,if-else语句。 在if语句中&#xff0c;只能判断两个条件的变量&#xff0c;若想实现判断两个以上条件的变体&#xff0c;就需要使用if-else,if-else语…...

ModelScope-Agent(1): 基于开源大语言模型的可定制Agent系统

目录 简介快速入门 简介 github地址 快速入门 看前两篇&#xff0c;调用千问API和天气API # 选用RolePlay 配置agent from modelscope_agent.agents.role_play import RolePlay # NOQArole_template 你扮演一个天气预报助手&#xff0c;你需要查询相应地区的天气&#x…...

Jmeter进阶篇(30)深入探索 JMeter 监听器

前言 在性能测试领域里,Apache JMeter 是一款经典而强大的工具,而其中的监听器(Listeners)组件更是发挥着不可或缺的关键作用。 监听器就像敏锐的观察者,默默记录测试执行过程中的各种数据,作为系统性能分析的数据依据。 本文将带你全方位走进 JMeter 监听器的奇妙世界,…...

HTTP multipart/form-data 请求

序言 最近在写项目的过程中有一个需求是利用 HTTP 协议传输图片和视频&#xff0c;经过查询方法相应的方法发现使用 multipart/form-data 的方式&#xff0c;这是最常见处理二进制文件的表单编码类型。  学习了一下午&#xff0c;现在总结一下使用的方法和相关的知识点&#x…...

记录关于阿里云智能媒体预览pdf文件的问题

pdf仅支持预览&#xff0c;不支持编辑&#xff0c;需要将权限设置成只读。 readonly参数一定要传&#xff0c;不能不传&#xff01;&#xff01;&#xff01;&#xff01; readonly的设置一定要用示例提供的方法&#xff01;&#xff01;&#xff01;&#xff01; 用WebofficeP…...

Milvus向量数据库01-基础概念

Milvus向量数据库01-基础概念 Zilliz Cloud 集群由全托管 Milvus 实例及相关计算资源构成。您可以在 Zilliz Cloud 集群中创建 Collection&#xff0c;然后在 Collection 中插入 Entity。Zilliz Cloud 集群中的 Collection 类似于关系型数据库中的表。Collection 中的 Entity …...

字节高频算法面试题:小于 n 的最大数

问题描述&#xff08;感觉n的位数需要大于等于2&#xff0c;因为n的位数1的话会有点问题&#xff0c;“且无重复”是指nums中存在重复&#xff0c;但是最后返回的小于n最大数是可以重复使用nums中的元素的&#xff09;&#xff1a; 思路&#xff1a; 先对nums倒序排序 暴力回…...

PowerShell 脚本实战:解决 GitLab 仓库文件批量重命名难题

使用PowerShell脚本解决文件重命名问题&#xff1a;一次实践经验分享 在软件开发过程中&#xff0c;我们经常会遇到需要批量处理文件的情况。最近&#xff0c;我在一个项目中就遇到了这样一个需求&#xff1a;将GitLab仓库中所有的.ts和.py文件的扩展名修改为原扩展名加上&quo…...