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

MySQL详解六:备份与恢复

文章目录

  • 1. 数据库备份的分类
    • 1.1 从物理和逻辑上分类
      • 1.1.1 物理备份
      • 1.1.2 逻辑备份
    • 1.2 从数据库的备份策略角度上分类
      • 1.2.1 完全备份
      • 1.2.2 差异备份
      • 1.2.3 增量备份
    • 1.3 常见的备份方法
  • 2. MySQL完全备份
    • 2.1 完全备份简介
    • 2.2 优点与缺点
    • 2.3 实现物理冷备份与恢复
      • 2.3.1 实现流程
      • 2.3.2 前置准备
      • 2.3.3 实现物理冷备份
    • 2.4 使用mysqldump备份数据库
    • 2.5 使用source命令恢复数据库
    • 2.6 使用mysql命令恢复数据库
  • 3. MySQL增量备份与恢复
    • 3.1 使用完全备份所带来的问题
    • 3.2 增量备份简介
    • 3.3 特点
    • 3.4 增量备份与日志的关系
      • 3.4.1 二进制日志对备份的意义
    • 3.5 增量恢复方法类别
      • 3.5.1 一般恢复
      • 3.5.2 基于位置恢复
      • 3.5.3 基于时间点恢复
    • 3.6 增量备份
      • 3.6.1 开启二进制日志功能
      • 3.6.2 实现增量备份
      • 2.6.3 一般恢复
      • 3.6.4 端点恢复
        • 3.6.4.1 基于位置恢复
        • 3.6.4.2 基于时间点恢复

1. 数据库备份的分类

1.1 从物理和逻辑上分类

1.1.1 物理备份

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

1.1.2 逻辑备份

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

1.2 从数据库的备份策略角度上分类

1.2.1 完全备份

每次对数据库进行完整的备份
在这里插入图片描述

1.2.2 差异备份

  • 备份自从上次完全备份之后修改的文件
  • 仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单
    在这里插入图片描述

1.2.3 增量备份

  • 只有在上次完全备份或增量备份后被修改的文件才会备份
  • 仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂

在这里插入图片描述

1.3 常见的备份方法

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

  2. 专用备份工具mysqldump或mysqlhotcopy
    mysqldump常用的逻辑备份工具
    mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表

  3. 启用二进制日志进行增量备份·
    进行增量备份,需要刷新二进制日志

  4. 第三方工具备份
    免费的MySQL热备份软件Percona XtraBackup

2. MySQL完全备份

2.1 完全备份简介

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

2.2 优点与缺点

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

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

2.3 实现物理冷备份与恢复

2.3.1 实现流程

关闭MySQL数据库 > 使用tar命令直接打包数据库文件夹 > 直接替换现有MySQL目录

2.3.2 前置准备

mysql1 :192.168.67.100
mysql2 :192.168.67.101
mysql -uroot -pabc123
#登录数据库

在这里插入图片描述

create datbbase scj;
#新建数据库use scj;
#进入数据库create table scj1 (id int, name varchar(10), age int, sex char(2), hobby varchar(50));
#新建表show tables;
#查看数据库

在这里插入图片描述

#添加数据
insert into scj1 values (1, '张三', 22, '男', 'java');
insert into scj1 values (2, '李四', 23, '男', 'shell');
insert into scj1 values (3, '王五', 24, '男', '云计算');
insert into scj1 values (4, '赵四', 25, '男', 'url');
insert into scj1 values (5, '尼古拉斯', 26, '男', 'html');
insert into scj1 values (6, '日川钢板', 27, '男', 'css');

在这里插入图片描述

create table scj2 like scj1;
insert into scj2 (select * from scj1);
#克隆一个名为scj2的表show tables from scj;
#查看是否创建成功

在这里插入图片描述

2.3.3 实现物理冷备份

quit
#退出数据库
systemctl stop mysqld
#关闭数据库
cd /usr/local/mysql/data
#前往mysql默认日志目录下

~~~

