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

MySQL-运维

一、日志

1.错误日志

错误日志是MySQL中最重要的日志之一,它记录了当mysql启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关性息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。

该日志是默认开启的,默认存放目录/var/log/,默认的日志文件名为mysqld.log。查看日志位置:

show variables like '%log_error%'

2.二进制日志

(1)介绍

二进制日志(BINLOG)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句

作用:

  1. 灾难时的数据恢复
  2. MySQL的主从复制。在MySQL8版本中,默认二进制日志是开启着的,涉及到的参数如下:

show variables like '%log_bin%'

        

(2)日志格式

MySQL服务器中提供了多种格式来记录二进制日志,具体格式及特点如下:

日志格式含义
STATEMENT基于SQL语句的日志记录,记录的是SQL语句,对数据进行修改的SQL都会记录在日志文件中
ROW

基于行的日志记录,记录的是每一行的数据变更。(默认)

MIXED

混合了STATEMENT和ROW两种格式,默认采用STATEMENT,在某些特殊情况下会自动写换位ROW进行记录。

shoiw variables like '%binlog_format%';

(3)日志查看

由于日志是以二进制方式储存的,不能直接读取,需要通过二进制日志查询工具mysqlbinlog来查看,具体语法:

mysqlbinlog [ 参数选项 ] logfilename

参数选项:

                -d                指定数据库名称,只列出指定的数据库相关操作。

                -o                忽略掉日志中的前n行命令

                -v                将行事件(数据变更)重构为SQL语句

                -w                将行事件(数据变更)重构为SQL语句,并输出注释信息

(4)日志删除

对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量的磁盘空间。通过以下几种方式清理日志:

指令含义
reset master删除全部binlog日志,删除之后,日志编号,将从binlog.000001重新开始
purge master logs to ‘binlog.******’删除******编号之前的所有日志
purge master logs before ‘yyyy-mm-dd hh24:mi:ss'删除日志为yyyy-mm-dd hh24:mi:ss'之前产生的所有日志

也可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志过期会自动删除。

show variabkles like '%binlog_expire_logs_seconds%';

(5)查询日志

查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的SQL语句。默认情况下是未开启的。如果需要开启查询日志,可以设置以下配置

修改MySQL的配置文件/etc/my.cnf文件添加如下内容:

#该选项用来开启查询日志,可选值:0或1;0代表关闭,1代表开启

general_log=1

#设置日志的文件名,如果没有指定,默认的文件名为host-name.log

general_log_file=mysql-query.log

(5)慢查询日志

慢查询日志记录了所有执行时间超过参数long_query_time设置值并且扫描记录数不小于min_examined_row_limit的所有日志,默认未开启。long_query_time默认值为10秒,最小值0,精度可以到微秒。

#慢查询日志

show_query_log=1

#执行时间参数

long_query_time=2

默认情况下,不会记录管理语句,也不会记录不使用索引进行查找的查询。可以使用log_slow_admin_statements和更改此行为log_queries_not_using_indexes,如下所述。

#记录执行较慢的管理语句

log_slow_admin_statements=1

#记录执行较慢的未使用索引语句

log_queries_not_using_indexes=1

二、主从复制

1.概述

主从复制是指将主库数据的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制,从主库同时也可以作为其他从服务器的主库,实现链状复制。

MySQL复制的有点主要包含以下三个方面:

  1. 主库出现问题,可以快速切换到从库提供服务。
  2. 实现读写分离,降低主库的访问压力。
  3. 可以在从库中执行备份,以避免备份期间影响主库服务。

2.原理

从上图来看,复制分成三部:

  1. Master主库在事务提交时,会把数据变更记录在二进制日志文件Binlog。
  2. 从库读取主库的二进制日志文件Binlog,写入到从库的中继日志Relay Log。
  3. slave重做中继日志中的文件,将改变反映他自己的数据。

3.搭建

(1)服务器准备

准备好两台服务器之后,在上述的两台服务器中分别安装好MySQL,并完成基础的初始化准备工作。

(2)主库配置

  • 修改配置文件/etc/my.cnf

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2的32的次方-1,默认为1

server-id=1

#是否只读,1代表只读,0代表读写

read-only=0

#忽略的数据,指不需要同步的数据库

#binlog-ignore-db=mysql

#指定同步的数据库

#binlog-do-db=db01

  • 重启MySQL服务器

systemctl restart mysqld

  • 登录mysql,创建远程连接的账号,并授予主从复制权限

#创建itcast用户,并设置密码,该用户可在任意主机连接MySQL服务

CREATE USER 'itcast'@'%'IDENTIFIED WITH mysql_native_password BY'Root@123456';

#为'itcast'@'%'用户分配主从复制权限

