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

【5】MySQL数据库备份-XtraBackup - 全量备份

MySQL数据库备份-XtraBackup-全量备份

  • 前言
    • 环境
    • 版本
  • 安装部署
    • 下载
      • RPM 包
      • 二进制包
    • 安装
    • 卸载
  • 场景分析
    • 全量备份 | 恢复
      • 备份
      • 恢复
      • 综合
    • 增量备份 | 恢复
    • 部分备份 | 恢复

前言

关于数据库备份的一些常见术语、工具等,可见《MySQL数据库-备份》章节,当前不再重复概述。本篇主要对 XtraBackup 工具的使用做下详细讲解。

首先,说下所使用的环境、版本。

环境

  • 操作系统:Red Hat Enterprise Linux Server release 7.5 (Maipo)
  • 数据库:mysql Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)
  • XtraBackup:
    • percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
    • percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm

版本

关于 XtraBackup 的版本这里有必要说明下,参考官网如下:

  • https://www.percona.com/blog/aligning-percona-xtrabackup-versions-with-percona-server-for-mysql/
    在这里插入图片描述
  • 翻译成大白话的意思就是:Percona XtraBackup 的版本要超过大于或等于)数据库的版本。

但我个人的习惯,还是尽量和数据库的版本保持一致(仅个人习惯)。
原因如下
当前 MySQL 数据库版本 8.0.32,若安装 XtraBackup 版本为 8.0.35-??,则查看 XtraBackup 版本时,将有如下输出、其最后一句,看着别扭
在这里插入图片描述
版本也是经过测试的,可以备份 MySQL 8.0.32 的版本。

而且备份中,也有输出:xtrabackup version 8.0.35-30 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 6beb4b49)
看着就是别扭故 XtraBackup 版本一般与数据库当前版本保持一致
在这里插入图片描述在这里插入图片描述

安装部署

下载

下载安装包的方式较多,当前主要以RPM包二进制包进行讲解,本篇博文使用RPM包安装部署、测试。

RPM 包

访问官网地址:https://www.percona.com/downloads
打开官网页面后,鼠标往下扒拉、可找到如下截图:依次选择下载 即可。
在这里插入图片描述
或者直接使用下载地址:

  • 8.0.35
    https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
  • 8.0.32
    https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.32-25/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm

二进制包

  1. 执行如下命令进行下载:
  • 命令参考官网地址:https://docs.percona.com/percona-xtrabackup/8.0/binary-tarball.html
$ wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarball/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz

上述下载命令中包版本的选择(或者包名字的选择), 可参考官网如下地址:
https://docs.percona.com/percona-xtrabackup/8.0/binary-tarball-names.html
在这里插入图片描述

安装

在安装 XtraBackup 过程中遇到了报错,见《XtraBackup 安装报错 zstd》文章,故提前做下依赖包的安装。

  1. 安装依赖包执行如下命令:
yum -y install epel-release zstd
  1. 安装 XtraBackup
yum -y install percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
  1. 查看版本
    说明下哈:实际上,我使用的版本是8.0.32 版本,当前安装的是 8.0.35 版本,你懂我的意思吧?-- 下面有卸载步骤。
[root@testdbmy01 soft]# xtrabackup -version2024-06-01T10:05:07.033137+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --server-id=8833 --datadir=/mysql/data --tmpdir=/mysql/tmp --open_files_limit=65535 --log_bin=/mysql/binlog/mysql-bin --innodb_data_home_dir=/mysql/data/ --innodb_log_group_home_dir=/mysql/data/ --innodb_file_per_table=1 --innodb_data_file_path=ibdata1:1G:autoextend --innodb_flush_log_at_trx_commit=1 --innodb_buffer_pool_size=1G --innodb_io_capacity=1000 --innodb_max_dirty_pages_pct=60 --innodb_flush_method=O_DIRECT --innodb_log_file_size=2G --innodb_log_files_in_group=2 --innodb_log_buffer_size=64M --innodb_write_io_threads=8 --innodb_read_io_threads=8 --innodb_open_files=4096 
xtrabackup version 8.0.35-30 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 6beb4b49)
[root@testdbmy01 soft]# 

卸载

  1. 查找已经安装的 XtraBackup 名称
[root@testdbmy01 soft]# yum list installed | grep -i xtrabackup
percona-xtrabackup-80.x86_64              8.0.35-30.1.el7          installed    
[root@testdbmy01 soft]# 
  1. 卸载
