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

MySQL备份与恢复

  • MySQL备份与恢复
    • 一、备份
      • 1、数据备份的重要性
      • 2、数据备份分类
        • 2.1 物理备份
        • 2.2 逻辑备份
      • 3、数据库备份策略
      • 4、常用的备份方法和工具
      • 5、数据库上云迁移
    • 二、数据库完全备份
      • 1、简介
      • 2、物理冷备份与恢复
        • 2.1 物理冷备份
        • 2.2 备份恢复
        • 2.3 补充知识date
      • 3、mysqldump备份与恢复
        • 3.1 完全备份一个或多个完整的库(包括其中所有的表)
        • 3.2 完全备份 MySQL 服务器中所有的库
        • 3.3 完全备份指定库中的部分表
        • 3.4 查看备份文件
    • 三、MySQL 完全恢复
      • 1、恢复数据库
        • 1.1 通过source命令恢复
        • 1.2 通过mysql命令恢复
      • 2、恢复数据表
    • 四、MySQL增量备份与恢复
      • 1、简介
      • 2、MySQL增量备份
        • 2.1 开启二进制日志功能
        • 2.2 通过刷新二进制日志文件间接实现增量备份
        • 2.3 查看二进制日志文件的内容
      • 3、MySQL增量恢复
        • 3.1 一般恢复
        • 3.2 断点恢复
          • 3.2.1基于位置恢复
          • 3.2.2 基于时间点恢复
      • 4、备份与恢复实例(完全+增量)
          • 1)录入第一次数据,并进行完全备份
          • 2)录入第二次数据,进行增量备份
          • 3)录入第三次数据,进行增量备份
          • 4)模拟删除表,先进行完全恢复
          • 5)进行增量恢复(通过位置+时间)
    • 五、MySQL日志管理

MySQL备份与恢复

一、备份

1、数据备份的重要性

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

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

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

造成数据丢失的原因
程序错误
人为操作错误
运算错误
磁盘故障
灾难(如火灾、地震)和盗窃

2、数据备份分类

2.1 物理备份

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

物理备份的方法

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

对数据库的表或者对象进行备份。

3、数据库备份策略

完全备份:每次备份都备份完整的数据库

差异备份:只备份上一次完全备份后的更新数据

增量备份:每次备份只备份上一次完全备份或增量备份后的更新数据

4、常用的备份方法和工具

物理冷备

  • 备份时数据库处于关闭状态,直接打包数据库文件
  • 备份速度快,恢复时也是最简单的。

专用备份工具mysqldump或mysqlhotcopy

  • mysqldump常用的逻辑备份工具(逻辑热备)

    备份速度较慢(如果数据库超过100G,一般不建议使用mysqldump)

  • mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表

启用二进制日志进行增量备份

  • 进行增量备份,需要刷新二进制日志

第三方工具备份

  • 免费的MySQL热备份软件Percona;XtraBackup
  • XtraBackup(物理热备)

5、数据库上云迁移

冷迁移

热迁移

二、数据库完全备份

1、简介

  • 完全备份是对整个数据库、数据库结构和文件结构的备份
  • 保存的是备份完成时刻的数据库
  • 是差异备份与增量备份的基础
优点:备份与恢复操作简单方便
缺点:数据存在大量的重复
占用大量的备份空间
备份与恢复时间长

2、物理冷备份与恢复

  • 关闭MySQL数据库
  • 使用tar命令直接打包数据库文件夹
  • 直接替换现有MySQL目录即可
2.1 物理冷备份
7-3
#准备数据
create table kkk1 (id int,name varchar(10),age int,sex char(2),hobby varchar(50));
insert into kkk1 values (1,'www',22,'女','java');
insert into kkk1 values (2,'yyy',20,'男','cake');
insert into kkk1 values (3,'xxx',21,'女','shell');
insert into kkk1 values (4,'hhh',23,'男','web');
select * from kkk1;create table kkk2 like kkk1;
insert into kkk2 (select * from kkk1);
select * from kkk2;

在这里插入图片描述
在这里插入图片描述

7-3
systemctl stop mysqld
#先关闭数据库
mkdir /opt/backup
#建立备份文件存放目录
tar zcvf /opt/backup/mysql_full_$(date -d "-1 day" +%Y%m%d).tar.gz /usr/local/mysql/data/
#压缩备份
#对/usr/local/mysql/下的data目录进行备份,里面包含所有数据库的文件

在这里插入图片描述

2.2 备份恢复

