MySQL备份与恢复(重点)
MySQL备份与恢复(重点)
一、用户管理与权限管理
☆ 用户管理
1、创建MySQL用户
注意:MySQL中不能单纯通过用户名来说明用户,必须要加上主机。如==jack@10.1.1.1==
基本语法:
mysql> create user '用户名'@'被允许连接的主机名称或主机的IP地址' identified by '用户密码'; mysql> select user,host from mysql.user;
案例:创建一个MySQL账号,用户名:tom,用户密码:123
mysql> create user 'tom'@'localhost' identified by '123'; 或 mysql> create user 'tom'@'127.0.0.1' identified by '123';
案例:创建一个MySQL账号(要求开通远程连接),主机IP地址:10.1.1.23,用户名:harry,用户密码:123
mysql> create user 'harry'@'10.1.1.23' identified by '123';
测试:在IP地址为10.1.1.23的主机上
# yum install mysql -y # mysql -h 10.1.1.10 -P 3306 -uharry -p Enter password:123 选项说明: 10.1.1.10 :MySQL服务器端的IP地址
yum安装mysql:代表安装的是MySQL的客户端
yum安装mysql-server:代表安装的是MySQL的服务器端
案例:创建一个MySQL账号(要求开通远程连接),主机IP的网段:10.1.1.0,用户名:jack,用户密码:123
mysql> create user 'jack'@'10.1.1.%' identified by '123';
案例:创建一个MySQL账号(要求开通远程连接),要求面向所有主机开放,用户名:root,用户密码:123
mysql> create user 'root'@'%' identified by '123';
2、删除MySQL用户
基本语法:
mysql> drop user '用户名'@'主机名称或主机的IP地址'; 特别说明: 如果在删除用户时没有指定主机的名称或主机的IP地址,则默认删除这个账号的所有信息。
案例:删除tom这个账号
mysql> drop user 'tom'@'localhost';
案例:删除jack这个账号
mysql> drop user 'jack'@'10.1.1.%';
案例:创建两个harry账号(localhost/10.1.1.23),然后删除其中的某个
mysql> create user 'harry'@'localhost' identified by '123'; mysql> create user 'harry'@'10.1.1.23' identified by '123';mysql> drop user 'harry'@'10.1.1.23';
扩展:删除MySQL账号的另外一种方式
mysql> delete from mysql.user where user='root' and host='%'; mysql> flush privileges;
3、修改MySQL用户
特别说明:MySQL用户重命名通常可以更改两部分,一部分是用户的名称,一部分是被允许访问的主机名称或主机的IP地址。
基本语法:
mysql> rename user 旧用户信息 to 新用户信息;
案例:把用户'root'@'%'更改为'root'@'10.1.1.%'
mysql> rename user 'root'@'%' to 'root'@'10.1.1.%';
案例:把'tom'@'localhost'更名为'harry'@'localhost'
mysql> create user 'tom'@'localhost' identified by '123'; mysql> rename user 'tom'@'localhost' to 'harry'@'localhost';
扩展:使用update语句更新用户信息
mysql> update mysql.user set user='tom',host='localhost' where user='harry' and host='localhost'; mysql> flush privileges;
☆ 权限管理
1、权限说明
所有权限说明MySQL :: MySQL 5.7 Reference Manual :: 6.2.2 Privileges Provided by MySQL
USAGE 无权限,只有登录数据库,只可以使用test或test_*数据库 ALL 所有权限以下权限为指定权限 select/update/delete/super/replication slave/reload...with grant option 选项表示允许把自己的权限授予其它用户或者从其他用户收回自己的权限
默认情况下,分配权限时如果没有指定with grant option,代表这个用户不能下发权限给其他用户,但是这个权限分配不能超过自身权限。
2、权限保存位置(了解)
mysql.user 所有mysql用户的账号和密码,以及用户对全库全表权限(*.*) mysql.db 非mysql库的授权都保存在此(db.*) mysql.table_priv 某库某表的授权(db.table) mysql.columns_priv 某库某表某列的授权(db.table.col1) mysql.procs_priv 某库存储过程的授权
3、给用户授权
基本语法:
mysql> grant 权限1,权限2 on 库.表 to 用户@主机 mysql> grant 权限(列1,列2,...) on 库.表 to 用户@主机
库.表表示方法:*.*代表所有数据库的所有数据表,db_itheima.*代表db_itheima数据库中的所有数据表,db_itheima.tb_admin,代表db_itheima数据库中的tb_admin表
案例:给tom账号分配db_itheima的查询权限
mysql> grant select on db_itheima.* to 'tom'@'localhost'; mysql> flush privileges;
案例:给tom账号分配db_itheima.tb_student数据表的权限(要求只能更改age字段)
mysql> grant update(age) on db_itheima.tb_student to 'tom'@'localhost'; mysql> flush privileges;
案例:添加一个root@%账号,然后分配所有权限
mysql> create user 'root'@'%' identified by '123'; mysql> grant all on *.* to 'root'@'%'; mysql> flush privileges;
4、查询用户权限
查询当前用户权限
mysql> show grants;
查询其他用户权限
mysql> show grants for '用户名称'@'授权的主机名称或IP地址';
5、with grant option选项
with grant option选项作用:代表此账号可以为其他用户下发权限,但是下发的权限不能超过自身权限。
mysql> grant all on *.* to 'amy'@'10.1.1.%' identified by '123' with grant option; mysql> grant all on *.* to 'harry'@'10.1.1.%' identified by '123'; 如以上命令所示: amy拥有下发权限的功能,而harry不具备下发权限的功能。
如果grant授权时没有with grant option选项,则其无法为其他用户授权。
6、使用grant创建用户
说明:5.7以后==不推荐==,未来会被弃用!
基本语法:
mysql> grant 权限 on 数据库.数据表 to '新用户名称'@'授权主机名称或IP地址' identified by '用户的密码';
案例:创建一个root账号,主机为%,授予所有权限,密码为123
mysql> grant all on *.* to 'root'@'%' identified by '123';
7、revoke回收权限
基本语法:
revoke 权限 on 库.表 from 用户;撤消指定的权限 mysql> revoke update on db01.tt1 from 'tom'@'10.1.1.1'; 撤消所有的权限 mysql> revoke select on db01.* from 'tom'@'10.1.1.1';
案例:从tom账号中回收select权限
mysql> revoke select on db_itheima.* from 'tom'@'localhost'; mysql> flush privileges; mysql> show grants for 'tom'@'localhost';
案例:从tom账号中回收update权限
mysql> revoke update(age) on db_itheima.tb_student from 'tom'@'localhost'; mysql> flush privileges; mysql> show grants for 'tom'@'localhost';
二、MySQL备份概述
1、关于数据保存你要知道
思考:备份和冗余有什么区别?
备份: 能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方。
冗余: 数据有多份冗余,但不等备份,只能防止机械故障带来的数据丢失,例如主备模式、数据库集群。
2、到底要备份什么
☆ 备份什么
数据库:==一堆物理文件的集合==;日志文件(二进制日志)+数据文件+配置文件
① 数据文件
② 配置文件 => my.cnf
③ 日志文件(主要是二进制日志文件)
☆ MySQL体系结构
扩展:MySQL体系结构(MySQL => DBMS软件到底是由哪些层构成的)
☆ 存储引擎层(MyISAM与InnoDB引擎)
存储引擎层:简单来说,就是数据的存储方式。在MySQL中,我们可以使用show engines
查看当前数据库版本支持哪些引擎,常见的数据存储引擎:InnoDB、MyISAM、NDB...
常见面试题:请简述MySQL的MyISAM引擎与InnoDB引擎的区别
① MyISAM引擎:擅长数据的查询,支持全文索引
② InnoDB引擎:Supports transactions, row-level locking, and foreign keys,支持事务处理、行级锁、支持外键。
☆ 存储层(数据文件是如何进行存储的)
问题:存储引擎到底是如何保存数据文件的?
mysql> create database db_itheima default charset=utf8;
提出问题:我能不能不进入MySQL终端,然后在命令行中直接创建一个数据库呢?-e
当数据库创建完毕后,查看/mysql_3306/data文件夹:
db_itheima文件夹中还有一个文件db.opt
,存放内容为数据库的编码格式。
MyISAM引擎
mysql> use db_itheima; mysql> create table tb_user(id int, name char(1)) engine=myisam default charset=utf8;
创建完成后,查看db_itheima目录信息,发现产生了3个文件
*.frm :框架文件,定义数据表结构 *.MYI :INDEX索引,主要用于存放索引文件 *.MYD:数据文件
InnoDB引擎
mysql> use db_itheima; mysql> create table tb_user(id int, name char(1)) engine=innodb default charset=utf8;
创建完成后,查看db_itheima目录信息,发现产生了2个文件
*.frm :框架文件,定义数据表结构 *.ibd:索引文件+数据文件
其实InnoDB引擎不仅仅会产生以上两个文件,其在外部data目录中也会产生一个文件(确切来说不能叫做产生文件,而应该叫做共享文件)
所以由此可知,InnoDB引擎的数据备份不能简简单单的通过拷贝方式实现,必须使用专业的备份工具。
☆ 日志文件(MySQL中我们需要了解哪些日志)
日志类型 | 写入日志的信息 |
---|---|
error错误日志 | 存放数据库的启动、停止或运行时的错误信息(找ERROR) |
binlog二进制日志 | ==数据库的所有更改==操作(DDL/DML/DCL),不包含select或者show这类语句。 |
error错误日志的命令规则与存放的目录:/data目录下 + 主机名称.err
更改错误日志的存放位置:
# vim my.cnf [mysqld] ... log_error=data数据目录/主机名称.err或mysql.err
binlog二进制日志应用场景:
用于==主从复制==中,master主服务器将二进制日志中的更改操作发送给slave从服务器,从服务器执行这些更改操作是的和主服务器的更改相同。
用于==数据的恢复==操作
binlog二进制日志如何开启?
默认binlog日志是==关闭==的,可以通过修改配置文件完成开启,如下:
# vim my.cnf [mysqld] ... server-id=10 log-bin=data数据目录/binlog
当我们更改了my.cnf配置文件,一定要记得重启MySQL服务器。service命令
3、备份过程须考虑的因素
-
必须制定==详细的备份计划(策略)==(备份频率、时间点、周期)
-
备份数据应该放在==非数据库本地==,并建议==有多份副本==
-
必须做好==数据恢复的演练==(每隔一段时间,对备份的数据在测试环境中进行模拟恢复,保证当出现数据灾难的时候能够及时恢复数据。)
-
根据数据应用的场合、特点==选择正确的备份工具==。
-
数据的一致性
-
服务的可用性
4、备份的类型
☆ 逻辑备份
-
备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL)。
-
适用于==中小型数据库,效率相对较低==。 一般在数据库正常提供服务的前提下进行,如:mysqldump、mydumper、into outfile(表的导出导入)等。
-
备份实质:就是把要备份的数据导出成.sql或.txt文件
☆ 物理备份
-
直接复制==数据库文件==
-
适用于==大型数据库==环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。
-
一般是在==数据库彻底关闭或者不能完成正常提供服务==的前提下进行的备份);如:tar、cp、==xtrabackup==(数据库可以==正常提供服务==)、lvm snapshot、rsync等
-
备份的实质:对数据文件 + 配置文件 + 日志文件进行拷贝操作
☆ 在线热备(数据冗余、AB复制、主从复制)
-
MySQL的replication架构,如M-S|M-S-S|M-M-S等
-
实时在线备份
5、备份工具
㈠ 社区版安装包中的备份工具
① mysqldump(逻辑备份,只能==全量备份==)
1)企业版和社区版都包含
2)本质上使用==SQL语句描述数据库==及数据并导出
3)在MYISAM引擎上锁表,Innodb引擎上锁行
4)数据量很大时不推荐使用
② mysqlhotcopy(物理备份工具)
1)企业版和社区版都包含
2)perl写的一个脚本,本质上是使用锁表语句后再拷贝数据
3)==只==支持MYISAM数据引擎
㈡ 企业版安装包中的备份工具
mysqlbackup
1)在线备份
2)增量备份
3)部分备份
4)在某个特定时间的一致性状态的备份
㈢ 第三方备份工具
① XtraBackup和innobackupex(物理备份)
1)Xtrabackup是一个对InnoDB做数据备份的工具,支持==在线热备份==(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
2)Xtrabackup有两个主要的工具:xtrabackup、innobackupex
a、xtrabackup只能备份==InnoDB和XtraDB==两种数据表,不能备份myisam类型的表。
b、innobackupex是将Xtrabackup进行封装的perl脚本,所以能同时备份处理innodb和myisam的存储引擎,但在处理myisam时需要加一个读锁。
② mydumper(逻辑备份,备份SQL语句)
多线程备份工具
https://launchpad.net/mydumper/mydumper-0.9.1.tar.gz 2015-11-06(最后更新时间)
6、备份方法
-
完全备份(全备)
-
增量备份(增量备份基于全量备份)
-
三、MySQL逻辑备份
##1、mysqldump基本备份
本质:导出的是sql语句文件
优点:无论是什么存储引擎,都可以用mysqldump备成sql语句
缺点:速度较慢,导入时可能会出现格式不兼容的突发状况.==无法直接做增量备份==.
提供三种级别的备份,表级,库级和全库级
2、mysqldump基本语法
表级别备份 mysqldump [OPTIONS] database [tables] 库级别备份 mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] 全库级别备份 mysqldump [OPTIONS] --all-databases [OPTIONS]
准备一些要备份的数据:
mysql> create database db_itheima default charset=utf8; mysql> use db_itheima; mysql> create table tb_student(id int not null auto_increment,name varchar(20),age tinyint unsigned default 0,gender enum('male','female'),subject enum('ui','java','yunwei','python'),primary key(id) ) engine=innodb default charset=utf8;mysql> insert into tb_student values (null,'刘备',33,'male','java'); mysql> insert into tb_student values (null,'关羽',32,'male','yunwei'); mysql> insert into tb_student values (null,'张飞',30,'male','python'); mysql> insert into tb_student values (null,'貂蝉',18,'female','ui'); mysql> insert into tb_student values (null,'大乔',18,'female','ui');
3、mysqldump表级备份与还原
☆ 备份
案例:把db_itheima数据库中的tb_student数据表进行备份
# mkdir /tmp/sqlbak # mysqldump db_itheima tb_student > /tmp/sqlbak/tb_student.sql -p Enter password:123
☆ 还原
# mysql 数据库名称 < .sql文件位置 -p Enter password:123 或 # mysql -uroot -p Enter password:123 mysql> use db_itheima mysql> source .sql文件的位置
4、mysqldump库级备份与还原
☆ 备份
案例:把db_itheima数据库进行备份
# mysqldump --databases db_itheima > /tmp/sqlbak/db_itheima.sql -p Enter password:123
☆ 还原
# mysql < .sql文件位置 -p Enter password:123 或 # mysql -uroot -p Enter password:123 mysql> source .sql文件的位置
5、mysqldump全库级备份
在MySQL中,如果想使用mysqldump进行全库级备份,必须开启二进制日志!!!
开启二进制日志
# vim my.cnf [mysqld] ... server-id=10 log-bin=/mysql_3306/data/binlog# service mysql_3306 restart
mysqldump高级选项说明:
常用选项 | 描述说明 |
---|---|
--flush-logs, -F | 开始备份前刷新日志(二进制日志)binlog.000001 => binlog.000002 |
--flush-privileges | 备份包含mysql数据库时刷新授权表 => 刷新用户和授权信息 |
--lock-all-tables, -x | MyISAM一致性,服务可用性(针对所有库所有表) |
--lock-tables, -l | 备份前锁表(针对要备份的库) |
--single-transaction | 适用InnoDB引擎,保证一致性,服务可用性 |
--master-data=2 | 表示将二进制日志位置和文件名写入到备份文件并在dump文件中注释掉这一行 |
--master-data=1 | 表示将二进制日志位置和文件名写入到备份文件,在dump文件中不注释这一行 |
--master-data参数其他说明:
1)恢复时会执行,默认是1 2)需要RELOAD privilege并必须打开二进制文件 3)这个选项会自动打开--lock-all-tables,关闭--lock-tables
☆ 备份
前提:一定要开启二进制日志
# mysqldump --all-databases --master-data --single-transaction > /tmp/sqlbak/all.sql -p Enter password:123
☆ 还原
# mysql < all.sql -p Enter password:123
总结
-
mysqldump工具备份的是==SQL语句==,故备份不需要停服务
-
使用备份文件==恢复==时,要保证==数据库处于运行状态==
-
只能实现全库,指定库,表级别的==某一时刻的备份==,本身==不能增量备份==
-
适用于==中小型==数据库
四、mysqldump + binlog实现增量备份
1、核心思路
搞明白一件事:到底什么是增量备份?
答:① 要有全量备份 ② 继续增删改数据 ③ 再次需要备份时,不需要进行全量备份,只需要备份binlog日志文件即可(因为binlog日志记录了增删改操作的所有SQL语句)
2、增量备份实验步骤
第一步:先准备数据(前提)
第二步:开启二进制,然后做全量备份(全库备份)
第三步:继续对数据库进行增删改操作
第四步:突然发生了硬件故障,数据库丢失了
第五步:恢复全量备份导出的数据(不完整,可能只有90%)
第六步:备份二进制日志,根据其信息(导入剩余的10%的数据)
...
完成
3、增量备份的具体实践
第一步:准备数据
mysql> create database db_itheima default charset=utf8; mysql> use db_itheima; mysql> create table tb_student(id int not null auto_increment,name varchar(20),age tinyint unsigned default 0,gender enum('male','female'),subject enum('ui','java','yunwei','python'),primary key(id) ) engine=innodb default charset=utf8;mysql> insert into tb_student values (null,'刘备',33,'male','java'); mysql> insert into tb_student values (null,'关羽',32,'male','yunwei'); mysql> insert into tb_student values (null,'张飞',30,'male','python'); mysql> insert into tb_student values (null,'貂蝉',18,'female','ui'); mysql> insert into tb_student values (null,'大乔',18,'female','ui');
第二步:开启二进制日志,重启服务,然后进行全库备份
# vim my.cnf [mysqld] ... server-id=10 log-bin=/mysql_3306/data/binlog# service mysql_3306 restart # rm -rf /tmp/sqlbak/* # mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > /tmp/sqlbak/all.sql -p
第三步:继续对数据库进行增删改操作
mysql> insert into tb_student values (null,'小乔',16,'female','ui'); mysql> delete from tb_student where id = 3;
第四步:突然发生了硬件故障,数据库丢失了
# mysql -e "drop database db_itheima;" -p Enter password:123
...故事开始了(删库)
第五步:动员运维工程师开始进行数据恢复,马上把最新的二进制文件进行备份
# cp /mysql_3306/data/binlog.000003 空格 /tmp/sqlbak/
第六步:先进行全库恢复
# mysql < /tmp/sqlbak/all.sql -p Enter password:123
第七步:通过binlog增量备份还原数据到100%
学会读二进制日志文件,必须通过专业的工具
# mysqlbinlog /tmp/sqlbak/binlog.000003 => 重点找事故的临界点,如drop database 确认at位置 # mysqlbinlog --start-position=4 --stop-position=740 /tmp/sqlbak/binlog.000003 |mysql -p
到此恢复100%数据
相关文章:

MySQL备份与恢复(重点)
MySQL备份与恢复(重点) 一、用户管理与权限管理 ☆ 用户管理 1、创建MySQL用户 注意:MySQL中不能单纯通过用户名来说明用户,必须要加上主机。如jack10.1.1.1 基本语法: mysql> create user 用户名被允许连接的主…...

机器学习中的特征选择:方法和 Python 示例
布拉加德什桑达拉拉詹 一、说明 特征选择是机器学习流程中至关重要且经常被低估的步骤。它涉及从数据集中的原始特征集中选择最相关的特征(输入变量或属性)的子集。特征选择的重要性怎么强调都不为过,因为它直接影响机器学习模型的质量、效率…...

有哪些不错的golang开源项目?
前言 下面是github上的golang项目,适合练手,可以自己选择一些项目去练习,整理不易,希望能多多点赞收藏一下!废话少说,我们直接进入正题>>> 先推荐几个教程性质的项目(用于新手学习、…...

解决ssh使用public key远程登录服务器拒绝问题
目录 使用场景windows安装ssh客户端使用powershell ssh登录服务器生成密钥文件ubuntu ssh服务器配置使用vscode远程登录使用Xshell远程登录使用MobaXtem远程登录Server refused our key问题解决方案 使用场景 使用vscode远程ssh登录使用public key不需要输入密码,比较方便. w…...

js数组中,相同id的item数据合并
原数据: const list [ {id:1, key: a}, {id:1, key: b}, {id:2, key: c}, {id:2, key: d}, ]期望数据格式 const newList [ {id:1, keyList: [a,b]}, {id:2, keyList: [c,d]}, ]// 相同id的数据合并let newList_(list ).flatten().groupBy(id).map(_.spread((..…...

LeetCode(33)最小覆盖子串【滑动窗口】【困难】
目录 1.题目2.答案3.提交结果截图 链接: 76. 最小覆盖子串 1.题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字…...
设计模式 创建者模式
设计模式 创建者模式 前言原来代码使用设计模式总结Builder模式在源码中的应用:其他代码 前言 “对象创建”模式——绕开new 工厂模式 抽象工厂 原型模式 构建器 动机与背景 目前需要建造一个房子,建造房子需要一系列特定的步骤,但是房子的类…...

排序算法--插入排序
实现逻辑 ① 从第一个元素开始,该元素可以认为已经被排序 ② 取出下一个元素,在已经排序的元素序列中从后向前扫描 ③如果该元素(已排序)大于新元素,将该元素移到下一位置 ④ 重复步骤③,直到找到已排序的元…...

【操作宝典】SQL巨擘:掌握SQL Server Management的终极秘籍!
目录 ⛳️【SQL Server Management】 ⛳️1. 启动登录 ⛳️2. 忘记密码 ⛳️3. 操作数据库和表 3.1 新建数据库text 3.2 新建表 3.3 编辑表 3.4 编写脚本 ⛳️【SQL Server Management】 ⛳️1. 启动登录 需要开启服务 ⛳️2. 忘记密码 登录windows--> 安全性 -->…...

Airtest遇到模拟器无法输入中文的情况该如何处理?
1. 前言 最近有收到同学们的一些提问,使用Airtest的 text 接口,发现在部分模拟器上, text 无法输入中文,不知道该怎么处理。 今天我们就输入这个小问题,来详细聊一下。 2. Airtest的输入法简介 对于Android设备来说…...
从农夫山泉家族任命,看“食企二代”的接班与传承
本文转载自产业科技 农夫山泉再次引发舆论关注,起因是一则人事任命消息。 市场消息称,农夫山泉对区域及人员进行了调整,其总部所在地浙江省被划分为四个区域,在以往浙南、浙北基础上多了浙西大区以及杭州大区,其中农…...
JavaScript启动本地应用程序
JavaScript调起本地应用程序 以下内容,自定义部分我也还未经过实际验证,酌情查看。 文章目录 JavaScript调起本地应用程序确定协议调用协议传参自定义写入协议获取参数 在浏览器中通过 JavaScript调起本地应用程序的一个可行方法就是 通过协议调起。 …...
软件工程理论与实践 (吕云翔)第十四章 软件维护与软件工程管理课后习题与解析
第十四章 软件维护与软件工程管理 1.判断题 (1)代码行技术是比较简单的定量估算软件规模的方法。(√) (2)功能点技术依据对软件信息域特性和软件复杂性的评估结果,估算软件规模。(√) &#…...

Flutter 桌面应用开发之读写Windows注册表
文章目录 需求来源Windows查询Windows版本号方法1. 如何查看Windows版本号2. Windows开发如何通过代码查询Windows版本号(1) 使用C#代码:(2) 使用VB.NET代码 3.通过注册表查看Windows版本信息 Flutter查询Windows版本号方法依赖库支持平台实现步骤1. 在pubspec.yaml…...

【Java Spring】SpringBoot 日志系统
文章目录 一、Spring Boot 日志系统1.1 Spring Boot 日志框架1.2 自定义日志打印1.3 日志级别设置1.4 日志持久化1.5 lombok 简化日志输出 一、Spring Boot 日志系统 1.1 Spring Boot 日志框架 SLF4J 和 logback都是spring boot内置的日志框架,开发者只负责调用对…...

Rust UI开发(四):iced中如何添加菜单栏(串口调试助手)
注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 这是一个系列博文,本文是第四篇,前三篇链接: 1、Rust UI开发(一):使用iced构建UI时…...

P19 C++ 构造函数的成员初始化列表
目录 前言 01 如果不用成员列表如何初始化变量 02 成员列表初始化 03 为什么要使用成员列表初始化呢? 04 案例代码 前言 本期我们聊聊构造函数初始化列表。 你应该经常使用成员初始化列表,如果你不喜欢这种代码风格,建议你还是慢慢习惯吧…...
acwing算法基础之数学知识--Nim游戏和集合Nim游戏
目录 1 基础知识2 模板3 工程化 1 基础知识 (一) Nim游戏: n n n堆物品,每堆有 a i a_i ai个,两个玩家轮流取走任意一堆的任意个物品,但不能不取。取走最后一个物品的人获胜。 结论:如果这n…...

大数据Doris(二十八):Routine Load查看和修改作业
文章目录 Routine Load查看和修改作业 一、查看导入作业状态...

顺序表总结
📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 目录 🌤️arraylist的简…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...