mkdir /opt/backup
#创建备份日志文件目录tar zcvf /opt/backup/mysql_full_$(date -d "-1 day" +%Y.%m.%d).tar.gz ./data/
#打包压缩上一天的data目录到/opt/backup目录下,并标上日期
#拓展
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/%ddate -d "$(date +%Y%m01) -1 day" +%Y/%m/%d
#显示上月最后一天date -d "(date -d "1 mouth" +%Y%m01) -1 day" +%Y/%m/%d
#显示当月最后一天

在这里插入图片描述

cd /optscp mysql_full_2023.09.18.tar.gz 192.168.67.101:/opt
#将打包的data目录远程拷贝到另一台mysql主机的opt目录下

在这里插入图片描述

在这里插入图片描述

#前往mysql2
systemctl stop mysqld
#关闭mysql服务cd /usr/local/mysql
mv data/ data.bak
#将现data目录改名为data.bakmv  mysql_full_2023.09.18.tar.gz /usr/local/mysql/
#将此压缩包转移到mysql用户目录下tar xf mysql_full_2023.09.18.tar.gz
#解压缩mysql1的data目录

在这里插入图片描述

systemctl start mysqld
#打开mysql服务

在这里插入图片描述

mysql -uroot -pabc123
#进入数据库
show databases;
#查看现有数据库show tables from scj;
#查看库中现有数据库select * from scj.scj1;
#查看表内容

在这里插入图片描述

2.4 使用mysqldump备份数据库

#基本格式
mysqldump -u [用户名] -p[密码] --databases 库名1 [库名2]> /备份路径/备份文件名.sql	
#导出的就是数据库脚本文件#完全备份一个或多个完整的库(包括其中所有的表)
mysqldump -uXXX -p[XXX] 库名 > XXX.sql
#备份指定库中的所有表数据(不包含创建库的操作)mysqldump -uroot -pabc123 scj > /opt/backup/scj.sql
#只备份表和表中的内容,并没有备份库cd /opt/backup
ls

在这里插入图片描述

cat scj.sql |egrep -v "^--|^/\*|^$"
#过滤出需要的信息

在这里插入图片描述

mysqldump -uroot -pabc123 --databases scj > /opt/backup/scj_full.sql
#备份一个完整的库到/opt/backup目录下

在这里插入图片描述

cat scj_full.sql |egrep -v "^--|^/\*|^$"
#过滤出需要的信息

在这里插入图片描述

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

在这里插入图片描述

cat all_full.sql |grep "^CREATE DATABASE"

在这里插入图片描述

mysqldump -u root -p[密码] 库名 [表名1] [表名2]> /备份路径/备份文件名.sql
#备份指定库中的一个或多个表数据(不包含创建库的操作)mysqldump -u root -pabc123 scj scj2 > /opt/backup/scj_scj2.sql
#备份scj库中scj2表cat scj_scj2.sql |egrep -v "^--|^/\*|^$"
#查看备份内容信息

在这里插入图片描述

2.5 使用source命令恢复数据库

#记得提前备份

在这里插入图片描述

#模拟环境
#先登录mysql
mysql -uroot -pabc123mysql>drop databases scj;
#删除scj库

在这里插入图片描述

source /opt/backup/scj_full.sql
#恢复完整的scj库#注:一定要用绝对路径

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

#也可以只用表数据进行恢复
create database scj;
#创建新scj库use scj;
#进入scj库source /opt/backup/scj.sql
#恢复库中表数据#因为scj.sql中不包含有创建库的操作,所以可以在任意一个库中导入表数据

2.6 使用mysql命令恢复数据库

#基本格式
mysql -uXXX -pXXX [库名] < XXX.sql          #如果sql文件只包含表的备份,要指定库名cat XXX.sql | mysql -uXXX -pXXX [库名]
mysql -uroot -pabc123 scj < scj.sql
#需要提前创建库mysql -uroot -pabc123  < scj_full.sql
#直接恢复完整的数据库
mysql -uroot -pabc123 -e "drop database scj;"
#-e 执行命令后退出数据库mysql -uroot -pabc123 -e "show databases;"
#查看是否删除完成

在这里插入图片描述

mysql -uroot -pabc123  < scj_full.sqlmysql -uroot -pabc123 -e "show databases;"
#查看是否恢复完成

在这里插入图片描述

3. MySQL增量备份与恢复

3.1 使用完全备份所带来的问题

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

