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

MySQL--数据库备份

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

一、为什么要备份

  • 备份:能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方。
  • 冗余: 数据有多份冗余,但不等备份,只能防止机械故障带来的数据丢失,例如主备模式、数据库 集群。

二、MySQL数据备份需要重视的内容

  • 备份内容:databasesBinlog my.cnf
  • 所有备份数据都应放在非数据库本地,而且建议有多份副本。
  • 测试环境中做日常恢复演练,恢复较备份更为重要。

备份过程必须考虑因素:

 1. 数据的一致性2. 服务的可用性Mysql A (读写) 压力比较大|Mysql B (读) 压力比较小 从节点做备份

三、MySQL备份类型

1、物理备份

直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。

(1)热备(hot backup)

在线备份数据库处于运行状态,这种备份方法依赖于数据库的日志文件;对应用基本无影响(但是性能还是会有下降,所以尽量不要在主库上做备份,在从库上做)

(2)冷备(cold backup)

备份数据文件,需要停机,是在关闭数据库的时候进行的;

  • 备份 datadir 目录下的所有文件

(3)温备(warm backup)

  • 针对myisam的备份(myisam不支持热备),备份时候实例只读不可写,数据库锁定表格(不可写入但可 读)的状态下进行的
  • 对应用影响很大
  • 通常加一个读锁

2、逻辑备份

备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库,效率相对较低。

3、物理和逻辑备份的区别

逻辑备份物理备份
备份方式备份数据库建表、建库、插入sql备份数据库物理文件
优点语句备份文件相对较小,只备份表中的数据与结构恢复速度比较快
缺点恢复速度较慢(需要重建索引,存储过程等)备份文件相对较大(备份表空间,包含数据与索引)
对业务影响I/0负载加大I/O负载加大
代表工具mysqldumpibbackupxtrabackup

四、MySQL备份工具

 1、ibbackup官方备份工具;收费;物理备份​2、xtrabackup开源社区备份工具;开源免费;物理备份​3、mysqldump官方自带备份工具;开源免费;逻辑备份(速度慢)​4、mysqlbackupmysql 官方备份工具;innodb 引擎的表mysqlbackup 可以进行热备;非innodb 表mysqlbackup 就只能温备;物理备份,备份还原速度快;适合大规模数据使用;

五、物理备份的方式

1、完全备份——完整备份

每次对数据进行完整的备份,即对整个数据库的备份、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。

优点:备份与恢复操作简单方便,恢复时一次恢复到位,恢复速度快

缺点:占用空间大,备份速度慢

2、增量备份

每次备份上一次备份到现在产生的新数据;只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次的增量备份的时间为时间点,仅备份这之间的数据变化;

特点:因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份起按备份时间顺序,逐个备份版本进行恢复,恢复时间长,如中间某次的备份数据损坏,将导致数据的丢失。

3、差异备份

只备份跟完整备份不一样的;备份那些自从第一次次完全备份之后被修改过的所有文件,备份的时间起点是从第一次的完整备份起,且以 后每次备份都是和第一次完整备份进行比较(注意是第一次,不是上一次),备份自第一次完整备份以来所有的修改过的文件;备份数据量会越来越大;

特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后一次的差异版本,恢复速度介于完整备份和增量备份之间。

六、percona工具

Xtrabackup 是开源免费的支持MySQL 数据库热备份的软件,在 Xtrabackup 包中主要有Xtrabackup innobackupex 两个工具。其中 Xtrabackup 只能备份 InnoDB 和 XtraDB 两种引擎; innobackupex则是封装了Xtrabackup,同时增加了备份MyISAM引擎的功能。它不暂停服务创建Innodb热备份;

Software Downloads - Percona

1、安装xtrackbackup

百度自行搜索;

(1)上传peronaRPM包

 # yum -y install percona-xtrabackup-24-2.4.5-1.el7.x86_64.rpm 

2、完全备份流程

 1、systemctl stop mysqld     # 关闭数据库2、mkdir /xtrabackup/        # 创建备份目录3、innobackupex --user=root --password=123 /xtrabackup/      # 备份4、innobackupex --apply-log /xtrabackup/<要恢复的目录>         # 准备恢复数据5、innobackupex --copy-back /xtrabackup/<要恢复的目录>         # 恢复数据6、chown mysql.mysql /data -R                                # 添加权限

