mysqlMHA

mysqlMHA

什么是MHA

​ 高可用模式下的故障切换,基于主从复制.

​ 至少需要3台

​ 故障切换过程在0-30秒之内.

​ 这过程和keepalive比较像,也是通过vip地址,根据vip地址所在的主机,确定主备.

​ 主和备不是靠优先级确定的,主从复制的时候就确定了主,备是在MHA的过程中确定.

MHA的组件

MHA NODE 数据节点,每台mysql和管理服务器都要安装,监控服务器状态以及收集数据

MHA的manager 管理节点,管理mysql的高可用集群,可以单独部署在一台独立的服务器,也可以部署多个,实现主备之间切换,主发生故障,切换到备.

MHA的特点:

1.manager来实现主备切换

2.数据同步还是依靠二进制日志,最大程度上保证数据的完整

3.半同步的方式,都是为了实现数据的完整性.

一主多从的架构,最少要三台

1.主宕机,保存二进制日志

2.备从主的二进制日志当中更新,更新到自己的slave日志当中.

3.备撑住,同步到master的二进制文件

4.其他备服务器从新的主同步数据

5.原来的备成为主,其他的备服务器都和主继续同步数据

6.主备切换之后,mysql模式下,一般是继续以现有主,作为集群的主,重新把服务器加入到集群

实验

一主两从

搭建完成MHA的架构

主备之间的切换

故障恢复

4台机器

master 192.168.118.10 mysql 8.0 node组件

slave1 192.168.118.20 mysql 8.0 node组件

slave2 192.168.118.30 mysql 8.0 node组件

管理节点 192.168.118.40 mysql 8.0 node组件

#master 192.168.118.10 mysql 8.0 node组件

systemctl stop firewalld
setenfore 0
yum -y install ntpdate -y
date
ntpdate ntp.aliyun.com
hostnamectl set-hostname master
suvim /etc/hosts
192.168.118.10 master
192.168.118.20 slave1
192.168.118.30 slave2vim /etc/my.cnf
server-id = 1
log-bin = master-bin
binlog_format = MIXED
log-slave-updates = true
relay_log_recovery = 1
:wqsystemctl restart mysqld
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/#配置mysql一主两从
#所有数据库节点进行mysql授权
mysql -uroot -p123456
#从数据库同步使用
CREATE USER 'myslave'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.118.%';#manager使用
CREATE USER 'mha'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'192.168.118.%' WITH GRANT OPTION;#防止从库通过主机名连接不上主库
CREATE USER 'mha'@'master' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'master';CREATE USER 'mha'@'slave1' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'slave1';CREATE USER 'mha'@'slave2' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'slave2';
#刷新
FLUSH PRIVILEGES;
#查看
show master status;#第二步,四台同步操作
cd /opt 
#扔mha4mysql-node-0.57.tar.gz包#安装epel源
yum install epel-release --nogpgcheck -y
#安装依赖环境
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPANtar -xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57/
#编译安装
perl Makefile.PL
make && make installssh-keygen -t rsa
ssh-copy-id 192.168.118.20
ssh-copy-id 192.168.118.30ifconfig ens33:1 192.168.118.100/24

#slave1 192.168.118.20 mysql 8.0 node组件

systemctl stop firewalld
setenfore 0
yum -y install ntpdate -y
date
ntpdate ntp.aliyun.com
hostnamectl set-hostname slave1
suvim /etc/hosts
192.168.118.10 master
192.168.118.20 slave1
192.168.118.30 slave2vim /etc/my.cnf
server-id = 2
log_bin = master-bin
binlog_format = MIXED
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
relay_log_recovery = 1
:wqsystemctl restart mysqld
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/#配置mysql一主两从
#所有数据库节点进行mysql授权
mysql -uroot -p123456
#从数据库同步使用
CREATE USER 'myslave'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.118.%';
#manager使用
CREATE USER 'mha'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'192.168.118.%' WITH GRANT OPTION;
#防止从库通过主机名连接不上主库
CREATE USER 'mha'@'master' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'master';CREATE USER 'mha'@'slave1' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'slave1';CREATE USER 'mha'@'slave2' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'slave2';flush privileges;
change master to master_host='192.168.118.10',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=2921;
start slave;
show slave status\G;cd /opt 
#扔#扔mha4mysql-node-0.57.tar.gz包yum install epel-release --nogpgcheck -yyum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPANtar -xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57/
#编译安装
perl Makefile.PL
make && make install
ssh-keygen -t rsa
ssh-copy-id 192.168.118.10
ssh-copy-id 192.168.118.30

#slave2 192.168.118.30 mysql 8.0 node组件