3.2 增量备份简介

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

3.3 特点

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

3.4 增量备份与日志的关系

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

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

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

3.5 增量恢复方法类别

3.5.1 一般恢复

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

3.5.2 基于位置恢复

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

3.5.3 基于时间点恢复

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

3.6 增量备份

3.6.1 开启二进制日志功能

vim /etc/my.cnf
#编辑配置文件#添加
log-bin=mysql-bin
binlog_format = MIXED				#可选,指定二进制日志(binlog)的记录格式为 MIXED
server-id = 1#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT

在这里插入图片描述

systemctl restart mysqld
#重新启动服务ls /usr/local/mysql/data

在这里插入图片描述

#因为二进制文件内容默认是二进制字符,人是看不懂的
#所以使用mysqlbinlog命令
mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000001
#以base64方式进行解码,按行进行读取编码,显示详细内容,指定mysql-bin.000001文件

在这里插入图片描述

#除了可以用重启来刷新mysql二进制文件,还可以使用mysqladmin命令来刷新二进制文件mysqladmin -uroot -pabc123 flush-logs
#再次生成新的二进制日志文件

在这里插入图片描述

cat mysql-bin.index
#该文件保存着所有的二进制文件的序列号

在这里插入图片描述

3.6.2 实现增量备份

#模拟环境
select * from scj.scj1
#事先准备表

在这里插入图片描述

#当天二进制文件是没有操作数据的
cat /usr/local/mysql/data/mysql-bin.000003  
#查看最新二进制日志文件

在这里插入图片描述

#首先实现完全备份
mkdir /opt/backupcd /opt/backup
mkdir full bin
#full目录做完全备份,bin做增量备份

在这里插入图片描述

vim /opt/mysqlquan.sh     
#编写完全备份脚本  
#!/bin/bash  
mysqldump -u root -p123456 --all-databases > /bak/all_$(date +%F).sql  chmod 700 /opt/mysqlquan.sh 
#添加属主的权限

在这里插入图片描述

vim /opt/binlog.sh 
#编写增量备份脚本
#!/bin/bash  
filename=$(sed -n '$p' /usr/local/mysql/data/mysql-bin.index | awk -F '/' '{print $2}') 
#使用sed命令打印二进制日志文件最后一行内容作为filename变量的值 
mv /usr/local/mysql/data/$filename /bak/binlog_$(date +%F)
#将二进制日志移动到备份目录下,并将移动后的文件名称加上日期  
mysqladmin -uroot -pabc123 flush-logs  
#生成新的二进制日志文件  chmod 700 /opt/binlog.sh 
#添加属主的权限

在这里插入图片描述

crontab -e
#做计划任务

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

mysqldump -uroot -pabc123 scj scj1 > /opt/backup/full/scj_scj1-$(date +%Y.%m.%d).sql
#将scj库下scj1表备份到/opt/backup/full下

在这里插入图片描述

mysqladmin -uroot -pabc123 flush-logs
#重新生成一个二进制文件

在这里插入图片描述

#进入数据库
#插入两条数据
insert into scj.scj1 values (7, '小黑子', 25, '男', '黑坤坤');
insert into scj.scj1 values (8, '小仙女', 18, '女', '打拳');select * from scj.scj1;
#查看内容

在这里插入图片描述

mysqladmin -uroot -pabc123 flush-logs
#保存上一个文件并生成新一个文件

在这里插入图片描述

mv -f mysql-bin.000004 /opt/backup/bin/mysql-bin.000004-$(date -d '1 day' +_%Y.%m.%d)

在这里插入图片描述

#进入数据库
#插入两条数据
insert into scj.scj1 values (9, 'giao桑', 28, '男', 'giao');
insert into scj.scj1 values (10, '翠花', 18, '女', '看打拳');select * from scj.scj1;
#查看内容

在这里插入图片描述

mysqladmin -uroot -pabc123 flush-logs
#保存上一个文件并生成新一个文件

在这里插入图片描述

mv -f mysql-bin.000005 /opt/backup/bin/mysql-bin.000005-$(date -d '1 day' +_%Y.%m.%d)

在这里插入图片描述

#进入数据库
#模拟被删库跑路了
drop databbase scj;