[root@testdbmy01 soft]# yum -y remove percona-xtrabackup-80.x86_64
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package percona-xtrabackup-80.x86_64 0:8.0.35-30.1.el7 will be erased
--> Finished Dependency ResolutionDependencies Resolved==========================================================================================================================================================================================Package                                              Arch                                  Version                                        Repository                                Size
==========================================================================================================================================================================================
Removing:percona-xtrabackup-80                                x86_64                                8.0.35-30.1.el7                                installed                                219 MTransaction Summary
==========================================================================================================================================================================================
Remove  1 PackageInstalled size: 219 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionErasing    : percona-xtrabackup-80-8.0.35-30.1.el7.x86_64                                                                                                                           1/1 Verifying  : percona-xtrabackup-80-8.0.35-30.1.el7.x86_64                                                                                                                           1/1 Removed:percona-xtrabackup-80.x86_64 0:8.0.35-30.1.el7                                                                                                                                          Complete!
[root@testdbmy01 soft]# 

场景分析

再次声明 虽然安装的步骤中是8.0.35版本,但实际上:背地里 偷偷的卸载重装了 XtraBackup 版本是 8.0.32
如下场景也是基于8.0.32版本,一个小版本号而已,问题不大。

全量备份 | 恢复

备份

  1. 创建备份目录(使用root用户执行)
[root@testdbmy01 /]# DATE=`date +%Y%m%d%H`
[root@testdbmy01 /]# mkdir -p /backup/$DATE 
  1. 执行备份
[root@testdbmy01 /]# xtrabackup --backup --target-dir=/backup/2024060110 --user=root --password=123456 

参数讲解:

  • --backup:指示 XtraBackup 执行备份。
  • --target-dir:指定备份文件的目标目录。
  • --user--password:用于访问 MySQL 数据库的用户凭证。
  1. 准备数据
[root@testdbmy01 /]# xtrabackup --prepare --target-dir=/backup/2024060110

这个准备数据 是干啥的?能不能省略?

既然写了,那肯定是不能省略滴~。原因有以下三个:

  1. 应用事务日志:在备份期间,XtraBackup 会创建一个不一致的备份,因为数据库在备份过程中可能有写操作。为了确保备份的一致性,需要应用事务日志。--prepare 步骤会读取备份中的事务日志文件,并应用这些日志到数据文件,从而使数据文件处于一致状态。
  2. 使备份可恢复:未经 --prepare 处理的备份数据文件是不可恢复的。必须先准备备份,应用所有的事务日志,才能确保恢复时数据文件的一致性。
  3. 支持增量备份 :如果你在全量备份的基础上执行了增量备份,必须先对全量备份执行 --prepare --apply-log-only,然后才能应用增量备份。最后再执行一次 --prepare,使整个备份集可恢复。

上述的备份,涉及的命令,也可以合并在一起。如下,将其放到脚本中了。

使用时,
先设置下这 3个变量:BACKUP_DIRMYSQL_USERMYSQL_PASSWORD
然后,用 root 账号执行就好了,sh export.sh ,是不是很 easy …

cat > backup_export.sh <<EOF
#!/bin/bash# 设置变量
BACKUP_DIR="/backup/`date +%Y%m%d%H`"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"# 创建备份目录
mkdir -p \$BACKUP_DIR# 执行全量备份
xtrabackup --backup --target-dir=\$BACKUP_DIR --user=\$MYSQL_USER --password=\$MYSQL_PASSWORD# 检查备份是否成功
if [ \$? -eq 0 ]; thenecho "Backup successful, preparing the backup..."# 准备备份数据xtrabackup --prepare --target-dir=\$BACKUP_DIRif [ \$? -eq 0 ]; thenecho "Backup prepared successfully."elseecho "Failed to prepare backup."fi
elseecho "Backup failed."
fiecho "Backup path:\$BACKUP_DIR"
EOF

恢复

恢复步骤,更 easy 了,就 1 条命令。

[root@testdbmy01 backup]# xtrabackup --copy-back --target-dir=/backup/2024060110

综合

主要是基于上面的备份恢复步骤,进行一次完整的演示操作。这里主要分为 6个步骤,如下:

  1. 创建 脚本,并执行,完成备份。
  • 创建脚本
cat > backup_export.sh <<EOF
#!/bin/bash# 设置变量
BACKUP_DIR="/backup/`date +%Y%m%d%H`"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"# 创建备份目录
mkdir -p \$BACKUP_DIR# 执行全量备份
xtrabackup --backup --target-dir=\$BACKUP_DIR --user=\$MYSQL_USER --password=\$MYSQL_PASSWORD# 检查备份是否成功
if [ \$? -eq 0 ]; thenecho "Backup successful, preparing the backup..."# 准备备份数据xtrabackup --prepare --target-dir=\$BACKUP_DIRif [ \$? -eq 0 ]; thenecho "Backup prepared successfully."elseecho "Failed to prepare backup."fi
elseecho "Backup failed."
fiecho "Backup path:\$BACKUP_DIR"
EOF
  • 执行脚本
