MySQL数据备份与恢复

备份的主要目的:
备份的主要目的是:灾难恢复,备份还可以测试应用、回滚数据修改、查询历史数据、审计等。
日志:
MySQL 的日志默认保存位置为:

 /usr/local/mysql/data

##配置文件

vim /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

##复制段

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
systemctl restart mysqld
mysql -u root -p
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 表示模糊查询#xxx(字段)
xxx% 以xxx为开头的字段
%xxx 以xxx为结尾的字段
%xxx% 只要出现xxx字段的都会显示出来
xxx   精准查询#二进制日志开启后,重启mysql 会在目录中查看到二进制日志
cd /usr/local/mysql/data
ls
mysql-bin.000001		#开启二进制日志时会产生一个索引文件及一个索引列表索引文件:记录更新语句
索引文件刷新方式:
1、重启mysql的时候会更新索引文件,用于记录新的更新语句
2、刷新二进制日志mysql-bin.index:
二进制日志文件的索引

二、数据备份的重要性:
在企业中,数据的价值至关重要,数据保障了企业业务的正常运行。因此,数据的安全性及数据的可靠性是运维的重中之重,任何数据的丢失都可能对企业产生严重的后果。
1、备份的主要目的是灾难恢复
2、在生产环境中,数据的安全性至关重要
3、任何数据的丢失都可能产生严重的后果
4、造成数据丢失的原因

通常情况下,造成数据丢失的原因通常有以下几种:

①程序错误
②人为操作错误
③运算错误
④磁盘故障
⑤灾难(火灾、地震)and 盗窃(黑客攻击)

三、备份类型
数据备份的分类:
从物理与逻辑的角度分类可以分为:逻辑备份、物理备份。
1.物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
物理备份方法:
①.冷备份(脱机备份):是在关闭数据库的时候进行的。
②热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件。
③温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。

2.逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份。表示为逻辑数据库结构
这种类型的备份适用于可以编辑数据值或表结构 。

从数据库的备份策略角度,备份分类可以分为:完全备份、差异备份、增量备份。

完全备份: 每次对数据进行完整的备份,即对整个数据库、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。完全备份的备份与恢复操作都非常简单方便,但是数据存在大量的重复,并且会占用大量的磁盘空间,备份的时间也很长。
在这里插入图片描述
差异备份: 备份那些自从上次完全备份之后被修改过的所有文件,备份的时间节点是从上次完整备份起,备份数据量会越来越大。恢复数据时,只需恢复上次的完全备份与最近的一次差异备份。
在这里插入图片描述
增量备份: 只有在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次增量备份的时间为时间点,仅备份这之间的数据变化,因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份开始到最后一次增量备份之的所有增量依次恢复,如中间某次的备份数据损坏,将导致数据的丢失。
在这里插入图片描述
备份方式比较:

备份方式 完全备份 差异备份 增量备份
完全备份时的状态 表1、表2 表1、表2 表1、表2
第1次添加内容 创建表3 创建表3 创建表3
备份内容 表1、表2、表3 表3 表3
第2次添加内容 创建表4 创建表4 创建表4
备份内容 表1、表2、表3、表4 表3、表4 表4

逻辑备份的策略(增、全、差异)
如何选择逻辑备份策略(频率)
合理值区间⭐⭐⭐
一周一次的全备,全备的时间需要在不提供业务的时间区间进行 PM 10点 AM 5:00之间进行全备
增量:3天/2天/1天一次增量备份
差异:选择特定的场景进行备份
一个处理(NFS)提供额外空间给与mysql 服务器用

常见的备份方法:
1、物理冷备
物理冷备份时需要在数据库处于关闭状态下,能够较好地保证数据库的完整性。
物理冷备份一般用于非核心业务,这类业务一般都允许中断。
物理冷备份的特点就是速度快,恢复时也是最为简单的。
通常通过直接打包(tar-cf)数据库文件夹(/usr/local/mysql/data)来实现备份。