在这里插入图片描述

2.6.3 一般恢复

#现在进行恢复
create database scj;
#新建库
mysql -uroot -pabc123 scj < /opt/backup/full/scj_scj1-2023.09.20.sql
#首先恢复基础表数据

在这里插入图片描述

#进入数据库
select * from scj.scj1
#查看表内容

在这里插入图片描述

#恢复第二次输入的内容
mysqlbinlog --no-defaults /opt/backup/bin/mysql-bin.000004-_20230921 | mysql -uroot -pabc123

在这里插入图片描述

#进入数据库
select * from scj.scj1
#查看表内容

在这里插入图片描述

#恢复第三次输入的内容
mysqlbinlog --no-defaults /opt/backup/bin/mysql-bin.000005-_2023.09.22 | mysql -uroot -pabc123

在这里插入图片描述

3.6.4 端点恢复

#将二进制文件转译
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000004-_20230921 > mysql-bin-2023.09.21mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000005-_2023.09.22 > mysql-bin-2023.09.22

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

3.6.4.1 基于位置恢复
#基本格式
mysqlbinlog --no-defaults --start-position='位置点' --stop-position='位置点' 二进制日志文件 | mysql -uXXX -pXXX
#示例
#只恢复小黑子那一段#进入数据库清空表数据
truncate table scj.scj1;

在这里插入图片描述

vim /opt/backup/bin/vim mysql-bin-2023.09.21
#查看具体位置点

在这里插入图片描述

mysqlbinlog --no-defaults --start-position='293' --stop-position='526' /opt/backup/bin/mysql-bin.000004-_20230921 | mysql -uroot -pabc123
#将具体的位置点传往数据库服务器
#注:要使用二进制文件,不要用编码后的二进制文件

在这里插入图片描述

#前往数据库
select * from scj.scj1;
#查看内容

在这里插入图片描述

3.6.4.2 基于时间点恢复
#基本格式
mysqlbinlog --no-defaults --start-datetime='YYYY-mm-dd HH:MM:SS' --stop-datetime='YYYY-mm-dd HH:MM:SS' 二进制日志文件 | mysql -uXXX -pXXX
#示例
#只恢复小仙女那一段#进入数据库清空表数据
truncate table scj.scj1;

在这里插入图片描述

vim /opt/backup/bin/vim mysql-bin-2023.09.21
#查看具体时间点

在这里插入图片描述

mysqlbinlog --no-defaults --start-datetime='2023-09-20 0:37:43' --stop-datetime='2023-09-20 0:40:35' /opt/backup/bin/mysql-bin.000004-_20230921 | mysql -uroot -pabc123
#将具体时间点范围内的数据传往数据库服务器内

在这里插入图片描述

#前往数据库
select * from scj.scj1;
#查看内容

在这里插入图片描述

相关文章:

MySQL详解六:备份与恢复

文章目录 1. 数据库备份的分类1.1 从物理和逻辑上分类1.1.1 物理备份1.1.2 逻辑备份 1.2 从数据库的备份策略角度上分类1.2.1 完全备份1.2.2 差异备份1.2.3 增量备份 1.3 常见的备份方法 2. MySQL完全备份2.1 完全备份简介2.2 优点与缺点2.3 实现物理冷备份与恢复2.3.1 实现流程…...

什么样的应用程序适合使用Flutter开发桌面?

桌面应用开发的现状 在过去&#xff0c;桌面应用程序的开发通常需要使用特定于操作系统的工具和语言&#xff0c;如C、C#、Java等。这导致了高昂的开发成本和维护困难。尽管有一些跨平台桌面开发工具&#xff0c;如Electron和Qt&#xff0c;但它们在性能、用户体验和开发效率方…...

02强化学习基本概念

强化学习基本概念 前言1、State、Action、Policy等① State② Action③ State transition④ State transition probability⑤ Polity 2、Reward、Return、MDP等① Reward② Trajectory and return③ Discounted return④ Episode⑤ MDP 总结&#xff1a; 前言 本文来自西湖大学…...

笔记2.2:网络应用基本原理