主机1:192.168.210.103

主机2:192.168.210.106

scp /opt/backup/mysql_full_20230922.tar.gz 192.168.210.106:/opt
#将主机1的备份包远程传输到主机2

在这里插入图片描述

主机2:
systemctl stop mysqld
#先关闭数据库
mv /usr/local/mysql/data /usr/local/mysql/data.bak
#先备份数据,防止恢复失败

在这里插入图片描述

cd /opt/
tar xf mysql_full_20230922.tar.gz
#解压
cp -a /opt/usr/local/mysql/data /usr/local/mysql/
#把opt下的data目录移到/usr/local/mysql/目录下
systemctl start mysqld
mysql -u root -p 
#登录到数据库

在这里插入图片描述

2.3 补充知识date
date --help
#命令帮助
date +%F
#完整日期格式
date +%Y%m%d
#年月日
date +%Y/%m/%d
#年/月/日
date +%Y%m01
#当月第一天
date -d "+1 day" +%Y%m%d
#显示明天
date -d "-1 day" +%Y%m%d
date -d "1 day ago" +%Y%m%d
#显示前一天
date -d "$(date +%Y%m01) -3 day" +%Y%m%d
#当月第一天的前三天
date -d "$(date +%Y%m01) -1 day" +%Y%m%d
#上个月的最后一天
date -d "$(date -d "1 mouth" +%Y%m01) -1 day" +%Y%m%d
#当月的最后一天
date -d "-1 day" +%Y%m01
#这个月第一天
date -d "1 mouth" +%Y%m01
#下个月第一天

3、mysqldump备份与恢复

  • MySQL自带的备份工具,可方便实现对MySQL的备份
  • 可以将指定的库、表导出为SQL脚本
  • 使用命令mysql导入备份的数据
3.1 完全备份一个或多个完整的库(包括其中所有的表)
mysqldump -u root -p[密码] --databases 库名1 [库名2]> /备份路径/备份文件名.sql	
#导出的就是数据库脚本文件如果不加 --databases ,只备份库中的表,不会备份库
#举个例子#单个数据库
mysqldump -u root -p --databases www > /opt/backup/www.sql#多个数据库
mysqldump -u root -p --databases www www > /opt/backup/3w.sql

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.2 完全备份 MySQL 服务器中所有的库
mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql
#举个例子
mysqldump -u root -pabc123 --all-databases > /opt/backup/all.sqlcat /opt/all.sql | grep "^CERATE DATABASES"

在这里插入图片描述

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

在这里插入图片描述

3.4 查看备份文件
cat xx.sql|grep -v "^--"| grep -v "^/" | grep -v "^$"egrep -v "^--|^/\*|^$" 
#举个例子
cat www-kkk1.sql|grep -v "^--" | grep -v "^/" | grep -v "^$"

在这里插入图片描述

三、MySQL 完全恢复

1、恢复数据库

当备份文件中只包含表的备份,而不包括创建库的语句时,必须指定库名,且目标库必须存在

在生产环境中,可以使用Shell脚本自动实现定时备份

1.1 通过source命令恢复

先使用mysqldump工具,生成备份sql脚本;

然后登录到MySQL数据库;

再执行source 备份sql脚本的路径

MySQL[(none)]> source /backup/all-data.sql
举例
先备份目标数据库,以www数据库为例
mysqldump -u root -pabc123 --databases www > /opt/backup/www.sql

在这里插入图片描述

假设数据库www被删除
drop database www;
show databases;

在这里插入图片描述

source命令执行sql脚本
#先登录到数据库
mysql -u root -p
#执行脚本
source /opt/backup/www.sql 
#查看
show databases;

在这里插入图片描述

1.2 通过mysql命令恢复
输入重定向
mysql -u 用户名 -p[密码] < 库备份脚本的路径
举例
#先模拟数据库删除
mysql -u root -pabc123 -e 'drop database www;'
mysql -u root -pabc123 -e 'show databases;'

在这里插入图片描述

#恢复数据库
mysql -u root -pabc123 < /opt/backup/www.sql
mysql -u root -pabc123 -e 'show databases;'

在这里插入图片描述


管道符
mysql -u root -pabc123 -e 'drop database www;'
mysql -u root -pabc123 -e 'show databases;'cat www.sql | mysql -uroot -pabc123
mysql -u root -pabc123 -e 'show databases;'

在这里插入图片描述

2、恢复数据表