systemctl stop firewalld
setenfore 0
yum -y install ntpdate -y
date
ntpdate ntp.aliyun.com
hostnamectl set-hostname slave2
suvim /etc/hosts
192.168.118.10 master
192.168.118.20 slave1
192.168.118.30 slave2vim /etc/my.cnf
server-id = 3
log_bin = master-bin
binlog_format = MIXED
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
relay_log_recovery = 1
:wqsystemctl restart mysqld
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/#配置mysql一主两从
#所有数据库节点进行mysql授权
mysql -uroot -p123456
#从数据库同步使用
CREATE USER 'myslave'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.118.%';
#manager使用
CREATE USER 'mha'@'192.168.118.%' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'192.168.118.%' WITH GRANT OPTION;
#防止从库通过主机名连接不上主库
CREATE USER 'mha'@'master' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'master';CREATE USER 'mha'@'slave1' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'slave1';CREATE USER 'mha'@'slave2' IDENTIFIED WITH mysql_native_password BY 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'slave2';flush privileges;
change master to master_host='192.168.118.10',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=857;
start slave;
show slave status\G;cd /opt 
#扔mha4mysql-node-0.57.tar.gz包包yum install epel-release --nogpgcheck -yyum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPANtar -xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57/
#编译安装
perl Makefile.PL
make && make install
ssh-keygen -t rsa
ssh-copy-id 192.168.118.10
ssh-copy-id 192.168.118.20

#test1

systemctl stop firewalld
setenfore 0
yum -y install ntpdate -y
date
ntpdate ntp.aliyun.comcd /opt 
#扔mha4mysql-node-0.57.tar.gz包
#mha4mysql-manager-0.57.tar.gz包yum install epel-release --nogpgcheck -yyum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPANtar -xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57/
#编译安装
perl Makefile.PL
make && make install
cd ..
tar -xf mha4mysql-manager-0.57.tar.gz 
cd mha4mysql-manager-0.57/
perl Makefile.PL
make && make install
cd /usr/local/bin/
#一路按回车键
ssh-keygen -t rsa 				
ssh-copy-id 192.168.118.10
ssh-copy-id 192.168.118.20
ssh-copy-id 192.168.118.30cd /opt/mha4mysql-manager-0.57/
cd samples/
cp -rp scripts/ /usr/local/bin/
cd /usr/local/bin/
ll
cd /opt
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin/
cd /usr/local/bin/
ls
vim master_ip_failover 
#100dd全部清空
:set paste
#复制脚本
:wqmkdir /etc/masterha
cd /opt/mha4mysql-manager-0.57/samples/conf/
cp app1.cnf /etc/masterha/
cd /etc/masterha/
ls
vim /etc/masterha/app1.cnf	
#清空
:set paste
#复制第二个脚本
:wq#完成主的虚拟网卡后,检测状态
masterha_check_ssh -conf=/etc/masterha/app1.cnf
masterha_check_repl -conf=/etc/masterha/app1.cnf#nohup 记录程序启动时的日志文件,保存到指定的位置.
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &masterha_check_status --conf=/etc/masterha/app1.cnfcat /var/log/masterha/app1/manager.log | grep "current master"

masterha_check_ssh
所有的数据库节点和管理节点通过ssh来进行互相通信,检查集群的ssh配置
masterha_check_repl
检查mysql的复制情况 数据同步
masterha_manager
manager 文件的启动脚本
masterha_check_status
检查MHA集群状态的文件
masterha_master_switch
控制故障转移
masterha_stop
关闭manager服务

master_ip_failpver 故障切换时,vip的管理脚本

master_ip_online_change 在线切换时,vip的管理脚本

power_manager 故障发生后,关闭主机的脚本

send_report 故障切换之后,发送报警的脚本

要复制的脚本1