一. 网络应用的体系结构 &#xff08;1&#xff09;客户机/服务器结构&#xff08;Client-Server, C/S&#xff09; &#xff08;2&#xff09;点对点结构&#xff08;Peer-to-Peer&#xff0c;P2P&#xff09; &#xff08;3&#xff09;混合结构&#xff08;Hybrid&#x…...

生活垃圾数据集(YOLO版)

文章目录 1、数据集介绍1.1、数据集图片组成2.1、获取数据集方式 2、扩展代码2.1、文件结构树2.2、划分数据集2.3、获取数据集文件名字2.4、文件成功对应检测 3、其他文章 1、数据集介绍 1.1、数据集图片组成 【有害垃圾】&#xff1a;电池&#xff08;1 号、2 号、5 号&…...

操作系统篇之虚拟内存

虚拟内存是什么? 虚拟内存是计算机操作系统中的一种技术&#xff0c;它将每个进程的内存空间划分成若干个固定大小的页&#xff0c;并通过页面映射技术将这些页与物理内存或磁盘上的页面文件进行交换 虚拟内存能干什么? 扩展了实际物理内存容量&#xff1a;虚拟内存使得每个…...

浅谈SpringMVC的请求流程

目录标题 浅谈SpringMVC的请求流程SpringMVC的介绍SpringMVC的逻辑概念运行图解知识总结 浅谈SpringMVC的请求流程 对于SpringMVC而言重点是了解它的底层运行逻辑&#xff0c;从而可以根据其逻辑来进行实际业务的操作或者是利用原理增强业务的功能性&#xff0c;最终达到项目预…...

2309json.nlohmann数格示例1

参考 示例 下面是一些示例,可让你了解如何使用该类. 除了以下示例之外,你可能还需要: ->检查文档 ->浏览独立示例文件 每个API函数(记录在API文档中)都有相应独立示例文件.如,emplace()函数有一个匹配的emplace.cpp示例文件. 从文件中读取JSON json类提供了操作JSON…...

你知道 delete 删除属性时的一些细节吗?

探究 delete 的一些细节&#xff0c;起源于刚刚做过的一道笔试&#xff0c;原题如下&#xff1a; a 1; const b 2; console.log(delete a); console.log(delete b); // 输出结果是&#xff1f; // 答&#xff1a;true false我可从来没用过 delete 的返回值&#xff0c;但凡…...

Blender入门——快捷键

视角控制 旋转视角&#xff1a;鼠标中键摁住即可旋转平移视角&#xff1a;shift中远近视角&#xff1a;中键滚动 物体控制 移动物体&#xff1a;G旋转物体:R缩放物体&#xff1a;S回复变换&#xff1a;AltG,R,S新建物体&#xff1a;shiftA复制物体&#xff1a;shiftD删除物体&a…...

实例讲解Spring boot动态切换数据源

前言 在公司的系统里&#xff0c;由于数据量较大&#xff0c;所以配置了多个数据源&#xff0c;它会根据用户所在的地区去查询那一个数据库&#xff0c;这样就产生了动态切换数据源的场景。 今天&#xff0c;就模拟一下在主库查询订单信息查询不到的时候&#xff0c;切换数据…...

调整网络时需要注意的事项

这段时间调整网络&#xff0c;涉及的计算机多&#xff0c;Vlan也多&#xff0c;不小心的动作会给自己造成很大的麻烦&#xff0c;因为毕竟我也只是一个网络的初学者&#xff0c;平时虽然是网管&#xff0c;只是作为一项普通的工作。 准备工作做得不细致&#xff0c;可能出现的问…...

OpenCV自学笔记二十二:绘图及交互

一、绘图基础 下面是关于OpenCV绘图基础函数的说明和举例&#xff1a; 1. cv2.line()&#xff1a;绘制直线 cv2.line(img, pt1, pt2, color, thickness, lineType) - img: 需要绘制直线的图像。 - pt1: 直线起始点坐标。 - pt2: 直线结束点坐标。 - color: 直线颜色&…...

【自学开发之旅】Flask-会话保持-API授权-注册登录

http - 无状态-无法记录是否已经登陆过 #会话保持 – session cookie session – 保存一些在服务端 cookie – 保存一些数据在客户端 session在单独服务器D上保存&#xff0c;前面数个服务器A,B,C上去取就好了&#xff0c;业务解耦。—》》现在都是基于token的验证。 以上是基…...