具体示例演示:

 # 数据库备份[root@centos /]# innobackupex --user=root --password=123 /xtrabackup/# 备份完成,在/xtrabackup/目录下能看到备份好的目录[root@centos /]# cd /xtrabackup/[root@centos xtrabackup]# ls2024-07-26_15-41-02--------------------------------------------------------# 实验:删除数据库中的数据[root@centos /]# rm -rf /data/mysql/data/       # 删除完数据,可进入数据库查看库进行验证,开始恢复数据[root@centos /]# innobackupex --apply-log /xtrabackup/2024-07-26_15-41-02[root@centos /]# innobackupex --copy-back /xtrabackup/2024-07-26_15-41-02[root@centos /]# chown mysql.mysql /data -R # 恢复完成[root@centos /]# systemctl restart mysqld[root@centos /]# mysqlmysql> show databases;

3、增量备份流程

基本语法:

 1、systemctl stop mysqld2、innobackupex --user=root --password=123 /xtrabackup/ # 完全备份3、innobackupex --user=root --password=123 --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/完全备份的目录4、innobackupex --user=root --password=123 --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/上一次增量的备份目录​5、innobackupex --apply-log --redo-only /xtrabackup/全备目录6、innobackupex --apply-log --redo-only /xtrabackup/全备 --incremental-dir=/xtrabackup/要恢复的上一次增量目录7、innobackupex --copy-back /xtrabackup/全备

具体示例演示:

 [root@centos /]# innobackupex --user=root --password=123 /xtrabackup/   #全备 [root@centos /]# cd /xtrabackup     # 检查第一次全备目录[root@centos xtrabackup]# ls2024-07-26_16-54-18​​# 开始实验,创建周一sunday库mysql> create database sunday;# 第一次备份选用上个备份目录,这里即全备目录[root@centos /]# innobackupex --user=root --password=123 --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2024-07-26_16-54-18   # 查看目录,发现多了带有sunday库的目录[root@localhost xtrabackup]# ls             2024-07-26_16-54-18  2024-07-26_17-01-01​​# 再创建一个周二tuesday库mysql> create database tuesday;# 第二次增量备份选用上次目录,即从sunday库备份的目录[root@centos /]# innobackupex --user=root --password=123 --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2024-07-26_17-01-01   [root@localhost xtrabackup]# ls         # 查看,多出的目录即带有tuesday的备份目录2024-07-26_16-54-18  2024-07-26_17-01-01  2024-07-26_17-03-34​# 增加权限并重启mysqld服务[root@centos /]# rm -rf /data/mysql/data[root@centos /]# chown -R mysql.mysql /data[root@centos /]# systemctl restart mysqldmysql> show databases;      # 检查数据库,发现无数据库;开始恢复[root@centos /]# innobackupex --apply-log --redo-only /xtrabackup/2024-07-26_16-54-18[root@centos /]# innobackupex --apply-log --redo-only /xtrabackup/全备 --incremental-dir=/xtrabackup/2024-07-26_17-03-34  # 这里选择恢复tuesday备份目录mysql> show databases;      # 检查数据库,发现数据库中连带monday库一起恢复+--------------------+| Database           |+--------------------+| information_schema || monday             || mysql              || performance_schema || sys                || tuesday            |+--------------------+

4、差异备份流程

七、mysqldump逻辑备份

推荐优先使用

1、常用备份选项

 -A, --all-databases #备份所有库-B, --databases #备份多个数据库-F, --flush-logs #备份之前刷新binlog日志--default-character-set #指定导出数据时采用何种字符集,如果数据表不是采用默认的latin1字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。--no-data,-d #不导出任何数据,只导出数据库表结构。--lock-tables #备份前,锁定所有数据库表--single-transaction #保证数据的一致性和服务的可用性-f, --force #即使在一个表导出期间得到一个SQL错误,继续。

使用 mysqldump 备份数据库时避免锁表:

对一个正在运行的数据库进行备份请慎重!! 如果一定要在服务运行期间备份,可以选择添加 --single-transaction选项, 类似执行: mysqldump --single-transaction -u root -p123456 dbname > mysql.sql