#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';use Getopt::Long;
my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
my $vip = '192.168.118.100';
my $brdc = '192.168.118.255';
my $ifdev = 'ens33';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
my $exit_code = 0;
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);exit &main();sub main {
print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
if ( $command eq "stop" || $command eq "stopssh" ) {
my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {
my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
exit 0;
}
else {
&usage();
exit 1;
}
}
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
### A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}sub usage {
print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

要复制的脚本2

[server default]
manager_log=/var/log/masterha/app1/manager.log
#主日志文件,报错就看他
manager_workdir=/var/log/masterha/app1
#manager的工作目录
master_binlog_dir=/usr/local/mysql/data
#mysql主服务器的binlog二进制文件的保存目录
master_ip_failover_script=/usr/local/bin/master_ip_failover
#自动切换
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
#在线切换
password=manager
ping_interval=1
#ping主库的时间间隔,每一秒钟ping一次,
#默认3秒一次,共ping三次,不通就会自动切换.
remote_workdir=/tmp
repl_password=123456
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.118.20 -s 192.168.118.30 
#从对主监听
shutdown_script=""
ssh_user=root
user=mha[server1]
hostname=192.168.118.10 
#主服务器
port=3306[server2]
candidate_master=1  
#设置为备用master
check_repl_delay=0
#默认是选择一个slave,这个slave和master的数据是最一致的,
#如果slave的同步数据落后主100M,MHA永远也不会选择该服务器#作为备主
#不考虑主从之间的问题,强制指定slave为备服务器
hostname=192.168.118.20  
#备用主服务器
port=3306[server3]
hostname=192.168.118.30  
#从服务器2
port=3306
#test1
tail -f /var/log/masterha/app1/manager.log#mysql1
systemctl stop mysqld

_check -s 192.168.118.20 -s 192.168.118.30
#从对主监听
shutdown_script=“”
ssh_user=root
user=mha

[server1]
hostname=192.168.118.10
#主服务器
port=3306

[server2]
candidate_master=1
#设置为备用master
check_repl_delay=0
#默认是选择一个slave,这个slave和master的数据是最一致的,
#如果slave的同步数据落后主100M,MHA永远也不会选择该服务器#作为备主
#不考虑主从之间的问题,强制指定slave为备服务器
hostname=192.168.118.20
#备用主服务器
port=3306

[server3]
hostname=192.168.118.30
#从服务器2
port=3306

#test1
tail -f /var/log/masterha/app1/manager.log

#mysql1
systemctl stop mysqld


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

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

相关文章

Qt自定义MessageToast

效果&#xff1a; 文字长度自适应&#xff0c;自动居中到parent&#xff0c;会透明渐变消失。 CustomToast::MessageToast(QS("最多添加50张图片"),this);1. CustomToast.h #pragma once#include <QFrame>class CustomToast : public QFrame {Q_OBJECT pub…

【学习笔记】解决Serial Communication Library编译问题

【学习笔记】解决编译 Serial Communication Library 时的 Catkin 依赖问题 Serial Communication Library 是一个用 C 编写的用于连接类似 rs-232 串口的跨平台库。它提供了一个现代的 C 接口&#xff0c;它的工作流程设计在外观和感觉上与 PySerial 相似&#xff0c;但串口速…

ControlNet on Stable Diffusion

ControlNet on Stable Diffusion 笔记来源&#xff1a; 1.Adding Conditional Control to Text-to-Image Diffusion Models 2.How to Use OpenPose & ControlNet in Stable Diffusion 3.ControlNet与DreamBooth&#xff1a;生成模型的精细控制与主体保持 4.Introduction t…

光猫设置桥接 路由器pppoe拨号 设置正常访问光猫 (openwrt)

网络信息展示 光猫桥接很简单吧&#xff0c;就不说了。先来列出修改前的网络接口和网络信息。 光猫192.168.1.1&#xff0c;openwrt 10.0.0.0/8 初始配置 需要记录的信息&#xff1a;WAN的网络设备&#xff08;eth1&#xff09;&#xff0c;光猫的IP&#xff08;192.168.1.1&am…

StarryCoding-35:鼠鼠我鸭

题目描述 在一个叫做酱西功爷枝叶鸡树学院的地方有&#x1d45b;n只小动物&#xff0c;要么是鼠鼠&#xff0c;要么是鸭鸭&#xff0c;从11到&#x1d45b;n编号&#xff0c;每只小动物有个体重&#x1d44e;&#x1d456;ai​。 在这个学校里&#xff0c;存在一种神奇的魔法…

Symfony 入门指南:快速安装与基础配置

Symfony 入门指南&#xff1a;快速安装与基础配置 Symfony 是一个强大而灵活的 PHP 框架&#xff0c;广泛应用于构建现代 Web 应用程序。本指南将带您一步一步地了解如何快速安装 Symfony&#xff0c;并完成基本配置&#xff0c;以便您能够开始使用这个强大的框架。 目录 引…

使用法国云手机进行面向法国的社媒营销

在当今数字化和全球化的时代&#xff0c;社交媒体已经成为企业营销和拓展市场的重要工具。对于想进入法国市场的企业来说&#xff0c;如何在海外社媒营销中脱颖而出、抓住更多的市场份额&#xff0c;成为了一个关键问题。法国云手机正为企业提供全新的营销工具&#xff0c;助力…

Spring Boot多租户配置与实现

在现代应用程序中&#xff0c;多租户架构是一种非常流行的设计模式。多租户架构允许多个客户&#xff08;租户&#xff09;共享同一个应用程序实例&#xff0c;同时确保数据的隔离性和安全性。本文将详细介绍如何在Spring Boot应用程序中配置和实现多租户支持&#xff0c;并提供…

《人工智能大语言模型技术发展研究报告(2024)》【下载】

《人工智能大语言模型技术发展研究报告&#xff08;2024&#xff09;》下载 自2023年起&#xff0c;大模型技术产品的快速迭代和升级&#xff0c;已经成为全球科技竞争的关键因素。由中国软件评测中心发布的《人工智能大语言模型技术发展研究报告&#xff08;2024&#xff09;》…

kafka详解及应用场景介绍

Kafka架构 Kafka架构&#xff0c;由多个组件组成&#xff0c;如下图所示&#xff1a; 主要会包含&#xff1a;Topic、生产者、消费者、消费组等组件。 服务代理&#xff08;Broker&#xff09; Broker是Kafka集群中的一个节点&#xff0c;每个节点都是一个独立的Kafka服务器…

反激Flyback从逆向到初步设计(UC2844)

一.Flyback基本拓扑 国标gb/t 12325-2008《电能质量供电电压偏差》规定&#xff1a;220v单向供电电压偏差为标称电压的-10%&#xff0c;7%。 对应220V的标称电压&#xff0c;其浮动范围是在198~235.4V。以下运算均基于此规定进行。 首先220V进入EMI模块&#xff0c;消除差模干扰…

【Docker】Windows11环境下的安装

前置依赖环境配置 确保虚拟化开启 搜索栏直接搜索如下功能 勾选下面两个选项&#xff0c;确定 重启电脑&#xff0c;以管理员身份打开PowerShell wsl --status wsl --update打开微软应用商店选择一个Ubuntu版本下载并打开 输入一个用户名和密码 然后就可以在Windows下使…

FlowUs与生成式AI结合的未来展望:智能助手问问AI chat与自主代理Agent的应用

生成式AI在对话系统&#xff08;Chat&#xff09;和自主代理&#xff08;Agent&#xff09;中的应用将会带来显著的技术进步和商业机会。 对话系统&#xff08;Chat&#xff09; 对话系统是一种人工智能软件&#xff0c;它能够模拟人类对话&#xff0c;通过自然语言处理&…

go-kratos 学习笔记(7) 服务发现服务间通信grpc调用

服务发现 Registry 接口分为两个&#xff0c;Registrar 为实例注册和反注册&#xff0c;Discovery 为服务实例列表获取 创建一个 Discoverer 服务间的通信使用的grpc&#xff0c;放到data层&#xff0c;实现的是从uses服务调用orders服务 app/users/internal/data.go 加入 New…

2024安全大模型技术与市场研究报告

大模型驱动的AIGC引发技术革命&#xff0c;国资委强调国企需加大AI投入。大模型解决网络安全行业攻防不对等问题&#xff0c;国内外企业纷纷推出基于大模型的网络安全产品&#xff0c;AI将改变网络安全产品格局。 自 2022 年底开始&#xff0c;以 LLM(大语言模型&#xff0c;简…

PHP基础语法-Part2

if-else语句、switch语句 与其他语言相同 循环结构 for循环while循环do-while循环foreach循环&#xff0c;搭配数组使用 foreach ($age as $avlue) //只输出值 {xxx; } foreach ($age as $key > $avlue) //键和值都输出 {xxx; }foreach ($age as $key >…

k8s核心知识总结

写在前面 时间一下子到了7月份尾&#xff1b;整个7月份都乱糟糟的&#xff0c;不管怎么样&#xff0c;日子还是得过啊&#xff0c; 1、7月份核心了解个关于k8s&#xff0c;iceberg等相关技术&#xff0c;了解了相关的基础逻辑&#xff0c;虽然和数开主线有点偏&#xff0c;但是…

系统架构设计师②:操作系统

系统架构设计师②&#xff1a;操作系统 操作系统作用 ①管理系统的硬件、软件、数据资源 ②控制程序运行 ③人机之间的接口 ④应用软件与硬件之间的接口 进程管理 进程是程序在一个数据集合上运行的过程&#xff0c;它是系统进行资源分配和调度的一个独立单位。它由程序块、…

qt表格模型视图

Qt 提供了一套强大的模型/视图框架&#xff0c;允许你以一种非常灵活和高效的方式显示和处理数据。在 Qt 中&#xff0c;表格视图&#xff08;TableView&#xff09;和模型&#xff08;TableModel&#xff09;是这种框架的一部分&#xff0c;常用于显示和编辑表格数据。 以下是…

利用Java调用银行卡二要素接口

一、什么是银行卡二要素&#xff1f; 银行卡二要素验证接口是一种 API 接口&#xff0c;主要用于验证用户提供的银行卡号与姓名这两个要素是否一致。 二、银行卡二要素作用及场景有哪些&#xff1f; 其作用是通过核验用户的身份信息&#xff0c;判断是否为目标用户本人操作&…