当备份文件中只包含表的备份,而不包含创建的库的语句时,执行导入操作时必须指定库名,且目标库必须存在。

#备份www的kkk1表
mysqldump -u root -pabc123 [-d] www kkk1 > /opt/backup/www-kkk1.sql
#模拟删除数据表
mysql -u root -pabc123 -e 'drop table www.kkk1;'
mysql -u root -pabc123 -e 'show tables from www;'

在这里插入图片描述

#恢复表数据
mysql -uroot -pabc123 www < /opt/backup/www-kkk1.sql
#查看表数据,验证是否成功恢复
mysql -uroot -pabc123 -e "select * from www.kkk1;"

在这里插入图片描述

四、MySQL增量备份与恢复

1、简介

使用mysqldump进行完全备份存在的问题

  • 备份数据中有重复数据
  • 备份时间与恢复时间过长

是自上一次备份后增加/变化的文件能或者内容

特点

  • 没有重复数据,备份量不大,时间短
  • 恢复需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复

MySQL没有提供直接的增量备份方法

可通过MySQL提供的二进制日志间接实现增量备份

MySQL二进制日志对备份的意义

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

2、MySQL增量备份

2.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

在这里插入图片描述

systemctl start mysqld
ls -l /usr/local/mysql/data/mysql-bin.*

在这里插入图片描述

2.2 通过刷新二进制日志文件间接实现增量备份
mysqladmin -uroot -p[密码] flush-logs

在这里插入图片描述

2.3 查看二进制日志文件的内容
mysqlbinlog --no-defaults --base64-output=decode-rows -v 二进制文件(绝对路径)
#--base64-output=decode-rows:使用64位编码机制去解码并按行读取
#-v:显示详细内容
#举个例子
cp /usr/local/mysql/data/mysql-bin.000001 /opt 
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000001 

在这里插入图片描述

3、MySQL增量恢复

MySQL没有提供直接的增量备份方法,可通过MySQL提供的二进制日志间接实现增量备份。

3.1 一般恢复
mysqlbinlog --no-defaults 二进制日志文件 | mysql -uXXX -pXXX
mkdir mysql-backup
mkdir /mysql-backup/full
mkdir /mysql-backup/bin 
#full文件夹做完全备份
#bin文件夹做增量备份

1)在www数据库中,有一个kkk1的数据表,对表中的初始数据进行完全备份

#对kkk1表做完全备份
mysqldump -uroot -pabc123 www kkk1 > /root/mysql-backup/full/www_kkk1-$(date +%Y%m%d).sql
#二进制日志文件刷新
mysqladmin -uroot -pabc123 flush-logs
#生成新的二进制日志文件
ls /usr/local/mysql/data/

在这里插入图片描述

2)录入新的数据,进行增量备份

insert into kkk1 values (5,'aaa',23,'男','football');
insert into kkk1 values (6,'bbb',24,'女','dancing');
insert into kkk1 values (7,'ccc',25,'女','singing');

在这里插入图片描述

#二进制日志文件刷新
mysqladmin -uroot -pabc123 flush-logs
#生成新的二进制日志文件
ls /usr/local/mysql/data/

在这里插入图片描述

#进行增量备份,备份的不是最新的那一个,备份的是倒数第二个
mv -f /usr/local/mysql/data/mysql-bin.000002 /root/mysql-backup/bin/mysql-bin.00000 -$(date -d '1 day' +%Y%m%d)ls /mysql-backup/bin 

在这里插入图片描述

3)模拟删除库,先进行表的完全恢复

show databases;
drop database www;
#因为只对表做了备份,没有对库做备份,所以要先建一个数据库
create database www;
show databases;
quit
#先完全恢复数据表里的初始数据
mysql -uroot -pabc123 www < /mysql-backup/full/www_kkk1-20230923.sql

在这里插入图片描述
在这里插入图片描述

4)进行增量恢复

#通过管道符导入的方式
mysqlbinlog --no-defaults /mysql-backup/bin/mysql-bin.000002-20230924 | mysql -uroot -pabc123

在这里插入图片描述
在这里插入图片描述

3.2 断点恢复
#查看二进制文件 
mysqlbinlog --no-defaults --base64-output=decode-rows -v /mysql-backup/bin/mysql-bin.000002-20230924
#重定向输出到文件里方便查看
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002-20230924 > mysql-bin-20230924

在这里插入图片描述

#删除id>=5的数据
delete from kkk1 where id>=5;
select * from kkk1;

在这里插入图片描述