2、专用备份工具mydump或者mysqlhotcopy:
①mysqldump程序和mysqlhotcopy都可以做备份。
②mysqldump是客户端常用逻辑备份程序,能够产生一组被执行以后再现原始数据库对象定义和表数据的SQL语句。它可以转储一个到多个MySQL数据库,对其进行备份或传输到远程SQL服务器。mysqldump更为通用,因为它可以备份各种表。
③mysqlhotcopy仅适用于某些存储引擎(MyISAM和ARCHIVE)。
3、启用二进制日志进行增量备份:
①进行增量备份,需要刷新二进制日志
②mysql支持增量备份,进行增量备份时必须启用二进制日志。
二进制日志文件为用户提供复制,对执行备份点后进行的数据库更改所需的信息进行恢复。
如果进行增量备份(包含自上次完全备份或增量备份以来发生的数据修改) ,需要刷新二进制日志

4、通过第三方工具备份:
使用免费的第三方Percona xtraBackup热备份软件,支持在线热备份Innodb和xtraDB,也可以支持MySQL表备份,不过MyISAM表的备份要在表锁的情况下进行。

四、MySQL完全备份
是对整个数据库、数据库结构和文件结构的备份
保存的是备份完成时刻的数据库
是差异备份与增量备份的基础
1、优点:
备份与恢复操作简单方便。

2、缺点:
数据存在大量的重复、占用大量的备份空间,备份与恢复时间长。

数据库完全备份分类:
1、物理冷备份与恢复
关闭MySQL数据库
使用tar命令直接打包数据库文件夹
直接替换现有MySQL目录即可

2、mysqldump备份与恢复
MySQL自带的备份工具,可方便实现对MySQL的备份
可以将指定的库、表导出为SQL 脚本
使用命令mysq|导入备份的数据

五、实验部分

环境准备:

use MY;
create table if not exists info (
id int(4) not null auto_increment,
name varchar(10) not null,
age char(10) not null,
hobby varchar(50),
primary key (id));
#创建一个名为"info"的MySQL表格。表格包含四个列,分别是"id""name""age""hobby"。其中,"id"是一个4位整数,不为空且自动递增;"name"是一个最大长度为10的字符串,不为空;"age"是一个最大长度为10的字符型,不为空;"hobby"是一个最大长度为50的字符串,可以为空。此外,"id"列被指定为主键。insert into info values(1,'user1',20,'running');
insert into info values(2,'user2',30,'singing');
插入两行数据

MySQL完全备份与恢复:

InnoDB 存储引擎的数据库在磁盘上存储成三个文件: db.opt(表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件)。

/usr/local/mysql/data/

在这里插入图片描述
1.物理冷备份与恢复

systemctl stop mysqld #命令来停止 mysqld 进程
yum -y install xz #安装 xz 压缩工具,xz 是一种高效的压缩工具,可以将文件压缩到很小的体积。

压缩备份:

tar -jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/ 
#将 /usr/local/mysql/data/ 目录下的 MySQL 数据库文件打包并压缩为一个 .tar.xz 文件,然后将其保存到 /opt/ 目录下。其中 $(date +%F) 表示将当前日期格式化为 YYYY-MM-DD 的形式,用于在备份文件名中添加日期
mv /usr/local/mysql/data/ /opt/ 
#将/usr/local/mysql/data/ 目录下的 MySQL 数据库文件移动到 /opt/ 目录下
解压恢复:
tar -jxvf /opt/mysql_all_2023-08-29.tar.xz -C /usr/local/mysql/data/
#解压缩备份文件 /opt/mysql_all_2023-08-29.tar.xz 并将其恢复到 /usr/local/mysql/data/ 目录下
cd /usr/local/mysql/data
mv /usr/local/mysql/data/* ./
#将 /usr/local/mysql/data/ 目录下的所有文件和子目录移动到当前工作目录下。
  1. mysqldump 备份与恢复(温备份)
    数据库还是之前创建的MY库
create table info1 (id int,name char(10),age int,sex char(4));
insert into info1 values(1,'user',11,'性别');
insert into info1 values(2,'user',11,'性别');

1、完全备份一个或多个完整的库 (包括其中所有的表)

mysqldump -u root -p[密码] --databases 库名1 [库名2] ... > /备份路径/备份文件名.sql    #导出的就是数据库脚本文件
例:
mysqldump -u root -p --databases MY > /opt/kgc.sql       #备份一个MY库
mysqldump -u root -p --databases mysql MY > /opt/mysql-MY.sql    #备份mysql与 kgc两个库 

2、完全备份 MySQL 服务器中所有的库

mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql
例:
mysqldump -u root -p --all-databases > /opt/all.sql

3、完全备份指定库中的部分表

mysqldump -u root -p[密码] 库名 [表名1] [表名2] ... > /备份路径/备份文件名.sql
例:
mysqldump -u root -p [-d] kgc info info1 > /opt/MY_info1.sql
#使用“-d”选项,说明只保存数据库的表结构 
#不使用“-d"选项,说明表数据也进行备份
#做为一个表结构模板

(4)查看备份文件

grep -v "^--" /opt/MY_info1.sql | grep -v "^/" | grep -v "^$"

Mysql 完全恢复:

恢复数据库:

1.使用mysqldump导出的文件,可使用导入的方法

source命令
mysql命令
1.mysql> use mydatabase;
2.mysql> source /backup/all-data.sql;

2.使用source恢复数据库的步骤

登录到MySQL数据库:mysql -u 用户名 -p 密码
执行source备份sql脚本的路径
mysql> source /backup/all-data.sql;

3.source恢复的示例

MySQL [(none)]> source /backup/all-data.sql
#MySQL [(none)]> 是 MySQL 命令行客户端的提示符,表示当前没有选择任何数据库。
#/backup/all-data.sql 是 SQL 脚本文件的路径。执行这个命令后,MySQL 将会读取并执行 /backup/all-data.sql 文件中的 SQL 语句,从而将其中的数据导入到 MySQL 数据库中

使用source命令恢复数据
1.模拟数据库出现问题:

 mysql -uroot -pabc123 登录数据库
mysql> show databases;  查看数据库信息
mysql> drop database school;  删除数据库school
mysql> show databases; 

2 应用示例:
创建备份(对表进行备份)

mysqldump -uroot -123 MY info > /opt/info.sql  
将MY数据库中的info表进行删除数据库:mysql -uroot -p123 登录数据库show tables;drop table MY.info;或者直接执行下面的语句直接删除:
mysql -uroot -p123 -e 'drop table MY.info;'  #删除数据库的表

恢复数据表:

mysql -uroot -p123select * from info;  查询所有字段
show tables; 查看表信息
或免交互l> source /opt/info.sql  
mysql -uroot -p123123 -e 'show tables from school;'

方式二:

 mysql -uroot -p123 MY < /opt/MY.info.sql   #恢复info表mysql -uroot -p123 -e 'show tables from MY;'  #查看info表
PS:mysqldump 严格来说属于温备份,会需要对表进行写入的锁定
在全量备份与恢复实验中,假设现有MY库,MY库中有一个info1表,需要注意的一点为:
① 当备份时加 --databases ,表示针对于MY库

#备份命令:

mysqldump -uroot -p123 --databases MY > /opt/MY_01.sql 备份库后
#恢复过程为:
mysql -uroot -p123
drop database ;
exit
mysql -uroot -p123 < /opt/MY_01.sql

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

#备份命令
mysqldump -uroot -p123  > /opt/MY_all.sql
#恢复过程:
mysql -uroot -p123
drop database MY;
create database MY;
exit
mysql -uroot -p123 MY < /opt/MY_02.sql 查看MY_01.sql 和MY_02.sql 主要原因在于两种方式的备份(前者会从"create databases"开始,而后者则全是针对表格进行操作) 4.在生产环境中,可以使用Shell脚本自动实现定时备份(时间频率需要确认)
0 1 * * 6 /usr/local/mysql/bin/mysqldump -uroot -p123 MY info1 > ./MY_info1_$(date +%Y%m%d).sql ;/usr/local/mysql/bin/mysqladmin -u root -p flush-logs
# 0 1 * * 6 表示在每周的第六天(即星期六)的凌晨 1 点执行备份任务。
/usr/local/mysql/bin/mysqldump -uroot -p123 MY info1 > ./MY_info1_$(date +%Y%m%d).sql 表示执行备份操作,使用 mysqldump 工具备份 MySQL 数据库中的 MY 数据库中的 info1 表,并将备份结果输出到当前目录下以日期命名的备份文件中,例如 ./MY_info1_20220101.sql。
;/usr/local/mysql/bin/mysqladmin -u root -p flush-logs 表示执行刷新 MySQL 日志文件的操作,使用 mysqladmin 工具刷新 MySQL 的日志文件

MySQL 增量备份与恢复:

MySQL数据库增量恢复
1.一般恢复

将所有备份的二进制日志内容全部恢复

2.基于位置恢复

数据库在某一时间点可能既有错误的操作也有正确的操作
可以基于精准的位置跳过错误的操作
发生错误节点之前的一个节点,上一次正确操作的位置点停止

3.基于时间点恢复

跳过某个发生错误的时间点实现数据恢复
在错误时间点停止,在下一个正确时间点开始

----------MySQL 增量备份------------

一、增备实验
1.开启二进制日志功能

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED      #可选,指定二进制日志(binlog)的记录格式为MIXED(混合输入)
server-id = 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方式存储。

systemctl restart mysqld 

查看二进制日志文件的内容

cp /usr/local/mysql/data/mysql-bin.000002 /opt/① mysqlbinlog --no-defaults  /opt/mysql-bin.000002mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002#--base64-output=decode-rows:使用64位编码机制去解码(decode)并按行读取(rows)
#-v: 显示详细内容
#--no-defaults : 默认字符集(不加会报UTF-8的错误)
PS: 可以将解码后的文件导出为txt格式,方便查阅
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002 > /opt/mysql-bin.000002

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

1、at :开始的位置点
2、end_log_pos:结束的位置
3、时间戳: 23082910:30:30
4、SQL语句

2.进行完全备份(增量备份时基于完全备份的,所以我们直接完全备份数据库)

 mysqldump -uroot -p MY info > /opt/MY_info1_$(date +%F).sql#使用了 mysqldump 工具,用于备份 MySQL 数据库中的 MY 数据库中的 info 表。其中 -uroot 表示使用 root 用户登录,-p 表示需要输入密码,MY 表示要备份的数据库名,info 表示要备份的数据表名。> 表示将备份结果输出到指定的文件中,/opt/MY_info1_$(date +%F).sql 表示备份文件的路径和文件名,其中 $(date +%F) 表示当前日期,mysqldump -uroot -p MY > /opt/MY_all_$(date +%F).sql#用 mysqldump 工具备份 MySQL 数据库中的 MY 数据库中的所有数据表。其中 -uroot 表示使用 root 用户登录,-p 表示需要输入密码,MY 表示要备份的数据库名。> 表示将备份结果输出到指定的文件中,/opt/MY_all_$(date +%F).sql 表示备份文件的路径和文件名,其中 $(date +%F)

3.可每天进行增量备份操作,生成新的二进制日志文件(例如:mysql-bin.000002)

mysqladmin -u root -p flush-logs

4.插入新数据,以模拟数据的增加或变更
PS:在第一次完全备份之后刷新二进制文件,在第二个二进制文件中记载着"增量备份的数据"

mysql> create database MY;
Query OK, 1 row affected (0.00 sec)mysql> use MY;
Database changed
mysql> create table info1 (id int(4),name varchar(4));
Query OK, 0 rows affected (0.00 sec)mysql> insert into info1 values(1,'one');
Query OK, 1 row affected (0.00 sec)mysql> insert into info1 values(2,'two');
Query OK, 1 row affected (0.00 sec)mysql> select * from info;
+------+------+
| id   | name |
+------+------+
|    1 | one  |
|    2 | two  |
+------+------+
2 rows in set (0.00 sec)

5.再次生成新的二进制日志文件(例如:mysql-bin.000003)

mysqladmin -u root -p flush-logs

#之前的步骤4的数据库操作会保存到mysql-bin.000002文件中,之后我们测试删除MY库的操作会保存在mysql-bin.000003文件中 (以免当我们基于mysql-bin.000002日志进行恢复时,依然会删除库)

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

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

相关文章

行业趋势和新兴领域分析:分析当前网络安全行业的发展趋势,如IoT安全、AI安全、区块链安全等。

第一章&#xff1a;引言 随着数字化时代的迅速发展&#xff0c;网络安全已经成为各行各业不可忽视的重要领域。恶意攻击、数据泄露以及黑客入侵等威胁逐渐增多&#xff0c;推动着网络安全行业不断创新与进步。本文将深入探讨当前网络安全领域的发展趋势&#xff0c;聚焦于新兴…

智慧校园用电安全解决方案

随着科技的不断发展&#xff0c;智慧校园建设逐渐成为了教育行业的一大趋势。在这个过程中&#xff0c;电力系统作为校园基础设施的重要组成部分&#xff0c;其安全、稳定、高效的运行显得尤为重要。下面小编来为大家介绍下智慧校园用电安全解决方案吧! 一、智慧校园电力系统现…

Ubuntu下的QT开发

ubuntu安装QT的组件如下&#xff1a; 若要在ubuntu下启动QT有两种方案&#xff0c;一种是在菜单栏搜索qt双QT Create&#xff1b;另一种则是使用命令&#xff1a;/opt/Qt5.12.9/Tools/QtCreator/bin/qtcreator.sh

用Java实现Huffman编码

文章目录 前言一、实现思路二、准备Huffman结点三、主要实现 前言 在使用http1.1协议传输数据的时候&#xff0c;会有一些固定的字段&#xff0c;比如cookie、编码方式、接收的数据类型&#xff0c;另外会有一些大量重复的字段造成请求报文过于冗长&#xff0c;为了解决这个问…

2023年智慧政务一网通办云平台顶层设计与建设方案PPT

导读&#xff1a;原文《2023年智慧政务一网通办云平台顶层设计与建设方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 部分内容&#xff1a; 喜欢文章&#…

CSS3D+动画

CSS3D 1.css3D 给父元素设置 perspective:景深:近大远小的效果900-1200px这个范围内 transform-style:是否设置3D环境 flat 2D环境 默认值 perserve-3D环境 3D功能函数 1.位移: translateZ()translate3D(x,y,z) <!DOCTYPE html> <html lang"en"><h…

6路液体水位检测芯片VK36W6D SOP16 抗电源干扰及手机干扰特性好

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK36W6D 封装形式&#xff1a;SOP16/QFN16L 详细资料&#xff1a;13.5/5.474/4.703 概述 VK36W6D具有6个触摸检测通道&#xff0c;可用来检测6个点的水位。该芯片具有较高的集成度&#xff0c;仅需极少的外部组件便…

Java面向对象

1. 对象简介 万物皆对象&#xff0c;而类可以理解为是对某一类事物的描述或者说对象的模板。 实例化出来的对象的实际数据存储在堆内存中&#xff0c;变量只是在栈内存中存储了对象实际数据在堆内存中的地址&#xff0c;所以当多个对象变量指向同一个对象实际数据时&#xff…

打开谷歌浏览器远程调试功能

谷歌浏览器远程调试功能 首先我们来启动Chrome的远程调试端口。你需要找到Chrome的安装位置&#xff0c;在Chrome的地址栏输入chrome://version就能找到Chrome的安装路径 开启远程控制命令 文件路径/chrome.exe --remote-debugging-port9222开启后的样子(注意要关闭其他谷歌浏…

python学习2之sublime text编辑器安装配置使用

1、在windows系统中使用sublime text 下载地址 https://www.sublimetext.com/3 2、在sublime text中运行python程序 代码运行可选择菜单Tools->Build或者按CtrlB 3、定制sublime text的设置 3.1将制表符转换为空格 选择菜单view->indentation,核实选择了复选框indent u…

QT6为工程添加资源文件,并在ui界面引用

以添加图片资源为例 右键工程名字&#xff08;不是最上面的名字&#xff09;&#xff0c;点击添加现有文件 这种方式虽然添加到了工程中&#xff0c;但不能在UI设计界面完成引用。主要原因可能是未把文件放入到项目资源文件中&#xff0c;以下面一种方式可以看出区别。 点击添…

深入了解Nginx:高性能的开源Web服务器与反向代理

一、Nginx是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;也可以作为负载均衡器和HTTP缓存服务器使用。它采用事件驱动、异步非阻塞的处理方式&#xff0c;能够处理大量并发连接和高流量负载&#xff…

如何使用CSS实现一个带有动画效果的进度条?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTML 结构&#xff1a;⭐ CSS 样式&#xff1a;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那…

Tomcat安装及基本使用

1. 什么是Web服务器 Web服务器是一种应用程序&#xff08;软件&#xff09;&#xff0c;它封装了对HTTP协议的操作&#xff0c;使得开发人员无需直接操作协议&#xff0c;从而简化了Web开发。其主要功能是提供网上信息浏览服务。 Web服务器安装在服务器端&#xff0c;我们可以…

电商系统架构设计系列(十):怎么能避免写出慢SQL?

上篇文章中&#xff0c;我给你留了一个思考题&#xff1a;怎么能避免写出慢SQL&#xff1f; 我们知道&#xff0c;一个慢 SQL 就可以直接让 MySQL 瘫痪。以我个人经验总结来看&#xff0c;一般情况下系统出问题&#xff0c;大多数都是因为SQL语句的问题。掌握和用好了SQL&…

全国首台!浙江机器人产业集团发布垂起固定翼无人机-机器人自动换电机巢

展示突破性创新技术&#xff0c;共话行业发展趋势。8月25日&#xff0c;全国首台垂起固定翼无人机-机器人自动换电机巢新品发布会暨“科创中国宁波”无人机产业趋势分享会在余姚市机器人小镇成功举行。 本次活动在宁波市科学技术协会、余姚市科学技术协会指导下&#xff0c;由浙…

RV64和ARM64栈结构差异

RV64和ARM64栈结构差异 1 RV64和ARM64栈结构差异示意图1.1 RV64和ARM64寄存器介绍1.1.1 RV64寄存器1.1.2 ARM64寄存器 1.2 RV64和ARM64栈结构差异示意图 2 RV64和ARM64栈使用示例2.1 测试的程序2.2 RV64反汇编的汇编程序2.3 ARM64反汇编的汇编程序2.4 RV64和ARM64测试程序的栈结…

数据结构day06(单向循环链表、双向链表)

双向链表的练习代码 head.h #ifndef __HEAD_H__ #define __HEAD_H__ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef int database; typedef struct double_link_list{union{database data;int len;};struct double_link_list* pre;…

机器学习笔记之核函数再回首:Nadarya-Watson核回归python手写示例

机器学习笔记之核函数再回首——Nadaraya-Watson核回归手写示例 引言回顾&#xff1a; Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归通过核函数描述样本之间的关联关系使用 Softmax \text{Softmax} Softmax函数对权重进行划分将权重与相应标签执行加权运算 N…

python matlab 画柱状图

函数&#xff1a; bar(x, height, width0.8, bottomNone, *, aligncenter,dataNone, **kwargs) 设置坐标的刻度(ticks)&#xff0c;轴的标签和标题 在数据分析的很多时候&#xff0c;我们各个柱下面通常不是x刻度值&#xff0c;而是有实际意义的字符串&#xff0c;那么这个时…