PostgreSQL 备份恢复:pg_probackup
文章目录
- 前言
- 1. 安装备份工具
- 1.1 环境介绍
- 1.2 RPM 安装
- 1.3 验证
- 2. 配置备份工具
- 2.1 初始化设置
- 2.2 创建备份用户
- 2.3 配置自动归档
- 3. 工具使用介绍
- 3.1 init
- 3.2 add-instance
- 3.3 del-instance
- 3.4 set-config
- 3.5 show-config
- 3.6 set-backup
- 3.7 backup
- 3.8 show
- 3.9 delete
- 3.10 restore
- 3.11 catchup
- 3.12 archive-push
- 3.13 archive-get
- 3.14 checkdb
- 3.15 validate
- 3.16 merge
前言
pg_probackup 是一款功能强大的开源 PostgreSQL 备份工具,和 MySQL 社区 XtraBackup 类似,本篇文章将和各位共同探索学习。
开源地址:
https://github.com/postgrespro/pg_probackup
文档地址:
https://postgrespro.github.io/pg_probackup
1. 安装备份工具
1.1 环境介绍
环境介绍:CentOS Linux release 7.8.2003 (Core)
数据库版本:PostgreSQL - 12.2
1.2 RPM 安装
# RPM Centos Packages
rpm -ivh https://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-centos.noarch.rpm# pg_probackup-这里写 PG 对应的大版本
yum install pg_probackup-{15,14,13,12,11}
yum install pg_probackup-{15,14,13,12,11}-debuginfo
官方 Github 有安装说明,可以根据环境安装指引安装,上面是 CentOS 环境安装方法。
1.3 验证
RPM 安装完成后会自动配置环境变量,这里我安装的是 12 版本,所以使用 pg_probackup-12 命令操作工具:
pg_probackup-12 --help
2. 配置备份工具
2.1 初始化设置
初始化备份目录:
pg_probackup-12 init -B ${backup_dir}
pg_probackup-12 init -B /data/pgsql12/backup
INFO: Backup catalog ‘/data/pgsql12/backup’ successfully initialized
添加新的备份实例:
# 本地实例
pg_probackup-12 add-instance -B ${backup_dir} -D ${PGDATA} --instance ${instance_name}# 添加远程实例
pg_probackup-12 add-instance -B ${backup_dir} -D ${PGDATA} --instance ${instance_name} --remote-prot=ssh --remote-host=${remote_ip} --remote-port=${remote_ssh_port} --remote-user=${remote_ssh_user} --remote-path=${pg_probackup_dir}
pg_probackup-12 add-instance -B /data/pgsql12/backup/ -D /data/pgsql12/data/ --instance test01
INFO: Instance ‘test01’ successfully initialized
2.2 创建备份用户
PostgreSQL versions 10 - 14 备份用户创建语句:
BEGIN;
CREATE ROLE backup WITH LOGIN;
GRANT USAGE ON SCHEMA pg_catalog TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup;
COMMIT;
PostgreSQL versions 15 备份用户创建语句:
BEGIN;
CREATE ROLE backup WITH LOGIN;
GRANT USAGE ON SCHEMA pg_catalog TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_start(text, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_stop(boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup;
COMMIT;
用户创建完成后,注意 pg_hba.conf 放开 backup 用户。
2.3 配置自动归档
配置 wal 自动归档需要调整如下参数:
# 自动归档的时间,单位为秒,可酌情设置,建议 1 分钟
max_wal_senders = 60
# 开启归档
archive_mode = 'on'
# WAL 格式,归档必须是 replica 及更高级别
wal_level = 'replica'
# 配置归档命令
archive_command = 'pg_probackup-12 archive-push -B /data/pgsql12/backup --instance test01 --wal-file-path=%p --wal-file-name=%f'
配置完成后,需要重启数据库,可以使用下方命令查看归档信息:
pg_probackup-12 show -B /data/pgsql12/backup --instance test01 --archive
3. 工具使用介绍
使用 pg_probackup-12 --help
可以看到该工具主要分为几块功能,本小节会详细介绍。
pg_probackup-12 - utility to manage backup/recovery of PostgreSQL database.pg_probackup-12 help [COMMAND]pg_probackup-12 versionpg_probackup-12 init -B backup-pathpg_probackup-12 set-backup -B backup-path --instance=instance_name-i backup-id [--ttl=interval] [--expire-time=timestamp][--note=text][--help]pg_probackup-12 show-config -B backup-path --instance=instance_name[--format=format][--help]....................
3.1 init
pg_probackup-12 init -B backup-path
初始化备份目录,安装完 pg_probackup 需要做的事情,这里相当于给 pg_probackup-12 创建一个工作目录,管理备份文件和归档文件 pg_probackup 可以用于管理多个实例的备份。
例如:
pg_probackup-12 init -B /pg_data/backup
将 /pg_data/backup 设置为备份工具的 home 目录。
3.2 add-instance
pg_probackup-12 add-instance -B backup-path -D pgdata-path--instance=instance_name[--external-dirs=external-directories-paths][--remote-proto] [--remote-host][--remote-port] [--remote-path] [--remote-user][--ssh-options]
添加需要备份的实例信息 pg_probackup 可以管理多个实例的备份,可以作为备份管理中心。
添加本地备份实例,例如:
pg_probackup-12 add-instance -B /pg_data/backup -D /data/pgsql12/data --instance node01
将本地数据目录为 /pg_data/backup 的 PostgreSQL 添加到备份管理中心。如果要添加远程备份实例,需要先配置互信。
## 在远程备份实例主机上
# su - postgres
$ ssh-keygen
$ ssh-copy-id postgres@${备份机_ip}## 在备份机上
# su - postgres
$ ssh-keygen
$ ssh-copy-id postgres@${备份实例主机_ip}## 测试互信
$ ssh postgres@${对方IP}
添加远程实例:
pg_probackup-12 add-instance -B /data/pgsql12/backup -D /data/pgsql/data --instance test02 --remote-prot=ssh --remote-host=172.16.104.55 --remote-port=22 --remote-user=postgres
INFO: Instance ‘test02’ successfully initialized
3.3 del-instance
pg_probackup-12 del-instance -B backup-path--instance=instance_name[--help]
从备份元数据中心里删除实例信息。例如:
pg_probackup-12 del-instance -B /data/pgsql12/backup/ --instance test02
INFO: Delete: RZXNFS 2023-08-25 14:02:16+08
INFO: Delete: RZXNEX 2023-08-25 14:01:45+08
INFO: Delete: RZXND9 2023-08-25 14:00:45+08
INFO: Delete: RZXNCL 2023-08-25 14:00:21+08
INFO: Delete: RZXNA5 2023-08-25 13:58:53+08
INFO: Delete: RZXN9V 2023-08-25 13:58:43+08
INFO: Instance ‘test02’ successfully deleted
3.4 set-config
pg_probackup-12 set-config -B backup-path --instance=instance_name[-D pgdata-path][--external-dirs=external-directories-paths][--log-level-console=log-level-console][--log-level-file=log-level-file][--log-format-file=log-format-file][--log-filename=log-filename][--error-log-filename=error-log-filename][--log-directory=log-directory][--log-rotation-size=log-rotation-size][--log-rotation-age=log-rotation-age][--retention-redundancy=retention-redundancy][--retention-window=retention-window][--wal-depth=wal-depth][--compress-algorithm=compress-algorithm][--compress-level=compress-level][--archive-timeout=timeout][-d dbname] [-h host] [-p port] [-U username][--remote-proto] [--remote-host][--remote-port] [--remote-path] [--remote-user][--ssh-options][--restore-command=cmdline] [--archive-host=destination][--archive-port=port] [--archive-user=username][--help]
可以配置备份保留策略,及一些配置参数,例如配置备份保留策略:
pg_probackup-12 set-config -B /pg_data/backup --instance node01 --retention-redundancy 7 --retention-window 7
3.5 show-config
pg_probackup-12 show-config -B backup-path --instance=instance_name[--format=format][--help]
查看备份服务的参数配置信息。
3.6 set-backup
pg_probackup-12 set-backup -B backup-path --instance=instance_name-i backup-id [--ttl=interval] [--expire-time=timestamp][--note=text][--help]
修改备份文件的元数据信息。
3.7 backup
pg_probackup-12 backup -B backup-path -b backup-mode --instance=instance_name[-D pgdata-path] [-C][--stream [-S slot-name] [--temp-slot]][--backup-pg-log] [-j num-threads] [--progress][--no-validate] [--skip-block-validation][--external-dirs=external-directories-paths][--no-sync][--log-level-console=log-level-console][--log-level-file=log-level-file][--log-format-console=log-format-console][--log-format-file=log-format-file][--log-filename=log-filename][--error-log-filename=error-log-filename][--log-directory=log-directory][--log-rotation-size=log-rotation-size][--log-rotation-age=log-rotation-age] [--no-color][--delete-expired] [--delete-wal] [--merge-expired][--retention-redundancy=retention-redundancy][--retention-window=retention-window][--wal-depth=wal-depth][--compress][--compress-algorithm=compress-algorithm][--compress-level=compress-level][--archive-timeout=archive-timeout][-d dbname] [-h host] [-p port] [-U username][-w --no-password] [-W --password][--remote-proto] [--remote-host][--remote-port] [--remote-path] [--remote-user][--ssh-options][--ttl=interval] [--expire-time=timestamp] [--note=text][--help]
启动备份的方法,下面详细介绍该功能参数:
- -B, --backup-path=backup-path:备份工具 init 的目录。
- -b, --backup-mode=backup-mode:备份的模式,有 FULL、PAGE、DELTA、PTRACK 四种模式。
- FULL:创建一个完整备份,其中包含要恢复的集群的所有数据文件。
- PAGE:根据自上次完整或增量备份以来生成的 WAL 文件创建增量备份。仅从数据文件中读取更改的块。
- DELTA:读取数据目录中的所有数据文件,并为自上次备份以来已更改的页面创建增量备份。
- PTRACK:动态创建增量备份跟踪页面更改。
- -C, --smooth-checkpoint:将检查点分散在一段时间内。默认情况下, pg_probackup 尝试尽快完成检查点。
- –instance=instance_name:实例名,通过指定实例名,备份工具会根据元数据查到该实例的信息。
- –stream:如果在备份命令中加入该参数,表示使用流模式备份 WAL 日志。
- -S, --slot=SLOTNAME:指定 WAL 流的复制槽。该选项只能与 --stream 标志一起使用。
- -j, --threads=NUM:并发几个线程来进行备份。
使用案例,在本地发起备份:
pg_probackup-12 backup -B /data/pgsql12/backup/ --instance test01 -b full
INFO: Database backup start
INFO: wait for pg_start_backup()
INFO: Wait for WAL segment /data/pgsql12/backup/wal/test01/00000002000000020000007E to be archived
INFO: PGDATA size: 2397MB
INFO: Current Start LSN: 2/7E000028, TLI: 2
INFO: Start transferring data files
INFO: Data files are transferred, time elapsed: 39s
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: stop_lsn: 2/7F0000F0
INFO: Getting the Recovery Time from WAL
INFO: Syncing backup files to disk
INFO: Backup files are synced, time elapsed: 1s
INFO: Validating backup RZXNYO
INFO: Backup RZXNYO data files are valid
INFO: Backup RZXNYO resident size: 2400MB
INFO: Backup RZXNYO completed
使用案例,发起远程备份:
pg_probackup-12 backup -B /data/pg_backup --instance test02 --remote-user='postgres' --remote-host='172.16.104.7' --remote-proto=ssh --stream --remote-port=22 -b full
INFO: Database backup start
INFO: wait for pg_start_backup()
INFO: Wait for WAL segment /data/pg_backup/backups/test02/S04Q23/database/pg_wal/000000020000000200000092 to be streamed
INFO: PGDATA size: 2405MB
INFO: Current Start LSN: 2/92000028, TLI: 2
INFO: Start transferring data files
INFO: Data files are transferred, time elapsed: 40s
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: stop_lsn: 2/920001A0
INFO: Getting the Recovery Time from WAL
INFO: Syncing backup files to disk
INFO: Backup files are synced, time elapsed: 1s
INFO: Validating backup S04Q23
INFO: Backup S04Q23 data files are valid
INFO: Backup S04Q23 resident size: 2439MB
INFO: Backup S04Q23 completed
接下来测试增量备份:
# 先发起一个物理全量备份
pg_probackup-12 backup -B /pg_data/backup --instance node01 -b full
查看备份信息:
======================================================================================================================================Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status
======================================================================================================================================node01 12 S0GD3F 2023-09-04 16:33:57+08 FULL ARCHIVE 3/0 44s 2446MB 16MB 1.00 4/E9000028 4/EA000128 OK
测试制造数据变动:
update pgbench_accounts set bid = 6;
基于上次的全备,进行增量备份:
pg_probackup-12 backup -B /pg_data/backup --instance node01 -b page
======================================================================================================================================Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status
======================================================================================================================================node01 12 S0GDJI 2023-09-04 16:43:24+08 PAGE ARCHIVE 3/3 31s 1090MB 16MB 1.00 5/6D000110 5/6E0000F0 OK node01 12 S0GD3F 2023-09-04 16:33:57+08 FULL ARCHIVE 3/0 44s 2446MB 16MB 1.00 4/E9000028 4/EA000128 OK
3.8 show
pg_probackup-12 show -B backup-path[--instance=instance_name [-i backup-id]][--format=format] [--archive][--no-color] [--help]
该方法用于查看备份列表信息和归档信息。使用案例,查看备份信息:
pg_probackup-12 show -B /data/pg_backup/
BACKUP INSTANCE 'test02'
======================================================================================================================================Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status
======================================================================================================================================test02 12 S04Q23 2023-08-29 09:42:50+08 FULL STREAM 2/0 54s 2407MB 32MB 1.00 2/92000028 2/920001A0 OK
使用案例,查看归档信息:
pg_probackup-12 show -B /data/pgsql12/backup/ --archive
ARCHIVE INSTANCE 'test01'
==================================================================================================================================TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status
==================================================================================================================================2 0 0/0 000000020000000200000072 000000020000000200000092 32 512MB 1.00 0 DEGRADED
3.9 delete
pg_probackup-12 delete -B backup-path --instance=instance_name[-j num-threads] [--progress][--retention-redundancy=retention-redundancy][--retention-window=retention-window][--wal-depth=wal-depth][-i backup-id | --delete-expired | --merge-expired | --status=backup_status][--delete-wal][--dry-run] [--no-validate] [--no-sync][--help]
该方法用于删除备份,或删除过期的归档日志。例如:
pg_probackup-12 delete -B /pg_data/backup/ --instance node01 -i S0G7IN
# INFO: Delete: S0G7IN 2023-09-04 14:32:47+08
删除过期的备份和 WAL 日志:
pg_probackup-12 delete -B /pg_data/backup --instance node01 --delete-expired --delete-wal
3.10 restore
pg_probackup-12 restore -B backup-path --instance=instance_name[-D pgdata-path] [-i backup-id] [-j num-threads][--recovery-target-time=time|--recovery-target-xid=xid|--recovery-target-lsn=lsn [--recovery-target-inclusive=boolean]][--recovery-target-timeline=timeline][--recovery-target=immediate|latest][--recovery-target-name=target-name][--recovery-target-action=pause|promote|shutdown][--restore-command=cmdline][-R | --restore-as-replica] [--force][--primary-conninfo=primary_conninfo][-S | --primary-slot-name=slotname][--no-validate] [--skip-block-validation][-T OLDDIR=NEWDIR] [--progress][--external-mapping=OLDDIR=NEWDIR][--skip-external-dirs] [--no-sync][-X WALDIR | --waldir=WALDIR][-I | --incremental-mode=none|checksum|lsn][--db-include | --db-exclude][--remote-proto] [--remote-host][--remote-port] [--remote-path] [--remote-user][--ssh-options][--archive-host=hostname][--archive-port=port] [--archive-user=username][--help]
该方法用于将备份恢复到新的 PostgreSQL 实例,如果指定恢复目标参数,pg_probackup 会查找最近的备份并将其恢复到指定的恢复目标,如果没有提供备份 ID 也没有提供恢复目标选项, pg_probackup 使用最新的备份来执行恢复。
全量备份恢复案例:
# 停掉 PostgreSQL
pg_ctl -D /data/pgsql12/data/ -l /data/pgsql12/logs/start.log stop# 删掉数据目录
rm -rf /data/pgsql12/data# 使用备份恢复,这里用的是远程备份恢复
pg_probackup-12 restore -B /data/pg_backup --instance test02 --remote-user='postgres' --remote-host='172.16.104.7' --remote-proto=ssh --stream --remote-port=22# 使用备份恢复,这里是本地备份
pg_probackup-12 restore -B /data/pgsql12/backup/ --instance test01 -i S08V98# 恢复后启动 PostgreSQL
pg_ctl -D /data/pgsql12/data/ -l /data/pgsql12/logs/start.log start
INFO: Validating backup S04Q23
INFO: Backup S04Q23 data files are valid
INFO: Backup S04Q23 WAL segments are valid
INFO: Backup S04Q23 is valid.
INFO: Restoring the database from backup at 2023-08-29 09:42:03+08
INFO: Start restoring backup files. PGDATA size: 2437MB
INFO: Backup files are restored. Transfered bytes: 2437MB, time elapsed: 52s
INFO: Restore incremental ratio (less is better): 100% (2437MB/2437MB)
INFO: Syncing restored files to disk
INFO: Restored backup files are synced, time elapsed: 3s
INFO: Restore of backup S04Q23 completed.
3.11 catchup
pg_probackup-12 catchup -b catchup-mode--source-pgdata=path_to_pgdata_on_remote_server--destination-pgdata=path_to_local_dir[--stream [-S slot-name] [--temp-slot | --perm-slot]][-j num-threads][-T OLDDIR=NEWDIR][--exclude-path=path_prefix][-d dbname] [-h host] [-p port] [-U username][-w --no-password] [-W --password][--remote-proto] [--remote-host][--remote-port] [--remote-path] [--remote-user][--ssh-options][--dry-run][--help]
3.12 archive-push
pg_probackup-12 archive-push -B backup-path --instance=instance_name--wal-file-name=wal-file-name[--wal-file-path=wal-file-path][-j num-threads] [--batch-size=batch_size][--archive-timeout=timeout][--no-ready-rename] [--no-sync][--overwrite] [--compress][--compress-algorithm=compress-algorithm][--compress-level=compress-level][--remote-proto] [--remote-host][--remote-port] [--remote-path] [--remote-user][--ssh-options][--help]
该方法用于备份归档文件, 可将该命令添加到 PostgreSQL 参数文件中。
# 自动归档的时间,单位为秒,可酌情设置,建议 1 分钟
max_wal_senders = 60
# 开启归档
archive_mode = 'on'
# WAL 格式,归档必须是 replica 及更高级别
wal_level = 'replica'
# 配置归档命令
archive_command = 'pg_probackup-12 archive-push -B /data/pgsql12/backup --instance test01 --wal-file-path=%p --wal-file-name=%f'
3.13 archive-get
pg_probackup-12 archive-get -B backup-path --instance=instance_name--wal-file-path=wal-file-path--wal-file-name=wal-file-name[-j num-threads] [--batch-size=batch_size][--no-validate-wal][--remote-proto] [--remote-host][--remote-port] [--remote-path] [--remote-user][--ssh-options][--help]
该方法用于将 WAL 文件从备份目录拷贝到 PostgreSQL WAL 日志目录,用于 PITR。该命令由 pg_probackup 自动设置 Restore_command 用户可不用关心如何设置。
3.14 checkdb
pg_probackup-12 checkdb [-B backup-path] [--instance=instance_name][-D pgdata-path] [--progress] [-j num-threads][--amcheck] [--skip-block-validation][--heapallindexed] [--checkunique][--help]
通过检测物理和逻辑损坏来验证 PostgreSQL 数据库集群的正确性。
3.15 validate
pg_probackup-12 validate -B backup-path [--instance=instance_name][-i backup-id] [--progress] [-j num-threads][--recovery-target-time=time|--recovery-target-xid=xid|--recovery-target-lsn=lsn [--recovery-target-inclusive=boolean]][--recovery-target-timeline=timeline][--recovery-target-name=target-name][--skip-block-validation][--help]
该方法用于验证备份的正确性。使用案例,验证 test02 实例编号为 S04Q23 的备份。
pg_probackup-12 validate -B /data/pg_backup -i S04Q23 --instance test02
INFO: Validating backup S04Q23
INFO: Backup S04Q23 data files are valid
INFO: Backup S04Q23 WAL segments are valid
INFO: Backup S04Q23 is valid.
INFO: Validate of backup S04Q23 completed.
3.16 merge
pg_probackup-12 merge -B backup-path --instance=instance_name-i backup-id [--progress] [-j num-threads][--no-validate] [--no-sync][--help]
该方法用于合并增量备份,合并备份文件。
相关文章:
PostgreSQL 备份恢复:pg_probackup
文章目录 前言1. 安装备份工具1.1 环境介绍1.2 RPM 安装1.3 验证 2. 配置备份工具2.1 初始化设置2.2 创建备份用户2.3 配置自动归档 3. 工具使用介绍3.1 init3.2 add-instance3.3 del-instance3.4 set-config3.5 show-config3.6 set-backup3.7 backup3.8 show3.9 delete3.10 re…...

博客程序系统其它功能扩充
一、注册功能 1、约定前后端接口 2、后端代码编写 WebServlet("/register") public class RegisterServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置…...

MATLAB 2023安装方法之删除旧版本MATLAB,安装新版本MATLAB
说明:之前一直使用的是MATLAB R2020b,但最近复现Github上的程序时,运行不了,联系作者说他的程序只能在MATLAB 2021之后的版本运行,因此决定安装最新版本的MATLAB。 系统:Windows 11 需要卸载的旧MATLAB 版…...

全国唯一一所初试考Java的学校!平均300分拿下
苏州科技大学 考研难度(☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1187字,预计阅读:3分钟 2023考情概况 苏州科技…...
day35 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
目录: 解题及思路学习 860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美…...
ffmpeg批量转码
新建.bat文件 echo offfor %%s in (*.mp4) do ( echo %%s ffmpeg -i %%s -b 7M %%~ns7m.mp4 ) pause如果你的电脑有显卡,也可以使用硬件转码。转码程序链接...

时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测
时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测 目录 时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-BiLSTM、PSO-BiLSTM和BiLSTM神经网络时间序列预测…...

【TypeScript学习】—基本类型(二)
【TypeScript学习】—基本类型(二) 一、TypeScript基本类型 //也可以直接用字面量进行类型声明let a:10; a10;//也可以使用 |来连接多个类型(联合类型)let b:"male"|"female"; b"male"; b"fe…...

uni-app点击复制指定内容(点击复制)
官方api uni.setClipboardData(OBJECT) uni.setClipboardData({data: 要被复制的内容,success: function () {console.log(success);} });...

无涯教程-Flutter - 简介
Flutter是一个由谷歌开发的开源移动应用软件开发工具包,用于为Android、iOS、 Windows、Mac、Linux、Google Fuchsia开发应用。 通常,创建移动应用程序是一个非常复杂和具有挑战性的任务。有许多框架可用,它提供了开发移动应用程序的出色函数…...

【STM32】学习笔记-时间戳RTC
Unix时间戳 Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同,不同时区通…...

绿色能源迎来跨越式增长新时代
当今世界,百年未有之大变局加速演进,新一轮科技革命和产业变革深入发展,全球气候治理呈现新局面,新能源和信息技术紧密融合,生产生活方式加快转向低碳化、智能化,能源体系和发展模式正在进入非化石能源主导…...

【算法】函数渐近的界基础知识及定理
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c系列专栏:C/C零基础到精通 🔥 给大…...
stable diffusion实践操作-writing
文章目录 前言一、优点1.1、免费开源1.2、拥有强大的外接模型 二、组成要素2.1 底模2.2 风格2.3 提示词2.4 参数配置 三、生图原理四、下载链接 实践正文一、安装1.1 电脑硬件配置查看1.2 安装本地版本的stable diffusion1.3 SD使用教程 二、模型介绍与下载2.1大模型2.2 Lora模…...

idea查找maven所有依赖
文章目录 idea自带的依赖结构图idea安装maven helper插件 idea自带的依赖结构图 缺点是只有依赖,没有版本 idea安装maven helper插件 settings–>plugins–>搜索maven helper并安装 安装后打开pom.xml文件会有依赖解析 勾选conflict就是有冲突的依赖选中…...

【业务功能篇97】微服务-springcloud-springboot-电商购物车模块-获取当前登录用户的购物车信息
购物车功能 一、购物车模块 1.创建cart服务 我们需要先创建一个cart的微服务,然后添加相关的依赖,设置配置,放开注解。 <dependencies><dependency><groupId>com.msb.mall</groupId><artifactId>mall-commo…...

Shell常用的几个正则表达式:[:alnum:], [:alpha:], [:upper:], [:lower:], [:digit:] 认知
一:通配符命令简介: 匹配符合相关条件的符号,匹配文件名查找。 通配符类型: *:匹配任意长度的任意字符 ?:匹配任意单个字符 []:匹配指定范围内的任意单个字符 [^]:匹配指…...

简单的爬虫代码 爬(豆瓣电影)
路漫漫其修远兮,吾将上下而求索 这次写一个最简单的python爬虫代码,也是大多教程第一次爬取的,代码里面有个别的简单介绍,希望能加深您对python爬虫的理解。 本次爬取两个网页数据 一 爬取的网站 豆瓣电影 爬取网页中的&#…...

微服务之架构演变
随着互联网的发展,网站应用规模不断扩大,网站架构随之不断演变,演变历史大致分为单体应用架构-垂直应用架构-分布式架构-SOA架构-微服务架构-云原生架构 架构演变 单体应用架构 以前网站流量小,只需要一个应用就可以把所有功能…...
面试问题记录一 --- C++(Qt方向)
以下是我于2023年6~7月间换工作时遇到的面试题目,有需要的小伙伴可以参考下。约100个题目。 1 C和C++的区别 1) 文件区别:C源文件后缀 .c;C++源文件后缀 .cpp 2) 返回值: C默认返回int型;C++ 若无返回值,必须指定为void 3) 参数列表:C默认接收多个…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...