GRANT REPLICATION SLAVE ON*.*TO'itcast'@'%';

  • 通过指令,查看二进制日志坐标

show master status;

字段含义说明:

        file:从哪个日志文件开始推送日志文件

        position:从哪个位置开始推送日志

        binlog_ignore_db:指定不需要同步的数据库

(3)从库配置

  • 修改配置文件/etc/my.cnf

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2的32的次方-1,和主库不一样

server-id=2

#是否只读,1代表只读,0代表读写

read-only=1

  • 重启MySQL服务器

systemctl restart mysqld

  • 登录mysql,设置主库配置

CHANGE REPLICATION SOURCE TO SOURCE_HOST='xxx.xxx',SOURCE_USER='xxx',SOURCE_PASSWORD='xxx',SOURCE_LOG_FILE='xxx',SOURCE_LOG_POS=xxx;

上述是8.0.23中语法。如果mysql是8.0.23之前的版本,执行如下SQL:

CHANDE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx',MASTER_USER='xxx',MASTER_PASSWORD='xxx',MASTER_LOG_FILE='xxx',MASTER_LOG_POS-=xxx;

参数名含义8.0.23之前
SOURCE_HOST主库IP地址MASTER_HOST
SOURCE_USER连接主库的用户名MASTER_USER
SOURCE_PASSWORD连接主库的密码MASTER_PASSWORD
SOURCE_LOG_FILEbinlog日志文件名MASTER_LOG_FILE
SOURCE_LOG_POSbinlog日志文件位置MASTER_LOG_POS
  • 开启同步操作

start replica;        #8.0.22之后

start slave;        #8.0.22之前

  • 查看主从同步位置

show replica status;        #8.0.22之后

show slave status:          #8.0.22之前

三、分库分表

1.介绍

随着互联网及移动互联网的发展,应用系统的数据量也是呈指数式增长,若采用单数数据库进行数据库储存,存在以下性能瓶颈:

  1. IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。
  2. CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会消耗大量的CPU资源,请求数太多,CPU出现瓶颈。

分库分表的中心思想都是将数据分散储存,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库新能的目的。

(1)拆分策略

(2)垂直拆分

垂直分库:以表为依据,根据业务将不同表拆分到不同库中。

特点:

  1. 每个库的表结构都不一样。
  2. 每个库的数据也不一样。
  3. 所有库的并集是全量数据。

垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。

特点:

  1. 每个表的结构都不一样
  2. 每个表的数据也不一样,一般通过一列(主键/外键)关联。
  3. 所有表的并集是全部数据。

(3)水平拆分

水平分库:以字段为依据,按照一定策略,将一个库的数据拆分到多个库中。

特点:

  1. 每个库的表结构都一样。
  2. 每个库的数据都不一样。
  3. 所有库的并集是全数据。

水平分表:以字段为依据,按照一定策略,将一个表的数据拆分到对各表中。

特点:

  1. 每个表的表结构都一样。
  2. 每个库的数据都不一样。
  3. 所有库的并集是全量数据。

  • shardingJDBC:基于AOP原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处理。需要自行编码配置实现,只支持java语言,性能较高。
  • MyCat:数据库分库分表中间件,不用调整代码即可实现分库分表,支持多种语言,性能不及前者

2.MyCat概述

(1)介绍

Mycat是开源的、活跃的、基于Java语言编写的MySQL数据库中间件。可以向像使用mysql一样来使用mycat,对于开发人员来说根本感觉不到mycat的存在。

优势:

  • 性能可靠稳定
  • 强大的技术团体
  • 体系完善
  • 社区活跃

(2)安装

Mycat是采用java语言开发的开源的数据库中间件,支持Windows和Linux运行环境,下面介绍MyCat的Linux中的环境搭建。我们需要在准备好的服务器中安装如下软件。

  • MySQL
  • JDL
  • Mycat
服务器安装软件说明
192.168.200.210JDK、MycatMyCat中间件文件
192.168.200.210MySQL

分片服务器

192.168.200.213MySQL分片服务器
192.168.200.214MySQL分片服务器

(3)目录结构

bin:存放可执行文件:用于启动停止mycat

conf:存放mycat的配置文件

lib:存放mycat的项目依赖包(jar)

logs:存放mycat的日志文件

(4)概念介绍

3.Mycat入门

(1)需求

由于tb_order表中数据量很大,磁盘IO及容量都达到了瓶颈,现在需要对tb_order表进行数据分片,分为三个数据节点,每一个节点主机位于不同的服务器上,具体结构,参考下图:

(2)环境准备

(3)分片配置

(4)启动服务

切换到Mycat的安装目录,执行如下指令,启动Mycat:

#启动

bin/mycat start

#停止

bin/mycat stop

Mycat启动之后,占用端口号8066

(5)分片指令测试

