MySQL 数据库的日志管理、备份与恢复

一. 数据库备份

1.数据备份的重要性

 备份的主要目的是灾难恢复。

  1. 在生产环境中,数据的安全性至关重要。

  2. 任何数据的丢失都可能产生严重的后果。

  • 造成数据丢失的原因:

    程序错误人为,操作错误,运算错误,磁盘故障灾难(如火灾、地震)和盗窃.

容灾概念:

容灾(Disaster Recovery, DR)是指为了保障企业或组织的关键业务在遇到突发灾难性事件(如火灾、地震、洪水、恐怖袭击、网络攻击、硬件故障等)时,能够迅速恢复运营,保证数据安全和业务连续性的策略和技术手段。在信息技术(IT)领域中,容灾具体体现为一套完整的体系,包括预防、准备、响应和恢复四个阶段,旨在最大程度降低灾难对业务的影响,确保即使主数据中心失效,也能通过备用系统或远程站点迅速接管业务,维持服务的连续性和数据完整性。

容灾系统通常设计如下特点:

  1. 异地建设:在地理上远离主数据中心的位置设立备份站点,以防本地灾难波及。
  2. 功能冗余:备份站点拥有与主站点相同或相似的功能,可以无缝接管业务运行。
  3. 数据同步或复制:通过实时或近实时的数据复制技术,确保备份站点的数据与主站点保持一致或接近一致。
  4. 快速切换与恢复:在主站点出现故障时,能快速进行系统切换,确保业务中断时间(RTO: Recovery Time Objective)和数据损失量(RPO: Recovery Point Objective)达到可接受范围。

容灾方案可分为多种等级,如热容灾(Hot Site)、温容灾(Warm Site)和冷容灾(Cold Site),取决于备用站点的激活时间和数据恢复的程度。随着技术发展,还有基于云计算的容灾解决方案,提供了更为灵活和成本效益高的容灾选项。

2. 数据库备份的分类和备份的策略

2.1 数据库备份的分类

2.1.1 物理备份

物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。

物理备份方法:

  • 冷备份(脱机备份) :是在关闭数据库的时候进行的
  • 热备份(联机备份) :数据库处于运行状态,依赖于数据库的日志文件
  • 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作
2.1.2 逻辑备份

逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份。

  • 即以sql语句的形式,把库、表结构、表数据保存下来。

2.2 数据库的备份策略

从数据库的备份策略角度,备份可分为

  • 完全备份:每次对数据库进行完整的备份
  • 差异备份:备份自从上次完全备份之后被修改过的文件
  • 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份

解释:

2.2.1 完全备份

2.2.2 差异备份

2.2.3 增量备份

2.2.4 三种备份方式的比较
备份方式完全备份差异备份增量备份
完全备份时的状态1,21,21,2
第一次添加内容创建3创建3创建3
备份内容1,2,333
第二次添加内容创建4创建4创建4
备份内容1,2,3,43,44
2.2.5 如何选择逻辑备份策略

一周一次的全备,全备的时间需要在不提供业务的时间区间进行,PM 10点 AM 5点之间进行全备  凌晨1~5点

增量备份:3天/2天/1天一次增量备份

差异备份:选择特定的场景进行备份

2.3 常见的备份方法

  • 物理冷备: (完全备份)
    • 备份时数据库处于关闭状态,直接打包数据库文件
    • 备份速度快,恢复时也是最简单的
  • 专用备份工具 mydump 或 mysqlhotcopy (完全备份,逻辑备份)
    • mysqldump 常用的逻辑备份工具 (导出为sql脚本)
    • mysqlhotcopy 仅拥有备份 MyISAM 和 ARCHIVE 表
  • 启用二进制日志进行增量备份 (增量备份)
    • 进行增量备份,需要刷新二进制日志
  • 第三方工具备份
    • 免费的MySQL热备份软件Percona XtraBackup
    • (阿里云的工具:dts,支持热迁移)

二. MySQL 完全备份

1. 完全备份介绍

  • 完全备份是对整个数据库、数据库结构和文件结构的备份
  • 保存的是备份完成时刻的数据库
  • 是差异备份与增量备份的基础

2. 完全备份的优缺点

优点:

  • 备份与恢复操作简单方便

缺点:

  • 数据存在大量的重复
  • 占用大量的备份空间
  • 备份与恢复时间长