2、备份表

 语法: # mysqldump -u root -p1 db1 t1 > /db1.t1.bak[root@mysql-server ~]# mkdir /home/back             # 创建备份目录[root@mysql-server ~]# mysqldump -uroot -p'qf123' company employee5 >/home/back/company.employee5.bak# 备份多个表:语法: mysqldump -u root -p1 db1 t1 t2 > /db1.t1_t2.bak[root@mysql-server ~]# mysqldump -uroot -p'qf123' company new_t1 new_t2 >/home/back/company.new_t1_t2.bak

3、备份库

 备份一个库:相当于将这个库里面的所有表全部备份。语法: # mysqldump -u root -p1 db1 > /db1.bak[root@mysql-server ~]# mysqldump -uroot -p'qf123' company >/home/back/company.bak备份多个库:语法:mysqldump -u root -p1 -B db1 db2 db3 > /db123.bak[root@mysql-server ~]# mysqldump -uroot -p'qf123' -B company testdb >/home/back/company_testdb.bak备份所有的库:语法:# mysqldump -u root -p1 -A > /alldb.bak[root@mysql-server ~]# mysqldump -uroot -p'qf123' -A > /home/back/allbase.bak

4、恢复数据库和表

为保证数据一致性,应在恢复数据之前停止数据库对外的服务,停止binlog日志 因为binlog使用binlog日志恢复数据时也会产生binlog日志。

为实验效果先将刚才备份的数据库和表删除了。登陆数据库:

 [root@mysql-server ~]# mysql -uroot -pqf123mysql> show databases;mysql> drop database company;mysql> \q

恢复库

 登陆mysql创建一个库mysql> create database company;恢复:[root@mysql-server ~]# mysql -uroot -p'qf123' company < /home/back/company.bak

恢复表

 登陆到刚才恢复的库中将其中的一个表删除掉mysql> show databases;mysql> use companymysql> show tables;+-------------------+| Tables_in_company |+-------------------+| employee5 || new_t1 || new_t2 |+-------------------+mysql> drop table employee5;开始恢复:mysql> set sql_log_bin=0; #停止binlog日志Query OK, 0 rows affected (0.00 sec)mysql> use company;mysql> source /home/back/company.employee5.bak; -------加路径和备份的文件恢复方式二:# mysql -u root -p1 db1 < db1.t1.bak库名 备份的文件路径[root@mysql-server ~]# mysql -uroot -p'qf123' company </home/back/company.employee5.bak

5、备份及恢复表结构

备份 linux中执行

 mysqldump -uroot -p123 库 > 备份路径     mysqldump -uroot -p123 库 表1 表2 > 备份路径   # 备份一个库里的多张表mysqldump -uroot -p123 -B 库1 库2 > 备份路径  # 备份多个库mysqldump -uroot -p123 -A > 备份路径    # 备份所有数据

还原

 mysql -uroot -p 库 < 备份数据    # 恢复单个库需要手动创建库mysql -uroot -p  < 备份数据     # 如果还原多个库或者所有数据,无需手动创建库

seuce还原

在数据库中,执行 source 备份文件

备份恢复表结构

 1.备份表结构:语法:mysqldump -uroot -p123456 -d database table > dump.sql[root@mysql-server ~]# mysqldump -uroot -p'qf123' -d company employee5 >/home/back/emp.bak恢复表结构:登陆数据库创建一个库mysql> create database t1;语法:# mysql -u root -p1 -D db1 < db1.t1.bak[root@mysql-server ~]# mysql -uroot -p'qf123' -D t1 < /home/back/emp.bak

通过binlog日志恢复数据

  • 先开启binl 重启服务
  • 查看正在使用的binlog,找到binlog日志 /data/mysql/data /var/lib/mysql /usr/local/mysql
  • 找到想要恢复数据的偏移量
  • linux下,mysqlbinlog --start-position 844899 --stop-position 844994 137.000003 |mysql -uroot
  • 在数据库中查看数据是否恢复

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

相关文章:

MySQL--数据库备份

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、为什么要备份 备份&#xff1a;能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;例如将数据库文件保存在了其它地方。 冗余&#…...

influxDB的常用命令