数据结构与算法--排序算法复习

目录 1.三种常见的简单排序&#xff1a; 1.1冒泡排序 1.2 选择排序 1.3 插⼊排序 2 常见高级排序算法 2.1 希尔排序 2.2 快速排序 2.3 归并排序 2.4计数排序 先上结论&#xff1a; 1.三种常见的简单排序&#xff1a; 1.1冒泡排序 1.⾸先在未排序数组的⾸位开始&#…...

python随手小练1

题目&#xff1a; 使用python做一个简单的英雄联盟商城登录界面 具体操作&#xff1a; print("英雄联盟商城登录界面") print("~ * "*15 "~") #找其规律 a "1、用户登录" b "2、新用户注册" c "3、退出系统&quo…...

gym_unity学习笔记

最近学了一段时间gym_unity&#xff0c;把一些资料留在这里 实例 实例gym_unity训练RollerBall&#xff1a;https://blog.csdn.net/alibutter/article/details/120908687实例gyn_unity训练3DBall&#xff1a;https://zhuanlan.zhihu.com/p/554927641?utm_id0 源码&#xff1…...

(三十)大数据实战——HBase集成部署安装Phoenix

前言 Phoenix 是一个开源的分布式关系型数据库查询引擎&#xff0c;它基于 Apache HBase构建。它提供了在 Hadoop 生态系统中使用 SQL查询和事务处理的能力。本节内容我们主要介绍一下Hbase如何集成部署安装Phoenix服务工具&#xff0c;并集成hive框架&#xff0c;能够快速、灵…...

【Python基础】S01E03 元组

P01S03 元组 定义元组元组无法修改定义一个元素的元素 修改元组变量方案一&#xff1a;关联新元组方案二&#xff1a;转换为列表 列表是可修改的&#xff0c;对于处理网站的用户列表或游戏中的角色列表至关重要。然而我们有时候需要创建一系列不可修改的元素&#xff0c;元组可…...

【算法-双指针思想】

双指针思想 双指针法&#xff08;快慢指针法&#xff09;&#xff1a; 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。 定义快慢指针 快指针&#xff1a; 寻找新数组的元素 &#xff0c;新数组就是不含有目标元素的数组 慢指针&#xff1a; 指向更新 新数组下…...

uni-app实现点击复制按钮 复制内容

注意:uni.setClipboardData({})里面的data参数必须是字符串类型这个是大坑 第一种 <view>{{orderId}}</view> //复制的内容 <button click"copy(orderId)">复制</button>copy(value) {uni.setClipboardData({data: value , // 这里是个坑接…...

Qt5开发及实例V2.0-第十四章-Qt多国语言国际化

Qt5开发及实例V2.0-第十四章-Qt多国语言国际化 第14章 Qt 5多国语言国际化14.1 基本概念14.1.1 国际化支持的实现14.1.2 翻译工作&#xff1a;“*.qm”文件的生成 14.2 【实例】14.2.1 简单测试14.2.2 选择语言翻译文字 本章相关例程源码下载1.Qt5开发及实例_CH1401.rar 下载2.…...

嵌入式网络接口之MAC芯片与PHY芯片

目录 0. 参考文档 1.嵌入式网络接口简介 2.嵌入式网络硬件架构方案 2.1 SOC内未集成MAC芯片 2.2 SOC内集成MAC芯片 2.3 主流方案总结 2.3 参照实际网卡的说明 3.MII/RMII及MDIO接口 3.1 MII 3.2 RMII 3.3 MDIO 0. 参考文档 网卡构造&#xff1a;MAC与PHY的关系&…...

在华为云服务器上CentOS 7安装单机版Redis

https://redis.io/是官网地址。 点击右上角的Download。 可以进入https://redis.io/download/——Redis官网下载最新版的网址。 然后在https://redis.io/download/页面往下拉&#xff0c;点击下图超链接这里。 进入https://download.redis.io/releases/下载自己需要的安装…...

01_Bootstrap基础组件01