3. 完全备份的方法

  • 物理冷备份与恢复
    • 关闭MySQL数据库
    • 使用 tar 命令直接打包数据库文件夹
    • 直接替换现有MySQL目录即可
  • mysqldump备份与恢复
    • MySQL自带的备份工具,可方便实现对MySQL的备份
    • 可以将指定的库、表导出为SQL脚本
    • 使用命令mysq|导入备份的数据

4. 完全备份与恢复的操作

4.1 物理冷备份与恢复

先关闭数据库

4.1.1 方法一
备份:
[root@localhost mysql]#pwd
/usr/local/mysql
[root@localhost mysql]#tar zcvf data.tar.gz data/[root@localhost mysql]#mv data.tar.gz /opt

恢复:

4.1.2 方法二
备份:

成功压缩备份

恢复:
[root@localhost mysql]#ls
[root@localhost mysql]#mkdir data
[root@localhost mysql]#ls
data
[root@localhost mysql]#pwd
/home/mysql
[root@localhost mysql]#tar Jxvf /opt/mysql_all_2024-03-25.tar.xz -C ./

4.2 mysqldump 备份与恢复

备份:

4.2.1 完全备份一个或多个完整的库(包括其中所有的表)
mysqldump -u root -p[密码] --databases 库名1 [库名2] ... > /备份路径/备份文件名.sql    #导出的就是数据库脚本文件

4.2.2 完全备份MySQL服务器中所有的库
mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql

4.2.3 完全备份指定库中的部份表
mysqldump -u root -p[密码] [-d] 库名 [表名1] [表名2] ... > /备份路径/备份文件名.sql#使用 -d 选项,说明只保存数据库的表结构
#不使用 -d 选项,说明表数据也进行备份

4.2.4 查看备份文件

先看里面的内容

然后我们只用以下方法,过滤出备份文件信息

[root@localhost mysql]#grep -v '^--' /data/test2_class2.sql |grep -v '^/'|grep -v '^$'这条命令是用于Unix/Linux环境下的文本筛选,具体作用是对 /data/test2_class2.sql 文件内容进行多次筛选过滤:grep -v '^--': 过滤掉所有以双连字符(注释符号)开始的行。在SQL文件中,这样的行通常代表注释行。| grep -v '^/': 再次过滤,去除所有以正斜杠(/)开始的行。在某些情况下,这种行可能代表SQL脚本中的某些特殊指令或注释(例如在Oracle SQL中的一些PL/SQL块声明)。| grep -v '^$': 最后一步过滤,移除所有空行(即只有换行符,没有其他任何内容的行)。

恢复:

4.2.5 使用 source 命令恢复数据

#恢复数据
mysql> source /data/class2.sql;

也可以直接在外面免交互查看:

4.2.6 重定向导入备份文件
#恢复
mysql -uroot -p123 test2 < /data/class2.sql #查看
mysql -uroot -p123 -e 'show tables from test2';

4.2.7 备份加与不加 --databases

mysqldump 严格来说属于温备份,会需要对表进行写入的锁定,在全量备份与恢复实验中:

① 当备份时加 --databases,表示针对 test2库

测试:

删除:

恢复:

查看:

② 当备份时不加 --databases,表示针对test2库下的所有表

恢复数据是会报错

恢复:

查看:

主要区别:

在于两种方式的备份(前者则全是针对表格进行操作,而后者会从 "create databases"开始)

5. 在生产环境中,可以使用Shell脚本自动实现定时备份(时间频率需要确认)