3.2.1基于位置恢复
#仅恢复id=5和6的数据,即不恢复“id=7”的数据
mysqlbinlog --no-defaults --start-position='296' --stop-position='891' /mysql-backup/bin/mysql-bin.000002-20230924 | mysql -uroot -pabc123

在这里插入图片描述

#仅恢复“id=7”的数据
mysqlbinlog --no-defaults --start-position='891' /mysql-backup/bin/mysql-bin.000002-20230924 | mysql -uroot -pabc123

在这里插入图片描述

3.2.2 基于时间点恢复
#仅恢复id=5和6的数据
mysqlbinlog --no-defaults --start-datetime='2023-09-23 14:24:05' --stop-datetime='2023-09-23 14:24:32' /mysql-backup/bin/mysql-bin.000002-20230924 | mysql -uroot -pabc123

在这里插入图片描述
在这里插入图片描述

#仅恢复id=6和7的数据
mysqlbinlog --no-defaults --start-datetime='2023-09-23 14:24:27' /mysql-backup/bin/mysql-bin.000002-20230924 | mysql -uroot -pabc123

在这里插入图片描述
在这里插入图片描述

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

4、备份与恢复实例(完全+增量)

为了测试备份数据是否可用,模拟数据丢失故障,进行数据还原。
在数据库表中,分三次录入学生考试成绩。
首次录入成绩后,做该表的完全备份。
后两次成绩的录入之后,分别作增量备份。
模拟数据丢失,并使用增量备份分别基于位置和时间点恢复一班所有学生成绩与二班陈铭与付杰的成绩。

在这里插入图片描述

1)录入第一次数据,并进行完全备份

在这里插入图片描述

mysql -u root -pabc123
create database score;
use score;
create table student ("姓名" varchar(10),"班级" varchar(10),"学号" int,"语文" int,"数学" int,"英语" int,"理综" int);
insert into student values ('张三','一班',20170822,110,105,92,235);
insert into student values ('李四','一班',20170820,95,115,110,260);
insert into student values ('王五','一班',20170818,95,103,108,270);
insert into student values ('赵六','一班',20170816,100,109,112,265);
select * from student;

在这里插入图片描述

#通过mysqldump工具完全备份
mysqldump -u root -pabc123 score student > /mysql-backup/full/score-student.sql

在这里插入图片描述

2)录入第二次数据,进行增量备份
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED				
#可选,指定二进制日志(binlog)的记录格式为 MIXED
server-id = 1
#刷新日志文件
mysqladmin -uroot -pabc123 flush-logs

在这里插入图片描述

insert into student values ('李宁','二班',20170824,92,98,105,235);
insert into student values ('陈铭','二班',20170826,111,107,96,204);
select * from student;

在这里插入图片描述

#通过刷新日志文件,实现增量备份
mysqladmin -uroot -pabc123 flush-logs
#查看二进制日志文件,不是看最新的,看倒数第二个
mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000002

在这里插入图片描述
在这里插入图片描述

3)录入第三次数据,进行增量备份

在这里插入图片描述

#再次插入数据
insert into student values ('付杰','二班',20170828,115,118,116,268);
insert into student values ('郭尚','二班',20170830,111,99,80,259);

在这里插入图片描述

#通过刷新日志文件,实现增量备份
mysqladmin -uroot -pabc123 flush-logs
#查看二进制日志文件,不是看最新的,看倒数第二个
mysqlbinlog --no-defaults --base64-output=decode-rows -v
/usr/local/mysql/data/mysql-bin.000003

在这里插入图片描述
在这里插入图片描述

4)模拟删除表,先进行完全恢复
#删除表
drop table student from score;

在这里插入图片描述

#先完全恢复,一班所有学生的成绩
mysql -uroot -pabc123 score < /mysql-backup/full/score-student.sql

在这里插入图片描述

5)进行增量恢复(通过位置+时间)
#通过位置恢复二班陈铭的成绩
#先查看二进制日志文件 
mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000002

在这里插入图片描述

#根据位置恢复
mysqlbinlog --no-defaults --start-position='622' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -pabc123

在这里插入图片描述

#通过时间恢复二班付杰的成绩
#先查看二进制日志文件 
mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000003

在这里插入图片描述

#根据时间恢复
mysqlbinlog --no-defaults --start-datetime='23-09-24 14:36:13' --stop-datetime='23-09-24 14:36:18' /usr/local/mysql/data/mysql-bin.000003 | mysql -uroot -pabc123