通过如下指令,就可以连接并登录Mycat。

mysql -h192.168.200.210 -P 8066 -uroot -p123456

然后就可以在Mycat中来创建表,并往表结构中插入数据,查看数据在MySQL中的分布情况。

CREATE TABLE TB_ORDER(

        id BIGINT(20)NOT NULL,

        title VARCHAR(100)NOT NULL,

        PRIMARY KEY(id)        

)ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT INOT TB_ORDER(id,title)VALUES(1,'goods1');

INSERT INOT TB_ORDER(id,title)VALUES(2,'goods2');

INSERT INOT TB_ORDER(id,title)VALUES(3,'goods3');

INSERT INOT TB_ORDER(id,title)VALUES(1000000,'goods1000000');

INSERT INOT TB_ORDER(id,title)VALUES(10000000,'goods10000000');

4.Mycat配置

(1)schema.xml

schema.xml作为Mycat中最重要的配置文件之一,涵盖了Mycat的逻辑库、逻辑表、分片规则、分片节点及数据源的配置。

主要包含以下三组标签:

  • schema标签
  • datanode标签
  • datahost标签
①schema标签

schema标签用于定义MyCat实例中的逻辑库,一个MyCat实例中,可以有多个逻辑库,可以通过schema标签来划分不同的逻辑库。

MyCat中的逻辑库的概念,等同于MyAQL中的database概念,需要操作某个逻辑库下的表时,也需要切换逻辑库(use xxx)。

核心属性:

  • name:指定自定义的逻辑库库名
  • checkSQLschema:在SQL语句操作时指定了数据库名称,执行时是否自动去除;true:自动去除,flase:不自动去除
  • sqlMaxLimit:如果未指定limit进行查询,列表查询模式查询多少条记录
②schema标签(table)

table标签定义了MyCat中逻辑库schema下的逻辑表,所有需要拆分的表都需要在table标签中定义。

核心属性:

  • name:定义逻辑表表明,在该逻辑库下唯一。
  • dataMode:定义逻辑表所属的dataMode,该属性需要与dataMode标签中name对应;多个dataMode逗号分隔
  • rule:分片规则的名字,分片规则名字是在rule.xml中定义的
  • primaryKey:逻辑表对应真实表的主键
  • type:逻辑表的类型,目前逻辑表只有全局表和普通表,如果未配置,就是普通表;全局表,配置为global
③dataMode标签

dataMode标签中定义了MyCat中的数据节点,也会就是我们通常的说的数据分片。一个dataNode标签就是一个独立的数据分片。

核心属性:

  • name:定义数据节点名称
  • dataHost:数据库实例主机名称,引用自dataHost标签中name属性
  • database:定义分片所属数据库
④dataHost标签

该标签在MyCAT逻辑库中作为底层标签存在,直接定义了具体的数据库实例、读写分离、心跳语句。

核心属性:

  • name:唯一标识,供上层标签使用
  • maxCon/minCon:最大连接数/最小连接数
  • balance:负载均衡策略,取值0,1,2,3
  • writeType:写操作分发方法(0:写操作转发到第一个writeHost,第一个挂了,切换到第二个;1:写操作随机分发到配置的writeHost)
  • dbDriver:数据库驱动,支持native、jdbc
⑤rule.xml

rule.xml中定义所有拆分表的规则,在使用过程中可以灵活的使用分片算法,或者对同一个分片算法使用不同的参数,他让分片过程可配置化。主要包含两类标签:tableRule、Funtion。

⑥server.xml

server.xml配置文件包含了MyCat的系统配置信息,主要有两个重要标签:system、user。

  • system标签:对应的系统配置项及其含义,参考资料。

  • user标签

5.Mycat分片

(1)垂直拆分

①场景

在业务系统中,涉及以下表结构,但是由于用户与订单每天都会产生大量的数据,单台服务器的数据储存及处理能力是有限的,可以对数据表进行拆分,原有的数据库表如下。

②准备

分别在三台MySQL中创建数据库shopping

③配置

④测试

在mycat的命令行中,通过source指令导入表结构,以及对应的数据,查看数据分布情况。

source/root/shopping-table.sql

source/root/shopping-insert.sql

查询用户的收件人及收件人地址信息(包含省、市、区)。

select ua.user_id,us.contact,p.province,c.city,r.area,ua.address from tb_user_address ua,tb_areas_city c,tb_areas_provinces p,tb_areas_region r where ua.province_id=p.provinceid and ua.city_id=c.cityid and ua.town_id=r.areaid;

查询每一笔订单及订单的收件地址信息(包含省、市、区)。

SELECT order_id,payment,receiver,province,city,area FROM tb_order_master o,tb_arears_city c,tb_arears_region r WHERE o.receiver_province = p.provinceid AND o.receiver_city=c.cityid AND o.receiver_region=r.areaid;