1 什么是 Bootstrap&#xff1f; Bootstrap&#xff0c;来自 Twitter&#xff0c;是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的&#xff0c;它简洁灵活&#xff0c;使 Web 开发更加快捷。它对 HTML、CSS 和 JavaScript 进行了封装&#xff0c;使它们…...

Java:OGNL对象图导航语言基本使用示例

OGNL是Object Graphic Navigation Language(对象图导航语言) 文档 https://commons.apache.org/proper/commons-ognl/language-guide.htmlhttps://github.com/orphan-oss/ognlhttps://ognl.orphan.software/developer-guide 引入依赖 <!-- https://mvnrepository.com/ar…...

中科院预警名单

2023年预警名单 (fenqubiao.com) 如果论文投稿到中国科学院预警期刊,可能会面临以下情况: 1. 预警期刊一般审稿周期长,容易出现迟迟不见回音的情况。 2. 这类期刊的学术质量参差不齐,接受论文的学术标准可能不严格。 3. 预警期刊发表论文的学术影响力比较有限,不容易为作者…...

Qt QCustomPlot介绍

介绍 主要介绍qcustomplot及其用法 最新版本:QCustomPlot Patch Release 2.1.1//November 6, 2022 下载:https://www.qcustomplot.com/index.php/download 官网:https://www.qcustomplot.com/index.php 简单使用 mainwindow.h /**************************************…...

什么是CORS(跨源资源共享)?如何解决前端中的CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CORS&#xff08;跨源资源共享&#xff09;⭐ 解决前端中的CORS问题的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为…...

C 初级学习笔记(基础)

目录 1.预处理器指令 预定义宏 预处理器运算符 &#xff08;\&#xff09; 参数化的宏 头文件 .h 引用头文件操作 2.函数&#xff08;标识符&关键字&运算符&#xff09;存储类 函数参数 a. 标识符&关键字 b. 运算符&#xff08;算术、关系、逻辑、位、赋…...

做网站找客源/海淀区seo多少钱

美 Craig Walls张卫滨 译spring 为简化 java ee 开发而生。代码网上可以下载&#xff1a;spring 是注入的 bean 这是我最近使用的感受。第二章&#xff0c;配置化的 Bean 三种方法第三章&#xff0c;通过配置 profile 来选择配置的 Bean 有二个选择&#xff0c;缺省配置&#x…...

wordpress 下载远程图片大小/广州seo网络培训课程

新建规则--基于NT事件日志--自定义条件&#xff1a;EventDescription - 包含 - 关键字转载于:https://www.cnblogs.com/dreamer-fish/p/3229044.html...

美食网站开发环境/网店运营基础知识

综述 总计一下cell的所有操作。 代码 写入文件 fidfopen(ML_lab7_1_test_data.txt,w); for i1:length(testpathss_con)a testpathss_con(i);a cell2mat(a);fprintf(fid,%s\n,a); end读取cell cell写入后在读取的时候不能直接用load&#xff0c;注意要用 importdataA i…...

图木舒克市建设局网站/什么是网站

idea的VM options命令 -Xms 设置初始化内存&#xff08;堆内存&#xff09;分配大小&#xff0c;默认是电脑内存的1/64-Xmx 设置最大分配内存&#xff0c;默认是电脑内存的1/4-XX:PrintGCDetails 打印GC垃圾回收信息-XX:HeapDumpOnOutOfMemoryError oom dump信息 使用&#xf…...

做c 题的网站/aso优化技巧大aso技巧

先来看一个问题 解决线程安全问题有两种方式&#xff1a; 方式1: synchronized 方式2:可重入锁 多读多写&#xff1a;读写锁 多读一写&#xff1a;volate 【一】隐式锁 和 显式锁 一、隐式锁 只有synchronized 详见&#xff1a;synchronized 篇 二、显式锁 1、定义&#xff…...

有哪些做设计交易网站有哪些内容/百度学术论文查重官网入口

在自定义个注解之后&#xff0c;通过这个注解&#xff0c;标注需要切入的方法&#xff0c;同时把需要的参数传到切面去。那么我们怎么在切面使用这个注解。我们使用这个自定义注解一方面是为了传一些参数&#xff0c;另一方面也是为了省事。具体怎么省事&#xff0c;看我下面的…...