在这里插入图片描述

五、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##慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认是关闭的
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5												
#设置超过5秒执行的语句被记录,缺省时为10秒
systemctl restart mysqldmysql -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;				
#在数据库中设置开启慢查询的方法
#!/bin/bash
#增量备份Mysql数据库
TODAY=$(date +%Y%m%d)
YESTERDAY=$(date -d "-1 day!+%Y%m%d)MYSQL 
HOME=/usr/local/mysglDATA HOME=SMYSQL HOME/data
USERNAME=root
PASSWORD=abc123#备份二进制日志索弓文件 mysgl-bin.index
/usr/bin/cp -f $DATA_HOME/mysgl-bin.index /opt/backup/mysgl-bin-$TODAY.index
#判断是否存在前一天的日志索引文件,如果存在则通过反向查询获取今天生成的二进制日志文件
if [ -f /opt/backup/mysgl-bin-$YESTERDAY.index ] 
then
COUNT=$(cat /opt/backup/mysgl-bin-$TODAY.index|grep -v "`cat /opt/backup/mysgl-bin-$YESTERDAY.index`"|awk -F '/' '{print $2}')
else
COUNT=$(cat /opt/backup/mysgl-bin-$TODAY.index | awk -F '/' '{print $2}')
fi
#刷新二进制日志文件
$MYSQL_HOME/bin/mysqladmin -u"$USERNAME"-p"$PASSWORD" flush-logs &> /dev/null
#使用循环备份当天的二进制日志
for BINLOG in $COUNT
/usr/bin/mv -f "$DATA_HOME/$BINLOG" "/opt/backup/$BINLOG-$TODAY"
done

相关文章:

MySQL备份与恢复

MySQL备份与恢复一、备份1、数据备份的重要性2、数据备份分类2.1 物理备份2.2 逻辑备份 3、数据库备份策略4、常用的备份方法和工具5、数据库上云迁移 二、数据库完全备份1、简介2、物理冷备份与恢复2.1 物理冷备份2.2 备份恢复2.3 补充知识date 3、mysqldump备份与恢复3.1 完全…...

【RTOS学习】单片机中的C语言

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 本喵默认各位小伙伴都会C语言&#xff0c;我们平时学习C语言都是在Windows环境下学习的&#xff0…...

确知波束形成matlab仿真

阵列信号处理中的导向矢量 假设一均匀线性阵列&#xff0c;有N个阵元组成&#xff0c;满足&#xff1a;远场、窄带假设。 图1. 均匀线性阵模型 假设信源发射信号&#xff0c;来波方向为 θ \theta θ&#xff0c;第一个阵元接收到的信号为 x ( t ) x(t) x(t)&#xff0c;则第…...

并发编程相关面试题

线程基础 线程和进程的区别&#xff1a; ----------------------------------------------------------------------- 创建线程的方式&#xff1a; 1 继承Thread类 2 实现runnable接口 3 实现callable 接口&#xff08;有返回值的&#xff09; 4 线程池创建线程 ------…...

Cpp/Qt-day050921Qt

目录 实现使用数据库的登录注册功能 头文件&#xff1a; registrwidget.h: widget.h: 源文件&#xff1a; registrwidget.c: widget.h: 效果图&#xff1a; 思维导图 实现使用数据库的登录注册功能 头文件&#xff1a; registrwidget.h: #ifndef REGISTRWIDGET_H #de…...

视频汇聚/视频云存储/视频监控管理平台EasyCVR分发rtsp流起播慢优化步骤详解

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

ElementUI之登陆+注册->饿了吗完成用户登录界面搭建,axios之get请求,axios之post请求,跨域,注册界面

饿了吗完成用户注册登录界面搭建axios之get请求axios之post请求跨域 1.饿了吗完成用户注册登录界面搭建 将端口号8080改为8081 导入依赖&#xff0c;在项目根目录使用命令npm install element-ui -S&#xff0c;添加Element-UI模块 -g&#xff1a;将依赖下载node_glodal全局依…...

2023华为杯研究生数学建模研赛E题出血脑卒中完整论文(含28个详细预处理数据及结果表格)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了全国研究生数学建模竞赛&#xff08;数模研赛&#xff09;E题完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。…...

Java中的继承是什么?

在Java中&#xff0c;继承是一种面向对象编程的概念&#xff0c;它允许一个类&#xff08;称为子类或派生类&#xff09;继承另一个类&#xff08;称为父类或基类&#xff09;的属性和方法。通过继承&#xff0c;子类可以获得父类的属性和方法&#xff0c;并且可以添加自己的特…...

Python - flask后端开发笔记

​ Flask入门 有一篇很全面的博客可以参考&#xff1a;Python Flask Web 框架入门 跨域问题处理 from flask_cors import CORS CORS(app,supports_credentialsTrue,origins[url], # 前端url列表 ) 文件发送 from flask import send_from_directory app.route(/download) …...

Flutter实现PS钢笔工具,实现高精度抠图的效果。

演示&#xff1a; 代码&#xff1a; import dart:ui;import package:flutter/material.dart hide Image; import package:flutter/services.dart; import package:flutter_screenutil/flutter_screenutil.dart; import package:kq_flutter_widgets/widgets/animate/stack.dart…...

苏宁滑块验证

网址&#xff1a;https://passport.suning.com/ids/login总结一下&#xff0c;别被他的表面现象给骗了&#xff0c;这玩意儿&#xff0c;个人认为&#xff0c;腾讯的都没法跟他比&#xff01;&#xff01;&#xff01; 难点&#xff1a;动态混淆&#xff0c;vmp&#xff0c;图片…...

c语言。。。

gcc thread.c -lpthread -o app -fexec-charsetgbkthread.c为当前目录下编写的c代码 代码中引入了<pthread.h>线程库&#xff0c;所以要加上-lpthread -o app 输出.exe的c可执行文件&#xff0c;文件名为app -fexec-charsetgbk 设置编码方式&#xff0c;防止控制台输出中…...

vue-cli创建项目、vue项目目录结(运行vue项目)、ES6导入导出语法、vue项目编写规范

vue-cli创建项目、vue项目目录结构、 ES6导入导出语法、vue项目编写规范 1 vue-cli创建项目 1.1 vue-cli 命令行创建项目 1.2 使用vue-cli-ui创建 2 vue项目目录结构 2.1 运行vue项目 2.2 vue项目的目录结构 3 es6导入导出语法 4 vue项目编写规范 4.1 修改项目 4.2 以后…...

QT读取DLL加载算法

有这样一个场景&#xff0c;我有一个GUI软件&#xff0c;把他想象成PS软件&#xff0c;集成了很多工具。现在我要添加新算法(PS工具)&#xff0c;该怎么办&#xff1f; 有三种办法&#xff1a; 第一种我把新算法代码加到项目中&#xff0c;编译整个项目。 第二种&#xff0c;新…...

HTTPX-用于Python的下一代HTTP客户端

1、前言 在使用 Python 进行接口自动化时&#xff0c;大多数都会使用 requests 模块&#xff0c;requests 是一个常用的 HTTP 请求库&#xff0c;可以方便地向网站发送 HTTP 请求&#xff0c;并获取响应结果。 本篇将介绍 Python 的下一代 HTTP 客户端 - HTTPX 2、简介 HTT…...

[LLM+AIGC] 01.应用篇之中文ChatGPT初探及利用ChatGPT润色论文对比浅析(文心一言 | 讯飞星火)

近年来&#xff0c;人工智能技术火热发展&#xff0c;尤其是OpenAI在2022年11月30日发布ChatGPT聊天机器人程序&#xff0c;其使用了Transformer神经网络架构&#xff08;GPT-3.5&#xff09;&#xff0c;能够基于在预训练阶段所见的模式、统计规律和知识来生成回答&#xff0c…...

OCR -- 文本检测

目标检测&#xff1a; 不仅要解决定位问题&#xff0c;还要解决目标分类问题&#xff0c;给定图像或者视频&#xff0c;找出目标的位置&#xff08;box&#xff09;&#xff0c;并给出目标的类别&#xff1b; 文本检测&#xff1a; 给定输入图像或者视频&#xff0c;找出文本的…...

【系统架构】软件可靠性基础知识

导读&#xff1a;本文整理关于软件可靠性基础知识构建系统架构知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑&#xff0c;基于大量项目实践经验基础上&#xff0c;不断加深理论体系的理解&#xff0c;从而能够创造新解决系统相关问题。 目录 1、软件可靠性…...

相机Camera

Camera需与SurfaceView配合使用 Camera类常用方法&#xff1a; Camera.open() 创建Camera实例&#xff0c;打开相机 getParameters() 获取相机参数 release() 释放相机资源 setParameters(Camera.Parameters parameters) 设置相机参数 setPreviewDisplay(SurfaceHolder holde…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...