⑤全局表配置

对于省、市、区/县表tb_areas_provinces,tb_areas_city,tb_areas_region,是属于数据字典表,在多个业务模块中都可能会遇到,可以将其设置为全局表,利于业务操作。

(2)水平拆分

①场景

在业务系统中,有一张表(日志表),业务系统每天都会产生大量的日志数据,单台服务器的数据储存及处理能力是有限的,可以对数据库表进行拆分。

②准备

③配置

④测试

在mysql的命令行中,执行如下SQL创建表、并插入数据,查看数据分布情况。

(3)分片规则-范围

根据指定的字段及配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。

(4)分片规则-取模

根据指定的字段值与节点数量进行求模运算,根据运算结果,来决定该数据属于哪一个分片

(5)分片规则-一致性hash

所谓一致性哈希,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为分区节点的增加而改变原来数据的分区位置

(6)分片规则-枚举

通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,本规则适用于按照省份、性别、状态拆分数据等业务。

(7)分片规则-应用指定

运用阶段由应用自主决定路由到那个分片,直接根据字符字串(必须是数字)计算分片号。

(8)分片规则-固定分片hash算法

该算法类似于十进制的求模运算,但是为二进制的操作,例如,取id的二进制低10位与1111111111进行位&运算。

特点:

  • 如果是求模,连续的值,分别分配到各个不同的分片;但是此算法会将连续的值可能分配到相同的分片,降低事务处理的难度。
  • 可以均匀分配,也可以非均匀分配。
  • 分片字段必须为数字类型。

(9)分片规则-字符串hash解析

截取字符串中的指定位置的子字符串,进行hash算法,算出分片。

(10)分片规则-按(天)日期分片

(11)分片规则-自然月

使用场景为按照月份来分片,每个自然月为一个分片。

6.Mycat管理及监控

(1)Mycat原理

(2)Mycat管理

Mycat默认开通2个端口,可以在server.xml中进行修改。

  • 8066数据访问端口,即进行DML和DDL操作。
  • 9066数据库管理端口,即mycat服务管理控制功能,用于管理mycat的整个集群状态

mysql -h 192.168.200.210 -p 9066 -uroot -p123456

命令含义
show @@help查看Mycat管理工具帮助文档
show @@version查看Mycat的版本
reload @@config重新加载Mycat的配置文件

show @@datasource

查看Mycat的数据源信息
show @@datanode查看MyCAT现有的分片节点信息
show @@threadpool查看MyCat的线程池信息
show @@sql查看执行的SQL
show @@sql.sum查看执行的SQL统计

(3)Mycat-eye

  • 介绍

Mycat-web(Mycat-eye)是对mycat-server提供监控服务,功能不局限于对mycat-server使用。它通过JDBC连接对Mycat、Mysql监控,监控远程服务器(目前仅限于linux系统)的cpu、内存、网络、磁盘。

Mycat-eye运行过程中需要依赖zookeeper,因此需要先安装zookeeper。

四、读写分离

1.介绍

读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务武器。主数据库提供读操作,这样能有效地减轻单台数据库的压力。

通过Mycat即可轻易实现上述功能,不仅可以支持MySQL,也可以支持Oracle和SQL Server。

2.一主一从

(1)原理

MySQL地主从复制,是基于二进制日志(binlog)实现的

(2)环境准备

主机角色用户名密码
192.168.200.211masterroot1234
192.168.200.212slaveroot1234

3.一主一从读写分离

(1)配置

Mycat控制后台数据库地读写分离和负载均衡由schema.xml文件datahost标签地balance属性控制。

(2)测试

连接Mycat,并在Mycat中执行DML、DQL查看是否能够进行读写分离。

4.双主双从

(1)介绍

一个主机Master1用于处理所有写请求,他的从机Slave1和另一台主机Master2还有他的从机Savle2负责所有读请求。当Master1主机宕机后,Master2主机负责写请求,Master1、Master2互为备机。构架图如下:

(2)准本工作

(3)搭建

①主库配置(Master1-192.168.200.211)
  • 修改配置文件/etc/my.cnf

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2的32次方-1,默认1

server-id=1

#指定同步的数据库

binlog-do-db=db01

binlog-do-db=db02

binlog-do-db=db03

#在作为从数据库的时候,有写入操作也要更新二进制日志文件

log-slave-updates

  • 重启MySQL服务器

systemctl restart mysqld

  • 两台主库创建账户并授权

#创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务

CREATE USER 'itcast'@'%'IDENTIFIED WITH mysql_native-password BY'Root@123456';

#为'itcast‘@’%'用户分配主从复制权限

GRANT REPLICATION SLAVE ON *.* TO 'itcast'2@'%';