## 检查 MySQL 数据库 运行中。
[root@testdbmy01 soft]# ps -ef | grep mysql
root      17601      1  0 11:15 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/mysql/data --pid-file=/mysql/data/testdbmy01.pid
mysql     18971  17601  0 11:15 pts/1    00:02:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/mysql/logs/mysql-error.log --open-files-limit=65535 --pid-file=/mysql/data/testdbmy01.pid --socket=/mysql/tmp/mysql.sock --port=3306
root      21242   4833  0 15:11 pts/1    00:00:00 grep --color=auto mysql
[root@testdbmy01 soft]# ## 执行导出
[root@testdbmy01 soft]# sh backup_export.sh 
  1. 停止数据库,并删除库(模拟故障)。
## 停止数据库
[root@testdbmy01 soft]# service mysqld stop
Shutting down MySQL.. SUCCESS! 
[root@testdbmy01 soft]# ## 我怕万一、恢复不出来。我没敢删除(rm -rf),我又偷偷的 mv 了...
[root@testdbmy01 soft]# mv /mysql /mysql_bak202406
[root@testdbmy01 soft]# 
  1. 创建数据库目录&文件
    恢复时,只有databinlog 会自动创建,其他还需手动创建。所以这里一次性全部创建完成。
[root@testdbmy01 soft]# mkdir -p /mysql/{data,binlog,logs,tmp}
[root@testdbmy01 soft]# touch /mysql/logs/{mysql-error.log,mysql-slow.log}
  1. 使用 步骤1 中的备份,进行恢复。
[root@testdbmy01 soft]# xtrabackup --copy-back --target-dir=/backup/2024060115
  1. 设置权限
[root@testdbmy01 soft]# chown -R mysql.mysql /mysql
  1. 启动数据库
[root@testdbmy01 soft]# service mysqld start
Starting MySQL..... SUCCESS! 
[root@testdbmy01 soft]# 

最后,在登录数据库验证一下,就 Okk 了。

增量备份 | 恢复

~ 忒长了~ 已写 9千多字了,我怕~写完,字数太长受限制不能发布,
当前章节、晚会我补链接~~

部分备份 | 恢复

在这里插入图片描述

相关文章:

【5】MySQL数据库备份-XtraBackup - 全量备份

MySQL数据库备份-XtraBackup-全量备份 前言环境版本 安装部署下载RPM 包二进制包 安装卸载 场景分析全量备份 | 恢复备份恢复综合 增量备份 | 恢复部分备份 | 恢复 前言 关于数据库备份的一些常见术语、工具等&#xff0c;可见《MySQL数据库-备份》章节&#xff0c;当前不再重…...

数据治理-数据标准演示

数据字典 数据标准-数据字典 词根 数据标准-词根 业务字典映射 数据标准-业务字典映射 标准文档 数据标准-标准文档...

基于Chisel的FPGA流水灯设计

Chisel流水灯 一、Chisel&#xff08;一&#xff09;什么是Chisel&#xff08;二&#xff09;Chisel能做什么&#xff08;三&#xff09;Chisel的使用&#xff08;四&#xff09;Chisel的优缺点1.优点2.缺点 二、流水灯设计 一、Chisel &#xff08;一&#xff09;什么是Chise…...

LabVIEW齿轮调制故障检测系统

LabVIEW齿轮调制故障检测系统 概述 开发了一种基于LabVIEW平台的齿轮调制故障检测系统&#xff0c;实现齿轮在恶劣工作条件下的故障振动信号的实时在线检测。系统利用LabVIEW的强大图形编程能力&#xff0c;结合Hilbert包络解调技术&#xff0c;对齿轮的振动信号进行精确分析…...

AI帮写:探索国内AI写作工具的创新与实用性

随着AI技术的快速发展&#xff0c;AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头&#xff0c;国内很多小伙伴往往望而却步&#xff0c;究其原因&#xff0c;就是它的使用门槛高&#xff0c;还有成本的考量。 不过&#xff0c;随着GPT技术的火热&#xff0c;国内也涌…...

n后问题 回溯笔记

问题描述 在nn格的棋盘上放置彼此不受攻击的n个皇后。 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同 一行或同一列或同一斜线上的棋子。n后问题等价于在nn格的棋盘上放置n个皇后&#xff0c;任何2个皇后不放在同一行或同一列或同一斜线上。 代码 import java.uti…...

简述Java中实现Socket通信的步骤

在Java中&#xff0c;实现Socket通信通常涉及客户端和服务器端两个角色。以下是它们各自的基本步骤&#xff1a; 服务器端&#xff08;Server&#xff09; 创建ServerSocket对象&#xff1a; 在服务器端&#xff0c;首先需要创建一个ServerSocket对象。这个对象会监听来自客户…...