#!/bin/bash
# 定义变量
DATE=$(date +%Y%m%d_%H%M%S)
MYSQL_USER="username"
MYSQL_PASS="password"
DATABASE="database_name"
BACKUP_DIR="/path/to/backup/directory"# 执行mysqldump命令备份数据库
mysqldump -u$MYSQL_USER -p$MYSQL_PASS $DATABASE | gzip > $BACKUP_DIR/database_$DATE.sql.gz# 可选:删除超过一定天数的旧备份
find $BACKUP_DIR -name 'database_*.sql.gz' -type f -mtime +15 -exec rm {} \;# 输出备份成功信息
echo "Database backup successfully created at $BACKUP_DIR/database_$DATE.sql.gz"在上面的脚本中:mysqldump 命令用于导出MySQL数据库的内容。
-u$MYSQL_USER 和 -p$MYSQL_PASS 分别指定了数据库用户名和密码。
$DATABASE 是你要备份的数据库名称。
$BACKUP_DIR 是备份文件保存的目录。
备份文件名中包含日期时间戳,便于按时间排序和管理。
可选部分是通过find命令清理超过15天的旧备份。
将脚本保存为可执行文件,例如:/usr/local/bin/mysql_backup.sh,然后赋予执行权限:chmod +x /usr/local/bin/mysql_backup.sh设置定时任务(Cron Job): 打开crontab编辑器(使用root或具有执行备份任务权限的用户身份):
crontab -e然后在文件末尾添加一条定时任务,比如每天凌晨1点执行备份
0 1 * * * /usr/local/bin/mysql_backup.sh保存并退出crontab编辑器,定时任务就会按照设定的时间自动执行MySQL数据库备份。

三. MySQL 增量备份与恢复

1. 关于增量备份

1.1 增量备份产生的原因 

  • 使用 mysqldump 进行完全备份存在的问题
    • 备份数据中有重复数据
    • 备份时间与恢复时间过长
  • 增量备份是什么:
    • 是自上一次备份后增加/变化的文件或者内容
  • 增量备份的特点
    • 没有重复数据,备份量不大,时间短
    • 恢复需要上次完全备份及完全备份之后所有的增量备份才 能恢复,而且要对所有增量备份进行逐个反推恢复

1.2 增量备份的过程 

  • MySQL没有提供直接的增量备份方法
  • 可通过MySQL提供的二进制日志间接实现增量备份
  • MySQL二进制日志对备份的意义
    • 二进制日志保存了所有更新或者可能更新数据库的操作
    • 二进制日志在启动MySQL服务器后开始记录,并在文件达到 max_binlog_size 所设置的大小或者接收到 flush logs 命令后重新创建新的日志文件
    • 只需定时执行 flush logs 方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份

1.3 增量备份的方式

  • 一般恢复

    • 将所有备份的二进制日志内容全部恢复
  • 基于位置恢复

    • 数据库在某一时间点可能既有错误的操作也有正确的操作
    • 可以基于精准的位置跳过错误的操作
  • 基于时间点恢复

    • 跳过某个发生错误的时间点实现数据恢复

2. MySQL 日志

配置文件:/etc/my.cnf

[mysqld]  模块下

错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启
log-error=/usr/local/mysql/data/mysql_error.log 

通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启
log-bin=mysql-bin 


log_bin=mysql-bin

中继日志
一般情况下它在Mysql主从同步(复制)、读写分离集群的从节点开启。主节点一般不需要这个日志

慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便提醒优化,默认是关闭的
s1ow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5        #设置超过5秒执行的语句被记录,缺省时为10秒

show variables like 'general%';       #查看通用查询日志是否开启
show variables like 'log_bin%';       #查看二进制日志是否开启
show variables like '%slow%';         #查看慢查询日功能是否开启
show variables like 'long_query_time';    #查看慢查询时间设置
set global slow_query_log=ON;         #在数据库中设置开启慢查询的方法PS:variables 表示变量 like 表示模糊查询##复制段
log-error=/usr/local/mysql/data/mysql_error.log
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
log-bin=mysql-bin
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5
二进制日志开启后,重启 mysql 会在目录中查看到二进制日志
cd /usr/local/mysql/data
ls
mysql-bin.000001		#开启二进制日志时会产生一个索引文件及一个索引列表
索引文件:记录更新语句
索引文件刷新方式:
1、重启mysql的时候会更新索引文件,用于记录新的更新语句
2、刷新二进制日志mysql-bin.index:
二进制日志文件的索引

3. 增量备份操作

3.1 开启二进制日志功能

二进制日志(binlog)有3种不同的记录格式:

STATEMENT (基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT

  • ① STATEMENT(基于SQL语句)

每一条涉及到被修改的 sql 都会记录在 binlog 中
缺点:日志量过大,如 sleep()函数,last_insert_id()>,以及 user-defined fuctions(udf)、主从复制等架构记录日志时会出现问题

总结:增删改查通过sql语句来实现记录,如果用高并发可能会出错,可能时间差异或者延迟,可能不是我们想想的恢复可能你先删除或者在修改,可能会倒过来。准确率低

  • ② ROW(基于行)

只记录变动的记录,不记录 sql 的上下文环境
缺点:如果遇到 update......set....where true 那么 binlog 的数据量会越来越大

总结:update、delete 以多行数据起作用,来用行记录下来,
只记录变动的记录,不记录 sql 的上下文环境,
比如 sql 语句记录一行,但是ROW就可能记录10行,但是准确性高,高并发的时候由于操作量,性能变低,比较大所以记录都记下来,

  • ③ MIXED 推荐使用

一般的语句使用 statement,函数使用ROW方式存储。

mysql> show variables like 'general%';

mysql> show variables like 'log_bin%';

查看到日志存放位置

3.2 查看二进制文件内容

[root@localhost data]#mysqlbinlog --no-defaults /data/mysql-bin.000001

[root@localhost data]#mysqlbinlog --no-defaults --base64-output=decode-rows -v /data/mysql-bin.000001 #
-v: 显示详细内容
--no-defaults : 默认字符集(不加会报UTF-8的错误)PS: 可以将解码后的文件导出为txt格式,方便查阅
mysqlbinlog --no-defaults --base64-output=decode-rows -v /data/mysql-bin.000001 > /opt/mysql-bin.000001

[root@localhost data]#mysqlbinlog --no-defaults --base64-output=decode-rows -v /data/mysql-bin.000001 > /data/mysql-bin.000001.txt

二进制日志中需要关注的部分

3.3 实际操作

3.3.1 准备工作

刷新后02的日志新生成的,里面是空的

先备份数据

3.3.2 一般恢复

恢复数据:

方式一:

先删除:

恢复数据

[root@localhost data]#mysql -uroot -p123 test1  < test1_class1_2024-03-25.sql 

查看

方式二:

得事先将库给删了。不然会报错,因为他前面重复了

[root@localhost data]#mysqlbinlog --no-defaults mysql-bin.000001 | mysql -uroot -p123

3.3.3 基于位置点恢复

先插入数据

测试:

将库删掉

查看数据

增量备份,先将之前的恢复

开始恢复

查看

我们的目的是恢复前三条数据,下面我们看02的过程

查看:

如果想跳过第4条,恢复第五条

查看

这是基于位置点恢复数据

基于位置点恢复
#仅恢复到操作 ID 为'1102'之前的数据,即恢复1 2的数据
mysqlbinlog --no-defaults --stop-position='1102' mysql-bin.000001|mysql -uroot -p123#恢复3数据  起始操作ID 为'2947',截止id为 '3237'
mysqlbinlog --no-defaults --start-position='2947' --stop-position='3237' mysql-bin.000002|mysql -uroot -p123#跳过第4条数据,恢复第5条数据,直接从第5条开始到最后
mysqlbinlog --no-defaults --start-position='3527' mysql-bin.000002|mysql -uroot -p123
3.3.4 基于时间点恢复
mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小时:分钟:秒' --stop-datetime='年-月-日小时:分钟:秒' 二进制日志 | mysql -u 用户名 -p 密码

下面我们恢复第4条数据,用时间来恢复

查看:

如果恢复某条SQL语之前的所有数据,就stop在这个语句的位置节点或者时间点
如果恢复某条SQL语句以及之后的所有数据,就从这个语句的位置节点或者时间点start

总结:

① 物理冷备份

关闭 mysqld 服务,tar 命令打包 /usr/local/mysql 下的 data 目录 ,恢复就是直接解压 tar 包

② 逻辑备份

mysqldump -uxxx -pxxx --database 库1 库2 > xxx.sql

mysqldump -uxxx -pxxx --all-databases > xxx.sql

mysqldump -uxxx -pxxx 库1 表1 表2 > xxx.sql

完全恢复

mysql -uxxx -pxxx < xxx.sql  恢复库

mysql -uxxx -pxxx 库名 < xxx.sql

③ 增量备份

1 开启二级制日志,设置二进制日志格式MIXED

2 进行一次完全备份,可每周备份一次,通过crontab-e

3 使用mysqladmin -uroot -p

flush-logs刷新分割出二进制日志文件,由于刷新之前的数据都会记录在老的二进制日志里

4 可以通过mysqlbinlog  --no-defaults --base64-output=decode-rows  -v二进制日志文件名 查看日志内容

5 可以通过 mysqlbinlog --no-defaults 二进制日志文件名  mysql -uroo -t 恢复丢失的数据库

④ 位置恢复

start 开始(单独使用假设你要回复之后的数据可以使用start)

stop 结束(单独使用假设你要回复之前的数据可以使用stop)

⑤ 时间恢复

同上

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

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

相关文章

Docker部署MinIO对象存储服务

1. 拉取MinIO镜像 # 下载镜像 docker pull minio/minio#查看镜像 docker images2. 创建目录 # 文件存储目录 mkdir -p /opt/minio/data# 配置文件 mkdir -p /opt/minio/config# 日志文件 mkdir -p /opt/minio/logs3. 创建Minio容器并运行 docker run \ -p 9000:9000 \ -p 90…

CSS(一)---【CSS简介、导入方式、八种选择器、优先级】

零.前言 本系列适用于零基础小白&#xff0c;亦或是初级前端工程师提升使用。 知识点较为详细&#xff0c;如果追求非常详细&#xff0c;请移步官方网站或搬运网站。 1.CSS简介 CSS全称&#xff1a;“Cascading Style Sheets”&#xff0c;中文名&#xff1a;“层叠样式表”…

Codeforces Round 937 (Div. 4)(D~G)

D - Product of Binary Decimals 题意&#xff1a; 思路&#xff1a;观察到n的范围很小&#xff0c;先求出所有可能的二进制十位数&#xff0c;然后dp把所有可能的值求出来。注意不能用求因子的方法来求解&#xff0c;因为这些二进制十位数不一定是素数&#xff0c;先除某个数…

车道线检测项目 | 基于lanenet实现的实时车道线检测

项目应用场景 面向自动驾驶场景的车道线检测场景&#xff0c;项目的特点是能够达到实时的车道线检测 项目效果&#xff1a; 项目细节 > 具体参见项目 README.md (1) 安装依赖 pip3 install -r requirements.txt (2) 测试图片 python tools/test_lanenet.py --weights_pat…

|行业洞察·香氛|《小红书2023香水香氛营销宝典-71页》

报告内容的详细解读&#xff1a; 行业格局 预计到2025年&#xff0c;香水市场规模将超过300亿&#xff0c;小红书成为香水种草的重要平台。从2018年到2025年&#xff0c;市场规模持续增长&#xff0c;年增速保持在20%左右。香水市场的热度在节日节点尤为明显&#xff0c;如情…

以XX医院为例的医疗建筑能效管理系统【建筑能耗 供电可靠 】

一、行业背景 二、行业特点 1.供电可靠性要求高&#xff1a;医院配电系统复杂&#xff0c;门诊、急救、手术室、ICU/CCU、血液透析等场合特一级和一级负荷比较多&#xff0c;一旦发生故障会造成严重影响&#xff0c;对配电可靠性要求极高。 2.能耗水平高&#xff1a;医院能耗…

排序大乱炖

目录 一&#xff1a;插入排序 1.1直接插入排序 1.2希尔排序 二&#xff1a;选择排序 2.1选择排序 2.2堆排序 三&#xff1a;交换排序 3.1冒泡排序 3.2快速排序 3.2.1Hoare版本 3.2.2双指针法 3.2.3非递归 一&#xff1a;插入排序 1.1直接插入排序 直接插入排序…

自动化测试 —— Pytest fixture及conftest详解

前言 fixture是在测试函数运行前后&#xff0c;由pytest执行的外壳函数。fixture中的代码可以定制&#xff0c;满足多变的测试需求&#xff0c;包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在&#xff0c;类似u…

python pytz是什么

pytz模块常用于时区的转换&#xff0c;常常配合datetime一起使用。我们知道datetime除了data方法生成的时间是没有时区概念&#xff0c;其他如time、datetime等都是有时区概念&#xff0c;即指定了tzinfo信息。 >>> import datetime >>> datetime.datetime.n…

绿联 安装DockerCopilot,一键更新已安装的容器

1、镜像 0nlylty/dockercopilot:UGREEN 2、安装 2.1、基础设置 交互、TIY、硬件渲染全部开启&#xff1b; 容器能力&#xff1a;赋予全部能力&#xff1b; 重启策略&#xff1a;容器退出时总是重启容器。 2.2、网络 选择host模式。 2.3、存储空间 装载路径/data不允许修…

Verilog语法之case语句学习

case分支语句是一种实现多路分支控制的分支语句。与使用if-else条件分支语句相比&#xff0c;采用case分支语句来实现多路控制会变得更加的方便直观。 case分支语句通常用于对微处理器指令译码功能的描述以及对有限状态机的描述。Case分支语句有“case”、“casez”、“casex”…

excel 提取数字字符混合文本中的数字(快捷键ctrl+e)

首先&#xff0c;已知A列数据&#xff0c;在B1单元格输入A列中的数据&#xff0c;如3*4*6 第二部&#xff1a;全选对应的B列&#xff0c;然后&#xff1a; ctrld 批量复制 CTRLE 智能复制 由此可见&#xff0c;智能提取汉字与数字混合中的数字方法 。若想分别提取3个数字&am…

原型链-(前端面试 2024 版)

来讲一讲原型链 原型链只存在于函数之中 四个规则 1、引用类型&#xff0c;都具有对象特性&#xff0c;即可自由扩展属性。 2、引用类型&#xff0c;都有一个隐式原型 __proto__ 属性&#xff0c;属性值是一个普通的对象。 3、引用类型&#xff0c;隐式原型 __proto__ 的属…

ZK友好代数哈希函数安全倡议

1. 引言 前序博客&#xff1a; ZKP中的哈希函数如何选择ZK-friendly 哈希函数&#xff1f;snark/stark-friendly hash函数Anemoi Permutation和Jive Compression模式&#xff1a;高效的ZK友好的哈希函数Tip5&#xff1a;针对Recursive STARK的哈希函数 随着Incrementally Ve…

春秋云境CVE-2023-7130

简介 College Notes Gallery 2.0 允许通过“/notes/login.php”中的参数‘user’进行 SQL 注入。利用这个问题可能会使攻击者有机会破坏应用程序&#xff0c;访问或修改数据. 正文 这关有我用了两种办法&#xff0c;第一种是用报错注入进行手注&#xff0c;第二种就是sqlmap…

卡特尔16pf性格测试的用途,HR招聘测评和求职面试测评

卡特尔16pf性格测试&#xff0c;由美国心理学家卡特尔创建&#xff0c;通常简称为16pf&#xff0c;也叫16种人格因素&#xff0c;卡特尔把人格特征提取出16种特性&#xff0c;每种特性的不同并共同组合成丰富各异的人群。 而这16种人格因素&#xff0c;也常常被用于企业人力资…

Flask后端框架搭建个人图库

Hello&#xff0c;我是"小恒不会java" 前言 最近发现自己有一些站点图片丢失&#xff0c;原来是用了人家的链接。考虑到使用对象存储容易被刷流量&#xff0c;可以用flask这种轻量级框架快速实现网页登陆操作&#xff0c;行&#xff0c;也就不考虑正式生产环境那些复…

springcloud微服务项目,通过gateway+nacos实现灰度发布(系统不停机升级)

一、背景 灰度发布的目的是保证系统的高可用&#xff0c;不停机&#xff0c;提升用户体验。在微服务系统中&#xff0c;原有系统不下线&#xff0c;新版系统与原有系统同时在线&#xff0c;通过访问权重在线实时配置&#xff0c;可以让少量用户先应用新版本功能&#xff0c;如…

如何使用 ArcGIS Pro 制作三维建筑

三维地图已经逐渐成为未来地图的趋势&#xff0c;对于大范围应用&#xff0c;只需要普通的建筑体块就行&#xff0c;如果有高程数据&#xff0c;还可以结合地形进行显示&#xff0c;这里为大家介绍一下 ArcGIS Pro 制作三维建筑的方法&#xff0c;希望能对你有所帮助。 数据来…

睿尔曼超轻量仿人机械臂之复合机器人底盘介绍及接口调用

机器人移动平台是一个包含完整成熟的感知、认知和定位导航能力的轮式机器人底盘产品级平台&#xff0c;产品致力于为各行业细分市场的商用轮式服务机器人提供一站式移动机器人解决方案&#xff0c;让合作伙伴专注在核心业务/人机交互的实现。以下是我司产品双臂机器人以及复合升…