通过指令,查看两台主库的二进制日志坐标

show master status;

②从库配置
  • 修改配置文件/etc/my.cnf

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2的32次方-1,默认1

server-id=2

  • 重启MySQL服务器

systemctl restart mysqld

  • 两台从库配置关联的主库

CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx',MASTER_USER='xxx',MASTER_PASSWORD='xxx',MASTER_LOG_FILE='xxx',MASTER_LOG_POS=xxx;

需要注意salve1对应的是master1,salve2对应的是master2.

启动两台从库主从复制,查看从库状态

start slave;

show slave status \G;

  • 两台主库相互复制Master2复制Master1,Master1复制Master2

CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx',MASTER_USER='xxx',MASTER_PASSWORD='xxx',

MASTER_LOG_FILF='xxx',MASTER_LOG_POS=xxx;

启动两台从库主从复制,查看从库状态

start slave;

show slave status \G;

  • 测试

5.双主双从读写分离

(1)配置

相关文章:

MySQL-运维

一、日志 1.错误日志 错误日志是MySQL中最重要的日志之一,它记录了当mysql启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关性息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的&#xf…...

Waymo数据集下载与使用

在撰写论文时,接触到一个自动驾驶数据集Waymo Dataset 论文链接为:https://arxiv.org/abs/1912.04838v7 项目链接为:https://github.com/waymo-research/waymo-open-dataset 数据集链接为:https://waymo.com/open waymo提供了两种…...

蓝桥杯每日一题----素数筛

素数筛 素数筛的作用是筛选出[2,N]范围内的所有素数,本次主要讲解两种方法,分别是埃氏筛和欧拉筛。证明时会提到唯一分解定理,如果不知道的小伙伴可以先去学一学,那我们开始啦! 1.埃氏筛 主要思想:当找到…...

20240212请问如何将B站下载的软字幕转换成为SRT格式?

20240212请问如何将B站下载的软字幕转换成为SRT格式? 2024/2/12 12:47 百度搜索:字幕 json 转 srt json srt https://blog.csdn.net/a_wh_white/article/details/120687363?share_token2640663e-f468-4737-9b55-73c808f5dcf0 https://blog.csdn.net/a_w…...

《CSS 简易速速上手小册》第6章:高级 CSS 技巧(2024 最新版)

文章目录 6.1 使用 CSS 变量进行设计:魔法配方的调配6.1.1 基础知识6.1.2 重点案例:创建可定制的主题6.1.3 拓展案例 1:响应式字体大小6.1.4 拓展案例 2:使用 CSS 变量创建动态阴影效果 6.2 calc(), min(), max() 等函数的应用&am…...

2024-02-11 多进程、多线程 work

1. 创建一个多进程服务器和多线程服务器 a. 多进程 #include<myhead.h> #define PORT 9999 //端口号 #define IP "192.168.125.113" //IP地址//定义信号处理函数&#xff0c;用于回收僵尸进程 void handler(int signo) {if(signo S…...

详解结构体内存对齐及结构体如何实现位段~

目录 ​编辑 一&#xff1a;结构体内存对齐 1.1对齐规则 1.2.为什么存在内存对齐 1.3修改默认对齐数 二.结构体实现位段 2.1什么是位段 2.2位段的内存分配 2.3位段的跨平台问题 2.4位段的应用 2.5位段使用的注意事项 三.完结散花 悟已往之不谏&#xff0c;知来者犹可…...

Linux网络编程——tcp套接字

文章目录 主要代码关于构造listen监听accepttelnet测试读取信息掉线重连翻译服务器演示 本章Gitee仓库&#xff1a;tcp套接字 主要代码 客户端&#xff1a; #pragma once#include"Log.hpp"#include<iostream> #include<cstring>#include<sys/wait.h…...

【计算机网络】协议层次及其服务模型

协议栈&#xff08;protocol stack&#xff09; 物理层链路层网络层运输层应用层我们自顶向下&#xff0c;所以从应用层开始探究应用层 协议 HTTP 提供了WEB文档的请求和传送SMTP 提供电子邮件报文的传输FTP 提供两个端系统之间的文件传输报文&#xff08;message&#xff09;是…...

prometheus之redis_exporter部署

下载解压压缩包 mkdir /opt/redis_exporter/ cd /opt/redis_exporter/ wget http://soft.download/soft/linux/prometheus/redis_exporter/redis_exporter-v1.50.0.linux-amd64.tar.gz tar -zxvf redis_exporter-v1.50.0.linux-amd64.tar.gz ln -s /opt/redis_exporter/redis_…...

js 解构赋值

搬运&#xff1a;JavaScript系列之解构赋值_js解构赋值-CSDN博客...

Vivado用ILA抓波形保存为CSV文件