Asp.Net Core 实现分片下载的最简单方式

技术群里的朋友遇到了这个问题&#xff0c;起初的原因是他对文件增加了一个属性配置 fileResult.EnableRangeProcessing true;这个属性我从未遇到过&#xff0c;然后&#xff0c;去F1查看这个属性的描述信息也依然少的可怜&#xff0c;只有简单的描述为(获取或设置为 启用范围…...

[Mac软件]Leech for Mac v3.2 - 轻量级mac下载工具

黑果魏叔推荐Leech是由Many Tricks开发的适用于Mac OS X的轻量级且功能强大的下载管理器。 Leech让您完全控制下载&#xff0c;并与浏览器完全集成。您可以将下载排队&#xff0c;暂停和恢复&#xff0c;从受密码保护的服务器下载&#xff0c;并将密码存储在系统范围的安全钥匙…...

留给“端侧大模型”的时间不多了

端侧大模型&#xff08;Edge AI models&#xff09;&#xff0c;也就是只在设备本地&#xff08;如智能手机、IoT设备、嵌入式系统等&#xff09;运行的大模型&#xff0c;过去一两年来非常流行。 具体表现在&#xff0c;终端设备厂商&#xff0c;如苹果、荣耀、小米、OV等&…...

Pytest框架中的Setup和Teardown功能

在 pytest 测试框架中&#xff0c;setup 和 teardown是用于在每个测试函数之前和之后执行设置和清理的动作&#xff0c;而pytest 实际上并没有内置的 setup 和 teardown 函数&#xff0c;而是使用了一些装饰器或钩子函数来实现类似的功能。 学习目录 钩子函数&#xff08;Hook…...

yolov10/v8 loss详解

v10出了就想看看它的loss设计有什么不同&#xff0c;看下来由于v8和v10的loss部分基本一致就放一起了。 v10的论文笔记&#xff0c;还没看的可以看看&#xff0c;初步尝试耗时确实有提升 好记性不如烂笔头&#xff0c;还是得记录一下&#xff0c;以免忘了&#xff0c;废话结束…...

Typescript高级: 深入理解infer关键字

概述 在 TS 中&#xff0c;infer 是一个高级类型操作&#xff0c;特别是条件类型和映射类型中非常有用的关键字它在泛型中使用也会是一个强大工具&#xff0c;增强了类型推断的能力&#xff0c;让开发者更灵活地处理和操作类型它允许在泛型类型推导过程中捕获一个具体的类型&a…...

JQC-3FF-S-Z 继电器模块使用(arduino)

前言 继电器模块可以控制电流的接通和非接通状态&#xff0c;和开关一样。实际上是用小电流去控制大电流运作的一种“自动开关” 本文只是简单使用继电器模块做一个 led 点亮和熄灭的案例&#xff0c;结合案例可以和 nodemcu 等板子结合做出远程控制开关。 材料准备 杜邦线…...

黑马一站制造数仓实战2

问题 DG连接问题 原理&#xff1a;JDBC&#xff1a;用Java代码连接数据库 Hive/SparkSQL&#xff1a;端口有区别 可以为同一个端口&#xff0c;只要不在同一台机器 项目&#xff1a;一台机器 HiveServer&#xff1a;10000 hiveserver.port 10000 SparkSQL&#xff1a;10001…...

网络I/O模型

网络I/O模型 同步I/O阻塞I/O非阻塞I/OI/O多路复用select函数接口示例 poll函数接口示例 poll 和 select 的区别epoll原理&#xff1a;示例 异步I/O 同步I/O 阻塞I/O 一个基本的C/S模型如下图所图&#xff1a;其中 listen()、connect()、write()、read() 都是阻塞I/O&#xff0…...

Docker 简介和安装

目录 Docker 是什么 跟普通虚拟机的对比 打包、分发、部署 Docker 部署的优势 Docker 通常用来做什么 重要概念&#xff1a;镜像、容器 安装 镜像加速源 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机&#xff0c;它只虚…...

【源码】Spring Data JPA原理解析之Repository自定义方法命名规则执行原理(二)

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…...

Vue前端中从后端获取图片验证码

前端发送请求 <template><el-form :model"user" :rules"rules" ref"userForm" class"login" label-width"auto" style"max-width: 600px"><el-form-item label"用户名" prop"name…...

【源码】多语言H5聊天室/thinkphp多国语言即时通讯/H5聊天室源码/在线聊天/全开源

多语言聊天室系统&#xff0c;可当即时通讯用&#xff0c;系统默认无需注册即可进入群聊天&#xff0c;全开源 【海外聊天室】多语言H5聊天室/thinkphp多国语言即时通讯/H5聊天室源码/在线聊天/全开源 - 吾爱资源网...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...