目录 1.查看数据库命令 2.进入某数据库命令 3.创建表的命令 (host 和region 字段是必须的) 4.显示所有的表命令 5. 删除表 6.查询表数据 7.显示数据库用户 8.创建用户 9.创建管理员用户 10.修改密码(密码用单引号括住&#xff0c;不要用双引号) 11. 分配数据库访问权…...

使用 1panel面板 部署 springboot 和 vue

代码仓库&#xff1a;还没弄 目录 网站介绍安装步骤1. 准备云服务器2. 准备域名&#xff08;可跳过&#xff09;3. 安装1panel面板4. 服务器开放端口5. 进入1panel面板6. 安装并启动软件&#xff08;服务器和面板开放端口&#xff09;7. 打包并上传项目7.1 打包 Java项目&#…...

快速体验LLaMA-Factory 私有化部署和高效微调Llama3模型(曙光超算互联网平台异构加速卡DCU)

序言 本文以 LLaMA-Factory 为例&#xff0c;在超算互联网平台SCNet上使用异构加速卡AI 显存64GB PCIE&#xff0c;私有化部署Llama3模型&#xff0c;并对 Llama3-8B-Instruct 模型进行 LoRA 微调、推理和合并。 快速体验基础版本&#xff0c;请参考另一篇博客&#xff1a;快…...

Cocos Creator 3.8.x bundle设置最佳方案

A&#xff1a; 项目开始场景(Start Scene)加载显示最快的Bundle设置方案&#xff1a;不要使用resources文件夹&#xff0c;除了项目开始场景(Start Scene)所在文件夹&#xff0c;将所有文件分类设置成Bundle&#xff1b; B&#xff1a; A方案较为麻烦&#xff0c;项目文件夹多时…...

【论文笔记】4D Millimeter-Wave Radar in Autonomous Driving: A Survey

原文链接&#xff1a;https://arxiv.org/abs/2306.04242 I. 引言 传统毫米波雷达&#xff08;3D毫米波雷达&#xff09;测量俯仰角的能力有限&#xff0c;数据通常仅包括距离、水平角和多普勒速度信息。此外&#xff0c;3D雷达数据存在噪声且分辨率低&#xff08;尤其是水平角…...

搭建 Rancher 服务,配置k8s集群

1. 前提条件 前提条件&#xff1a; 安装docker&#xff0c;要求版本各节点版本一致。网上还有额外的要求&#xff1a;关闭swap、禁用selinux等等。 2. 搭建 Rancher 服务 直接通过docker命令实现即可&#xff0c;很方便。 docker run -d \--name rancher \--restart unles…...

数据恢复的定制之旅:打造SQL Server的专属恢复方案

数据恢复的定制之旅&#xff1a;打造SQL Server的专属恢复方案 在企业运营中&#xff0c;数据的安全性和可靠性是至关重要的。SQL Server作为企业级数据库解决方案&#xff0c;提供了多种数据恢复技术以应对不同的数据丢失场景。然而&#xff0c;面对特定的业务需求和复杂的数…...

Javascript常见算法详解

在JavaScript&#xff08;JS&#xff09;中&#xff0c;常见的算法涵盖了多个领域&#xff0c;从基础的数组操作到更复杂的排序、搜索和数据结构算法。下面是一些在JS中常见的算法示例&#xff1a; 1. 排序算法 Java排序算法-CSDN博客 冒泡排序&#xff08;Bubble Sort&#x…...

MySQL数据管理 - 查询语句

文章目录 查询数据1 查询指定列2 条件查询3 合并查询4 模糊查询5 聚合函数查询6 对值进行排序7 分组查询8 分页查询9 数据库关联查询1 内连接 INNER JOIN2 LEFT JOIN3 右连接 10 数据库子查询参考 查询数据 数据库最常用的操作就是查询&#xff0c;也是数据操作的基础&#xf…...

经典图论算法回顾之Bellman-Ford算法

Dijkstra最短路径算法存在的一个问题是不能处理负权图&#xff08;详见&#xff1a;经典图论算法回顾之Dijkstra算法。今天要回顾的Bellman-Ford算法&#xff08;wikipedia&#xff1a;Bellman–Ford algorithm&#xff09;可以求出有负权图的最短路径&#xff0c;并可以对最短…...

LinuxC++(10):调用可执行程序

认识system函数 可以直接用system在代码中实现调用shell命令 /bin/ls -l /tmp表示执行ls -l命令&#xff0c;打开/tmp地址 而前面的/bin/表示这是shell命令&#xff0c;不可少&#xff0c;可以认为&#xff0c;/bin/后面的就是等价于shell里面输入的命令。 然后&#xff0c;cou…...

C语言指针·高级用法超详解(指针运算、野指针、悬空指针、void类型指针、二级以及多级指针)

目录 1. 指针的运算 2. 野指针和悬空指针 2.1 野指针 2.2 悬空指针 3. void类型指针 4. 二级指针和多级指针 4.1 命名规则 4.2 作用 4.2.1 二级指针可以操作一级指针记录的地址 4.2.2 利用二级指针获取变量中记录的数据 1. 指针的运算 文章开始前可以先了…...

SQL注入:MySQL元数据库,外网实战手工SQL注入

MySQL元数据库 MySQL的元数据库是一组特殊的数据库&#xff0c;用于存储MySQL服务器的元数据信息&#xff0c;在sql注入中较为常用为以下两种元数据库&#xff1a; information_schema&#xff1a;这个数据库包含了MySQL服务器上所有其他数据库的元数据信息。例如数据库名、表…...

接口与抽象类有什么区别

接口&#xff1a;只能包含抽象方法&#xff0c;成员变量只能是public static final 类型 是对行为的抽象 先约定再接口再实现 抽象类&#xff1a;包含成员变量和一般方法和抽象方法&#xff0c;当继承时&#xff0c;子类必须实现抽象类中的抽象方法...

【时时三省】unity test 测试框架 使用 code blocks 移植(核心文件:unity.c, unity_fixture.c)

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 目录 1&#xff0c;移植介绍 2&#xff0c;使用 Code::Blocks 17.12 创建工程 3&#xff0c;搬移文件入工程目录 4&#xff0c;更改代码 5&#xff0c;向工程添加文件 6&#xff0c;运…...

安装Docker以及安装过程中的错误解决

一、纯享版教程&#xff0b;操作截图 环境&#xff1a;centOs 7 FinalShell &#xff01;&#xff01;&#xff01;此教程针对第一次安装docker的友友&#xff0c;如果已经安装过且报错的朋友&#xff0c;请移步报错合集。 1.卸载旧版本&#xff08;无论是否安装过都建议执…...

PXE实验

实验前准备 关闭VMware的dhcp 点击 编辑 点击 虚拟网络编辑器 选择 NAT模式 将dhcp取消勾选 准备两台虚拟机 一台试验机&#xff0c;&#xff08;网络环境正常并且有图形化的界面的rhel7&#xff09; 一台测试机 init 5 --------------> 开启图形化界面 如…...

Spring - 解析 统一数据格式返回以及统一异常处理

接上篇文章的统一数据格式返回… 文章目录 1. 统一异常处理1.1 使用 2. 统一数据返回和统一异处理是怎么实现的2.1 initHandleAdapters2.2 initHandleExceptionResolvers 1. 统一异常处理 1.1 使用 统一异常处理的两个关键的注解是ControllerAdvice ExceptionHandler Contro…...

用Manim实现——计算和绘制图形下方区域

用Manim实现——计算和绘制图形下方区域 get_area 函数 get_area是一个用于计算和绘制图形下方区域的函数&#xff0c;常用于图形动画库&#xff08;如 Manim&#xff09; get_area(graph, x_rangeNone, color(ManimColor(#58C4DD),ManimColor(#83C167)), opacity0.3, bounde…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

高效的后台管理系统——可进行二次开发

随着互联网技术的迅猛发展&#xff0c;企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心&#xff0c;成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统&#xff0c;它不仅支持跨平台应用&#xff0c;还能提供丰富…...

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析&#xff1a;关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一&#xff0c;自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具&#xff0c;系统分析这场战争的时间线、关键节点及其背后的深层原因&#xff0c;全面…...

若依项目部署--传统架构--未完待续

若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加&#xff0c;传统开发模式存在效率低&#xff0c;重复劳动多等问题。若依项目通过整合主流技术框架&…...