将ILA观察到的波形数据捕获为CSV文件&#xff0c;抓10次&#xff0c;把文件合并&#xff0c;把源文件删除 运行方法&#xff1a;Vivado的 Tcl console 窗口输入命令 set tcl_dir F:/KLD_FPGA/Code/sim set tcl_filename TCL_ILA_TRIG_V1.2.tcl source $tcl_dir/$tcl_filenam…...

微软AD域替代方案,助力企业摆脱hw期间被攻击的窘境

在红蓝攻防演练&#xff08;hw行动&#xff09;中&#xff0c;AD域若被攻击成功&#xff0c;是其中一个扣分最多的一项内容。每年&#xff0c;宁盾都会接到大量AD在hw期间被攻击&#xff0c;甚至是被打穿的企业客户。过去&#xff0c;企业还会借助2FA双因子认证加强OA、Exchang…...

Git教程I

Git教程I 本地Git创建git仓库将修改存到暂存区将暂存区提交到当前分支查看提交历史回退版本恢复到更晚的版本创建新分支切换分支简单的分支合并冲突分支合并不使用fast forward: --no-ff 远程Git连接远程仓库将本地分支上传到远程仓库从远程仓库拉取 本地Git 学习如何使用本地…...

containerd中文翻译系列(十)镜像验证

下面将介绍默认的 "bindir"ImageVerifier插件实现。 要启用图像验证&#xff0c;请在 containerd 配置中添加类似下面的一段&#xff1a; [plugins][plugins."io.containerd.image-verifier.v1.bindir"]bin_dir "/opt/containerd/image-verifier/b…...

假期day9(2024/2/14)

获取数据库查询的值并调用值使用函数&#xff1a;sqlite3_get_table 在回调函数中获取数据库查询值&#xff0c;无法在其他函数调用&#xff1a;使用函数sqlite3_exec(db, sql, select_callback, &flag, &errmsg&#xff09; 创建表 create table if not exists 表名…...

Leetcode 674 最长连续递增序列

题意理解&#xff1a; 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定&#xff0c;如果对于每个 l < i < r&#xff0c;都有 nums[i…...

力扣题目训练(8)

2024年2月1日力扣题目训练 2024年2月1日力扣题目训练404. 左叶子之和405. 数字转换为十六进制数409. 最长回文串116. 填充每个节点的下一个右侧节点指针120. 三角形最小路径和60. 排列序列 2024年2月1日力扣题目训练 2024年2月1日第八天编程训练&#xff0c;今天主要是进行一些…...

理解JAVA EE设计模式

理解JAVA EE设计模式 在Web应用程序的设计和开发阶段,开发人员在开发类似的项目时可能会遇到相似的问题。每名开发人员可能会遇到的问题找出不同或相似的解决方案。但是,这导致一些时间和精力浪费在为相似的问题寻找解决方案上。因此,要啊节省时间和精力,需要记录常见问题…...

GEE:梯度提升树(Gradient Boosting Tree)回归教程(样本点、特征添加、训练、精度、参数优化)

作者:CSDN @ _养乐多_ 对于分类问题,这个输出通常是一个类别标签 ,而对于回归问题,输出通常是一个连续的数值。回归可以应用于多种场景,包括预测土壤PH值、土壤有机碳、土壤水分、碳密度、生物量、气温、海冰厚度、不透水面积百分比、植被覆盖度等。 本文将介绍在Google…...

k8s-资源限制与监控 15

资源限制 上传实验所需镜像 Kubernetes采用request和limit两种限制类型来对资源进行分配。 request(资源需求)&#xff1a;即运行Pod的节点必须满足运行Pod的最基本需求才能 运行Pod。 limit(资源限额)&#xff1a;即运行Pod期间&#xff0c;可能内存使用量会增加&#xff0…...

【Ubuntu】在.bashrc文件中误设置环境变量补救方法

这里是vim也不在PATH中了&#xff0c;因为 解决方法就是在输入vim之后提示的vim路径下用vim打开该文件&#xff0c;然后改回来...

Imgui(1) | 基于imgui-SFML改进自由落体小球

Imgui(1) | 基于imgui-SFML改进自由落体小球 0. 简介 使用 SFML 做2D图形渲染的同时&#xff0c;还想添加一个按钮之类的 GUI Widget, 需要用 Dear Imgui。由于 Imgui 对于2D图形渲染并没有提供类似 SFML 的 API, 结合它们两个使用是一个比较好的方法, 找到了 imgui-SFML 这个…...

Linux-Vim的使用,快速入门Vim,Linux入门教程,精讲Linux

Vim的三种模式 输入模式&#xff0c;键入 i 或 a 或 o 都可以进入输入模式。 普通模式&#xff0c;打开Vim默认的模式。 命令模式&#xff0c;键入 : 进入命令模式。 注意&#xff1a;按下 ESC 可以从输入模式或命令模式退回到普通模式 退出 vim &#xff0c;需要在普通模式下…...

目标检测 | 卷积神经网络(CNN)详细介绍及其原理详解

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习模型&#xff0c;主要用于图像识别和计算机视觉任务。它的设计灵感来自于生物学中视觉皮层的工作原理。CNN的核心思想是通…...

机器人学、机器视觉与控制 上机笔记(第一版译文版 2.1章节)

机器人学、机器视觉与控制 上机笔记&#xff08;第一版译文版 2.1章节&#xff09; 1、前言2、本篇内容3、代码记录3.1、新建se23.2、生成坐标系3.3、将T1表示的变换绘制3.4、完整绘制代码3.5、获取点*在坐标系1下的表示3.6、相对坐标获取完整代码 4、结语 1、前言 工作需要&a…...

关于vue2+antd 信息发布后台不足的地方

有的写法可以cv 1.序号递增 {title: "序号",customRender: (text, record, index) > ${index 1},align: "center",}, 2.关于类型 {title: "类型",dataIndex: "type",align: "center",customRender: function (t) {sw…...

Ubuntu+Anaconda 常用指令记录

Anaconda 使用指令记录 1 创建环境 conda create -n name pythonx.x(python版本自己指定)例如 conda create --name myenv: 创建名为"myenv"的新环境。 conda activate myenv: 激活名为"myenv"的环境。 conda deactivate: 退出当前环境。 2 删除环境 c…...

P5732 【深基5.习7】杨辉三角 python解法

# 【深基5.习7】杨辉三角 ## 题目描述 给出 n<20&#xff0c;输出杨辉三角的前 n 行。 如果你不知道什么是杨辉三角&#xff0c;可以观察样例找找规律。 ## 输入格式 ## 输出格式 ## 样例 #1 ### 样例输入 #1 6 ### 样例输出 #1 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5…...

VitePress-12-markdown中使用vue的语法

前言 VitePress 中&#xff0c;markdown文档最终都会转换成为 html文件&#xff0c;我们在访问的时候&#xff0c;也是直接访问的 xxx.html 文件。而且&#xff0c;markdown文档会被作为 [vue单文件] 进行处理&#xff0c;因此&#xff0c;我们我们可以在文档中使用 vue 语法&…...

“bound drug/molecule”or “unbound drug/molecule”、molecule shape、sketching是什么?

“bound drug/molecule”or “unbound drug/molecule” For clarity, the following terms will be used throughout this study: “bound drug/molecule” (or “unbound drug/molecule”) refers to the drug/molecule that is bound (or unbound) to proteins [48]. 意思就是…...

深入理解C语言中的函数指针:概念、机制及实战应用

在C语言的世界里&#xff0c;函数是一等公民&#xff0c;可以被赋值给变量&#xff0c;这种特殊的变量就是我们今天要探讨的主角——函数指针。函数指针作为C语言中一种强大的工具&#xff0c;允许我们以间接方式调用函数&#xff0c;从而实现动态绑定、回调函数、策略模式等多…...

《UE5_C++多人TPS完整教程》学习笔记1 ——《P2 关于本课程(About This Course)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P2 关于本课程&#xff08;About This Course&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…...

权限系统设计

权限系统设计 RBAC 基于角色的访问控制 ABAC 基于属性的访问控制 普通的系统无非 CRUD&#xff0c;那系统如何控制一个用户该看到哪些数据、能操作哪些功能&#xff1f;日常开发中最常用到 RBAC 和 OAuth2 这两种访问控制和授权方案 RBAC 基于角色的访问控制 所有的访问控制模…...

Ubuntu Desktop - Screenshot (截图工具)

Ubuntu Desktop - Screenshot [截图工具] 1. Search your computer -> Screenshot -> Lock to Launcher2. gnome-screenshot3. System Settings -> Keyboard -> ShortcutsReferences 1. Search your computer -> Screenshot -> Lock to Launcher 2. gnome-s…...

docker 1:介绍

docker 1&#xff1a;介绍 docker解决哪些问题&#xff1a; 传统APP在安装到不同电脑的时候可能会遇到依赖问题&#xff0c;比如缺少VS 20xx&#xff0c;软件无法运行”的情况。docker使用容器技术将软件 依赖​打包为image包发布&#xff0c;解决了依赖问题。docker有一个官…...

RibbonBar RibbonPage切换事件

在开发的过程中&#xff0c;我们会用到点击切换page&#xff0c;来响应对应的事件&#xff0c;例如以下事件&#xff1a; 头文件中&#xff1a; void ribboncurrentPageIndexChanged(int index); 实现文件中&#xff1a; connect(ribbonBar(), SIGNAL(currentPageIndexChang…...

Conda历史版本下载地址和python对应关系

一、前言 因为Conda安装版本问题&#xff0c;带来了很多问题&#xff0c;虽然不能直接确定二者之间的关系&#xff0c;但是安装指定版本的conda,确实是一个比较好的方法。特此记忆。 二、下载地址 下载最新版本&#xff1a;Free Download | Anaconda 下载历史版本&#xff…...

Clickhouse查询语句执行过程

问题 简述clickhosue中一条select语句的执行过程&#xff0c;使用的引擎是ReplacingMergeTree。例如&#xff1a; select col1,col2 from table final prewhere col3 > ? and col4 ? and col5 ? -- col3为分区键&#xff0c;col4为二级索引,col5为主键字段 where col…...

【动态规划】【中位数】【C++算法】1478. 安排邮筒

# 作者推荐 【深度优先搜索】【树】【图论】2973. 树中每个节点放置的金币数目 本文涉及知识点 动态规划汇总 LeetCode1478. 安排邮筒 给你一个房屋数组houses 和一个整数 k &#xff0c;其中 houses[i] 是第 i 栋房子在一条街上的位置&#xff0c;现需要在这条街上安排 k…...

C#系列-数据结构+递归算法+排序算法(3)

C#数据结构 在C#中&#xff0c;数据结构是用于组织和管理数据的方式&#xff0c;以便更有效地进行数据的存储、访问和操作。数据结构对于算法的性能和设计至关重要&#xff0c;因为它们决定了数据如何在内存中布局以及如何与算法进行交互。C#提供了许多内置的数据结构&#xf…...

Redis实现秒杀

前期准备 缓存选择考虑 Redis和Redis Cluster&#xff08;分布式版本&#xff09;&#xff0c;是一个分布式缓存系统。其支持多种数据结构&#xff0c;也支持MQ。Redis在性能上做了大量优化。因此使用Redis或者Redis Cluster就可以轻松实现一个强大的秒杀系统。 用Redis的这…...

4 scala集合-Map

和 Java 一样&#xff0c;Scala 也有表示键值对&#xff08;Key-Value&#xff09;集合的 Map 数据结构。同样&#xff0c;Map 也分不可变和可变&#xff0c;不可变需要使用类 scala.collection.mutable.Map。 1 不可变 Map 可以使用以下语法定义不可变 Map 对象 val/var ma…...

QT 对象树模型

QObject是Qt里边绝大部分类的根类 QObject对象之间是以对象树的形式组织起来的。 当两个QObject&#xff08;或子类&#xff09;的对象建立了父子关系的时候。子对象就会加入到父对象的一个成员变量叫children&#xff08;孩子&#xff09;的list&#xff08;列表&#xff09;…...

ubuntu快速安装miniconda

ubuntu快速安装miniconda 环境 ubuntu.22.04 显卡 RTX 3050 关于选择Miniconda还是Anaconda的问题&#xff0c;Anaconda安装包比较大&#xff0c;耗时比较长&#xff0c;如果你是绝对的初学者&#xff0c;选择Anaconda会比较稳妥一些&#xff1b;否则建议你还是选择Miniconda安…...

阿里云游戏服务器多少钱一年?

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…...

小游戏和GUI编程(7) | SimpleNN 界面源码解析

小游戏和GUI编程(7) | SimpleNN 界面源码解析 0. 简介 SimpleNN 是 AdamYuan 在高中一年级时用 1 天时间写出来的简易 CNN, 使用 SFML 做 UI, 用于交互式输入手写数字&#xff0c;这个数字被训练好的 CNN 网络执行推理得到识别结果, 它的运行效果如下&#xff1a; 这一篇我们…...

c++设计模式之代理模式

作用 代理模式主要用于&#xff0c;通过代理类&#xff0c;来控制实际对象的访问权限 案例 class VideoSite { public:virtual void freeVideo()0;virtual void vipVideo()0;virtual void trickVideo()0; };class FixBugVideoSite:public VideoSite { public:void freeVideo()…...

第5个-模糊加载

Day 5 - Blurry Loading 1. 项目展示 2. 分析思路 变化过程 数字从 0 不断增长到 100&#xff1b;中间的百分比数字逐渐消失&#xff0c;即透明度 opacity 从 1 到 0&#xff1b;背景图片从模糊变为清晰&#xff0c;滤镜 filter.blur()的参数设置为从 30px 到 0px。 小 tips…...

rtt设备io框架面向对象学习-adc设备

目录 1.adc设备基类2.adc设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 1.adc设备基类 此层处于设备驱动框架层。也是抽象类。 在/ components / drivers / include / drivers 下的adc.h定义了如下adc设备基类 struct rt_ad…...