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

MySQL读写分离中间件

1.什么是读写分离中间件?
就是实现当[写]的时候转发到主库,当[读]的时候转发到从库的工具。
很类似学习过的proxy,比如nginx proxy做动静分离.
2.为什么要实现读写分离?
  1)让主库专注于写,因为读可以有很多从库可以干。
  2)让多个从库接收并发读请求。
好处,增加读和写的并发,防止锁竞争,减轻主数据库的压力。

生产场景:读写比基本都比较大,超过10/1.


3.读写分离中间件有哪些?
  1)程序实现(JAVA,PHP,PYTHON,SHELL)
     需要读写分离的SQL语句DML语句关键字:insert,delete,update,select
     读:select开头找从库,否则就找主库。
     优点:少配置一个服务,降低了连接延迟以及服务宕机问题。     
     程序修改mysql操作,直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配,需要开发人员协助。
  
  2)中间件插件(对应用层透明,ip1 读,ip2写)
    amoeba:    直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案,自己分配账户,和后端数据库权限管理独立,权限处理不够灵活。
    mysql-proxy:
    直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号,效率低
    proxySQL
    Atlas
    maxscale
    cobar
    mycat
    ====================
    proxySQL(推荐使用)类似学习过的proxy NGINX(nginx 反向代理,代理web服务请求)

4. ProxySQL介绍
ProxySQL是一个高性能的MySQL代理软件,可以实现数据库读写分离,支持 Query路由功能,支持动态指定某个SQL进行缓存,支持动态加载配置信息(无需重启ProxySQL ),支持故障切换和SQL过滤功能。
 Scale 100K+ connections
across thousands of servers
ProxySQL网站:
https://www.proxysql.com/
https://github.com/sysown/proxysql/wiki

5. 基本架构逻辑原理
见架构图。


6.检查修改主从复制环境
GTID环境:
51:Master mha node/mha management
52/53:Slave mha node


7. 安装ProxySQL插件
# 下载proxySQL
https://proxysql.com/
https://github.com/sysown/proxysql/releases

Scale 100K+ connections
across thousands of servers

# 安装proxySQL 
# 理论选择哪个机器都可以,本次选择51安装。
[root@db03 ~]# rpm -ivh proxysql-2.0.10-1-centos7.x86_64.rpm 
[root@db03 bin]# systemctl start proxysql
[root@db03 bin]# netstat -tulnp|grep 603
tcp        0      0 0.0.0.0:6033      0.0.0.0:*     LISTEN      15595/proxysql      
tcp        0      0 0.0.0.0:6032      0.0.0.0:*     LISTEN      15595/proxysql    

注意:
#6033 对外提供服务端口,用户连接
#6032 管理员管理端口

# 登录proxySQL
[root@db03 bin]# mysql -uadmin -padmin -h127.0.0.1 -P6032

db03 [(none)]>show databases;
+-----+---------------+-------------------------------------+
| seq | name          | file                                |
+-----+---------------+-------------------------------------+
| 0   | main          |                                     |
| 2   | disk          | /var/lib/proxysql/proxysql.db       |
| 3   | stats         |                                     |
| 4   | monitor       |                                     |
| 5   | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
db03 [(none)]>use main
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
db03 [main]>show tables;
+----------------------------------------------------+
| tables                                             |
+----------------------------------------------------+
| mysql_group_replication_hostgroups                 |
| mysql_query_rules                                  |
| mysql_replication_hostgroups                       |
| mysql_servers                                      |
| mysql_users                                        |
| runtime_*
+----------------------------------------------------+

8. ProxySQL中管理结构自带系统库

在ProxySQL中,6032端口管理共五个库: main、disk、stats 、monitor、stats_history 
核心是main库:
main: 
    main 库中有如下信息:
    
1)mysql_replication_hostgroups : 读写节点分组配置信息
db03 [main]>select * from mysql_replication_hostgroups;
+------------------+------------------+------------+---------+
| writer_hostgroup | reader_hostgroup | check_type | comment |
+------------------+------------------+------------+---------+
| 10               | 20               | read_only  | proxy   |
+------------------+------------------+------------+---------+


2)mysql_servers: 后端可以连接MySQL服务器的列表   ###nginx upstream池子
db03 [main]>select * from mysql_servers;
+--------------+-----------+------+-----------+--------+--------+----------------+
| hostgroup_id | hostname  | port | gtid_port | status | weight |max_connections |
+--------------+-----------+------+-----------+--------+--------+----------------+
| 20           | 10.0.0.52 | 3306 | 0         | ONLINE | 1      |1000            |
| 10           | 10.0.0.51 | 3306 | 0         | ONLINE | 1      |1000            |
| 20           | 10.0.0.53 | 3306 | 0         | ONLINE | 1      |1000            |
| 20           | 10.0.0.51 | 3306 | 0         | ONLINE | 1      |1000            |
+--------------+-----------+------+-----------+--------+--------+----------------+

3)mysql_users:   配置后端数据库的账号和监控的账号。 
db03 [main]>select username,password,default_hostgroup from mysql_users;
+----------+----------+-------------------+
| username | password | default_hostgroup |
+----------+----------+-------------------+
| root     | 123      | 10                |
+----------+----------+-------------------+


4)mysql_query_rules: 指定Query路由到后端不同服务器的规则列表。
db03 [main]>select rule_id,active,match_pattern,destination_hostgroup from mysql_query_rules;
+---------+--------+----------------------+-----------------------+
| rule_id | active | match_pattern        | destination_hostgroup |
+---------+--------+----------------------+-----------------------+
| 1       | 1      | ^select.*for update$ | 10                    |
| 2       | 1      | ^select              | 20                    |
+---------+--------+----------------------+-----------------------+

注: 表名以 runtime_开头的表示ProxySQL当前运行的配置内容,不能直接修改。
不带runtime_是下文图中Mem相关的配置。

disk :
    持久化的磁盘的配置 
stats: 
    统计信息的汇总 
monitor:
    监控的收集信息,比如数据库的健康状态等 
stats_history: 
    ProxySQL收集的有关其内部功能的历史指标

9. ProxySQL管理接口的多层配置关系
见架构图。

整套配置系统分为三层:
顶层   RUNTIME 
中间层 MEMORY(主要修改的配置表)
持久层 DISK和CFG FILE 


RUNTIME : 
    代表ProxySQL当前正在使用的配置,无法直接修改此配置,必须要从下一层(MEM层)load进来。 

MEMORY: 
    MEMORY层上面连接RUNTIME层,下面连接disk持久层。这层可以在线操作ProxySQL 配置,随便修改,不会影响生产环境。确认正常之后在加载到RUNTIME和持久化磁盘上。
    修改方法: 使用SQL DML语句:insert、update、delete、select。

DISK和CONFIG FILE:
    持久化配置信息。重启时,可以从磁盘快速加载回来。


10. 在不同层次间移动配置

为了将配置持久化到磁盘或者应用到 runtime,在管理接口下有一系列管理命令来实现它们。

1. user相关配置
## MEM加载到runtime
LOAD MYSQL USERS TO RUNTIME;

##  runtime保存至MEM
SAVE MYSQL USERS TO MEMORY;

## disk加载到MEM
LOAD MYSQL USERS FROM DISK;

## MEM到disk 
SAVE MYSQL USERS TO DISK;

## CFG到MEM
LOAD MYSQL USERS FROM CONFIG
=============================
2. server相关配置
##  MEM加载到runtime
LOAD MYSQL SERVERS TO RUNTIME;

##  runtime保存至MEM
SAVE MYSQL SERVERS TO MEMORY;

## disk加载到 MEM
LOAD MYSQL SERVERS FROM DISK;

## MEM 到disk 
SAVE MYSQL SERVERS TO DISK;

## CFG 到 MEM
LOAD MYSQL SERVERS FROM CONFIG
===============================
3. mysql query rules配置 
##  MEM 加载到runtime
LOAD MYSQL QUERY RULES TO RUNTIME;

##  runtime 保存至 MEM
SAVE MYSQL QUERY RULES TO MEMORY;

## disk 加载到 MEM
LOAD MYSQL QUERY RULES FROM DISK;

## MEM  到 disk 
SAVE MYSQL QUERY RULES TO DISK;

## CFG 到 MEM
LOAD MYSQL QUERY RULES FROM CONFIG

=================================
4. MySQL variables配置
##  MEM 加载到runtime
LOAD MYSQL VARIABLES TO RUNTIME;

##  runtime 保存至 MEM
SAVE MYSQL VARIABLES TO MEMORY;

## disk 加载到 MEM
LOAD MYSQL VARIABLES FROM DISK;

## MEM  到 disk 
SAVE MYSQL VARIABLES TO DISK;

## CFG 到 MEM
LOAD MYSQL VARIABLES FROM CONFIG


总结: 
日常配置其实大部分时间在MEM层配置,
然后load到RUNTIME,然后SAVE到Disk。cfg很少使用。

常见命令: 
使用SQL DML语句修改:insert、update、delete、select。

使用LOAD,SAVE生效和保存。
load xxx to runtime;
save xxx to disk;
XXX就是上面配置里关键字部分

注意:
    所有配置保MEM或disk层时,都不会发生任何警告或错误。
    只有load到runtime状态时才会验证配置。当load到 runtime时,如果出现错误,将恢复为之前保存的状态,这时可以去检查错误日志。  


11. ProxySQL应用————基于SQL实现读写分离

11.1 MySQL从库要设定read_only参数

1)主从复制的从库应该禁止用户写入。

2)ProxySQL如何判断主从(根据是否有read-only=1)
read-only=1就是从,否则就是主。

将52,53设置为read-only=1,修改配置步骤略.


11.2 配置读写节点分组信息

在mysql_replication_hostgroup表中,配置读写组编号
10编号对应就是写库的组,20编号对应的就是读库的组。


[root@db01 ~]# mysql -uadmin -padmin -h127.0.0.1 -P6032
db03 [(none)]>use main

insert into mysql_replication_hostgroups(writer_hostgroup, reader_hostgroup, comment) 
values (10,20,'proxy');

db01 [main]>select * from mysql_replication_hostgroups;
+------------------+------------------+------------+---------+
| writer_hostgroup | reader_hostgroup | check_type | comment |
+------------------+------------------+------------+---------+
| 10               | 20               | read_only  | proxy   |
+------------------+------------------+------------+---------+


db01 [main]>load mysql servers to runtime;
db01 [main]>save mysql servers to disk;


db01 [main]>select * from mysql_replication_hostgroups\G
*************************** 1. row ***************************
writer_hostgroup: 10
reader_hostgroup: 20
      check_type: read_only
         comment: proxy
说明:
    ProxySQL会根据server的read_only的取值将服务器进行分组。
    read_only=0的server,master被分到编号为10的写组,
    read_only=1的server,slave则被分到编号20的读组。
    所以需要将从库设置:set global read_only=1;


11.3. 添加主机到ProxySQL
insert into mysql_servers(hostgroup_id,hostname,port) values (10,'10.0.0.51',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'10.0.0.52',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'10.0.0.53',3306);


db01 [main]>select * from mysql_servers;
+--------------+-----------+------+-----------+--------+--------+-----------------+
| hostgroup_id | hostname  | port | gtid_port | status | weight | max_connections |
+--------------+-----------+------+-----------+--------+--------+-----------------+
| 10           | 10.0.0.51 | 3306 | 0         | ONLINE | 1      | 1000            |
| 20           | 10.0.0.52 | 3306 | 0         | ONLINE | 1      | 1000            |
| 20           | 10.0.0.53 | 3306 | 0         | ONLINE | 1      | 1000            |
+--------------+-----------+------+-----------+--------+--------+-----------------+


load mysql servers to runtime;
save mysql servers to disk;

11.4. 创建监控用户,并开启监控

1)# 51主库创建监控用户,给ProxySQL连接。
create user monitor@'%' identified with mysql_native_password  by '123';
grant replication client on *.* to monitor@'%';


# proxySQL库修改variables表,让proxySQL可以通过monitor用户和123密码去连接和监控数据库
set mysql-monitor_username='monitor';
set mysql-monitor_password='123';

或者 : 
UPDATE global_variables SET variable_value='monitor'
WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='123'
WHERE variable_name='mysql-monitor_password';

 
load mysql variables to runtime;
save mysql variables to disk;

2)# 查询监控日志
db01 [(none)]>select * from mysql_server_connect_log;
db01 [(none)]>select * from mysql_server_ping_log; 
db01 [(none)]>select * from mysql_server_read_only_log;
db01 [(none)]>select * from mysql_server_replication_lag_log;

3)配置web节点等应用连接ProxySQL的用户 
设定应用连接ProxySQL的用户为root,密码为123

# proxysql代理
insert into mysql_users(username,password,default_hostgroup) values('root','123',10);
load mysql users to runtime;
save mysql users to disk;


# 51主库创建允许proxysql代理访问的用户和密码
create user root@'%' identified with mysql_native_password  by '123';
grant all on *.* to root@'%';

注意;早期版本,需要开启事务持续化。今天版本不需要,只是提及。
update mysql_users set transaction_persistent=1 where username='root';
load mysql users to runtime;
save mysql users to disk;

让事务里的所有SQL都读写同一个库:
begin;
   select
   update
   insert
   delete
commit;


4) 读写规则流程或原理
架构图


5)配置读写规则mysql_query_rules
# ProxySQL
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (1,1,'^select.*for update$',10,1);
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (2,1,'^select',20,1);

load mysql query rules to runtime;
save mysql query rules to disk;

注: select … for update规则的rule_id必须要小于普通的select规则的rule_id,
ProxySQL是根据rule_id的顺序进行规则匹配。 

6. 模拟web测试读写分离
成功:
[root@db01 /usr/local/bin]# mysql -uroot -p123  -P6033 -h 127.0.0.1 -e "select @@server_id;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+
| @@server_id |
+-------------+
|          51 |
+-------------+
[root@db01 /usr/local/bin]# mysql -uroot -p123  -P6033 -h 127.0.0.1 -e "select @@server_id;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+
| @@server_id |
+-------------+
|          52 |
+-------------+
[root@db01 /usr/local/bin]# mysql -uroot -p123  -P6033 -h 127.0.0.1 -e "select @@server_id;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+
| @@server_id |
+-------------+
|          53 |
+-------------+


[root@db01 ~]#  mysql -uroot -p123  -P6033 -h 127.0.0.1 -e "begin;select @@server_id;commit;"
遇到问题:上面语句可以访问到51,52,53,原因:
db01 [main]>select * from mysql_servers;
+--------------+-----------+------+-----------+--------+-------------------------+
| hostgroup_id | hostname  | port | gtid_port | status | weight  max_connections |
+--------------+-----------+------+-----------+--------+-------------------------+
| 10           | 10.0.0.51 | 3306 | 0         | ONLINE | 1       1000            |
| 20           | 10.0.0.51 | 3306 | 0         | ONLINE | 1       1000            |
| 20           | 10.0.0.53 | 3306 | 0         | ONLINE | 1       1000            |
| 10           | 10.0.0.52 | 3306 | 0         | ONLINE | 1       1000            |
| 10           | 10.0.0.53 | 3306 | 0         | ONLINE | 1       1000            |
| 20           | 10.0.0.52 | 3306 | 0         | ONLINE | 1       1000            |
+--------------+-----------+------+-----------+--------+-------------------------+
从上面那内容可以发现,所有节点都在写组10里,所有节点都在读组20里。

最终罪魁祸首,没有在从库配置read_only=1;临时设置如下;
52/53上配置;
set global read_only=1;       ##普通用户只读。
set global super_read_only=1; ##管理员用户只读。


返回:proxysql查看,立刻发生吧变化
db01 [main]>select * from mysql_servers;
+--------------+-----------+------+-----------+--------+--------+---------+
| hostgroup_id | hostname  | port | gtid_port | status | weight | comment |
+--------------+-----------+------+-----------+--------+--------+---------+
| 10           | 10.0.0.51 | 3306 | 0         | ONLINE | 1      |         |
| 20           | 10.0.0.51 | 3306 | 0         | ONLINE | 1      |         |
| 20           | 10.0.0.53 | 3306 | 0         | ONLINE | 1      |         |
| 20           | 10.0.0.52 | 3306 | 0         | ONLINE | 1      |         |
+--------------+-----------+------+-----------+--------+--------+---------+
10是写组有51,20是读组,有51,52,53.

[root@db01 ~]#  mysql -uroot -p123  -P 6033 -h 127.0.0.1 -e "select @@server_id;"
db01 [(none)]>select * from stats_mysql_query_digest\G


给开发人员:
root 123
6033
10.0.0.51
自动实现读写分离,根据语句过滤select读,其他写.

8.  ProxySQL应用扩展——花式路由规则
1. 基于端口实现读写分离
## 修改ProxySQL监听SQL流量的端口号,监听多端口上。
set mysql-interfaces='0.0.0.0:6033;0.0.0.0:6034';
save mysql variables to disk;
## 重启生效
systemctl restart proxysql

## 设定路由规则
delete from mysql_query_rules;      # 为了测试,先清空已有规则

insert into mysql_query_rules(rule_id,active,proxy_port,destination_hostgroup,apply) 
values(1,1,6033,10,1), (2,1,6034,20,1);

load mysql query rules to runtime;
save mysql query rules to disk;

说明:    除了基于端口进行分离,还可以基于监听地址(修改字段proxy_addr即可),也可以基于客户端地址(修改字段client_addr字段即可)。
给开发人员:
写:
root
123
6033
10.0.0.51


root
123
6034
10.0.0.51


2. 基于用户实现读写分离
insert into mysql_users(username,password,default_hostgroup) 
values('writer','123',10),('reader','123',20);
load mysql users to runtime;
save mysql users to disk;

delete from mysql_query_rules;      # 为了测试,先清空已有规则

insert into mysql_query_rules(rule_id,active,username,destination_hostgroup,apply) 
values(1,1,'writer',10,1),(2,1,'reader',20,1);

load mysql query rules to runtime;
save mysql query rules to disk;

#最后在主库创建writer,reader用户和密码。

作业:实践基于端口和基于用户实现读写分离。


给开发人员:
写:
writer
123
6033
10.0.0.51

读:
reader
123
6033
10.0.0.51

相关文章:

MySQL读写分离中间件

1.什么是读写分离中间件? 就是实现当[写]的时候转发到主库,当[读]的时候转发到从库的工具。 很类似学习过的proxy,比如nginx proxy做动静分离. 2.为什么要实现读写分离? 1)让主库专注于写,因为读可以有很多从库可以干…...

【Spring源码设计模式】单例模式外带设计模式的单例模式

Bean的概念 是Spring框架在运行时管理的对象,是任何引用程序的基本构建块。 Bean的属性 id属性:Bean的唯一标志名,必须以字母开头且不包含特殊字符 class属性:用来定义类的全限定名(包名 类名) name属性…...

go并发编程 —— singleflight设计模式

什么是singleflight singleflight是一种并发编程设计模式,将同一时刻的多个并发请求合并成一个请求,以减少对下游服务的压力 为什么叫singleflight fly可以理解为请求数,singleflight就是单个请求 使用场景 该模式主要用于防止缓存击穿 …...

【LeetCode】二叉树的中序遍历(递归,迭代,Morris遍历)

目录 题目要求:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 方法一:递归 方法二:迭代 思路分析: 复杂度分析 代码展示: 方法三:Morris 遍历 思路分析: 复杂度分析…...

银行数字化转型导师坚鹏:数字化转型背景下的银行柜员提升之道

数字化转型背景下的银行柜员提升之道 课程背景: 很多银行都在开展银行数字化运营工作,目前存在以下问题急需解决: l 不清楚银行数字化运营包括哪些关键工作? l 不清楚银行数字化运营工作的核心方法论? l 不清楚银行数字…...

ChatGPT的平替来了?一文总结 ChatGPT 的开源平替,你值得拥有

文章目录【AIGC精选】总结 ChatGPT 的开源平替,你值得拥有1.斯坦福发布 Alpaca 7B,性能匹敌 GPT-3.52.弥补斯坦福 Alpaca 中文短板,中文大模型 BELLE 开源3.国产AI大模型 ChatGLM-6B 开启内测4.中文 Alpaca 模型 Luotuo 开源5. ChatGPT 最强竞…...

关于数据同步工具DataX部署

1.DataX简介 1.1 DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址:GitHub - alibaba/DataX: DataX是…...

如何开发JetBrains插件

1 标题安装 IntelliJ IDEA 如果您还没有安装 IntelliJ IDEA,从官方网站下载并安装 IntelliJ IDEA Community Edition(免费)或 Ultimate Edition(付费)。 2 创建插件项目 在 IntelliJ IDEA 中,创建一个新…...

企业采购成本管理的难题及解决方案

企业采购成本控制是企业管理中的一个重要方面,也是一个不容易解决的难题。企业采购成本控制面临的难题包括以下几个方面: 1、采购流程复杂 企业采购通常需要经过一系列的流程,包括采购计划、采购申请、报价、比价、议标、合同签订、验收、付…...

龙蜥白皮书精选:基于 SM4 算法的文件加密(fscrypt)实践

文/张天佳 通常我们会以文件作为数据载体,使用磁盘,USB 闪存,SD 卡等存储介质进行数据存储,即便数据已经离线存储,仍然不能保证该存储介质不会丢失,如果丢失那么对于我们来说有可能是灾难性的事件。因此对…...

【SpringBoot入门】SpringBoot的配置

SpringBoot的配置文件一、SpringBoot配置文件分类二、yaml 概述三、多环境配置四、Value 和 ConfigurationProperties五、总结一、SpringBoot配置文件分类 SpringBoot 是基于约定的,很多配置都是默认的(主方法上SpringBootApplication注解的子注解Enabl…...

react 学习整理

如何使用引号传递字符串 常见的 <imgclassName avatersrc http://...alt gregorio y />或者声明变量来保存 export default function XXX(){ const avator avator const description gergorio y return (<image className XXXsrc {avator}alt {alt} />)…...

物理引擎系统-ode

物理引擎系统-ode 目录 物理引擎系统-ode 一、物理引擎系统-ode——processIslands 二、物理引擎系统-ode——processIslands 三、物理引擎系统-ode——processIslands 四、物理引擎系统-ode——processIslands 五、物理引擎系统-ode——processIslands 一、物理引…...

函数设计—参数规则

【规则1-1】参数的书写要完整&#xff0c;不要贪图省事只写参数的类型而省略参数名字。 如果函数没有参数&#xff0c;则用 void 填充。 例如&#xff1a; void SetValue(int width, int height); // 良好的风格 void SetValue(int, int); // 不良的风格 float GetValue(…...

rsync远程同步

目录 rsync rsync简介 rsync优点 同步方式 rsync名词解释 rsync工作原理 常用rsync命令 配置源的两种表达方法 远程同步实操 如何不想每次登录的时候输入密码 同步删除文件 定时完成操作 格式二 指定资源下载到/opt进行备份 通过信道协议同步数据​编辑​编辑 rs…...

中国大陆IP段(仅大陆地区)【2020-07-24】

中国大陆IP段&#xff08;仅大陆地区&#xff09;【2020-07-24】 1.1.8.0/24 1.2.4.0/24 1.8.1.0/24 1.8.8.0/24 1.18.128.0/24 1.24.0.0/13 1.45.0.0/16 1.48.0.0/14 1.56.0.0/13 1.68.0.0/14 1.80.0.0/13 1.88.0.0/14 1.92.0.0/20 1.93.0.0/16 1.94.0.0/15 1.119.0.0/17 1.11…...

从零开始的嵌入式Linux生活(一) 背景介绍

文章目录前言本系列文章的主要思想&#xff1a;本系列文章包括&#xff1a;一、什么是嵌入式开发二.嵌入式开发 - 由便宜到贵三.嵌入式开发的基本原理一个美好的假设&#xff1a;再来一个美好的假设美好的假设被打破了 - RTOS系统美好的假设又被打破了 - 嵌入式Linux系统老板飘…...

后缀为whl的文件是什么?如何安装whl文件?学习一下(22)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 欢迎和猫妹一起&#xff0c;趣味学Python。 今日主题 了解并使用Pyhton的库安装包文件whl。 什么是whl文件 whl格式本质上是一个压缩包&#xff0c;里面包含了py文件&am…...

整合Juit

整合Juit 1.SpringBoot整合Juit SpringBootTest class Springboot04JuitApplicationTests {AutowiredBookDao bookDao;Testvoid contextLoads() {System.out.println("test................");bookDao.save();} ​ }  名称&#xff1a;SpringBootTest  类型&…...

C#,码海拾贝(11)——拉格朗日(Lagrange)三点式曲面插值算法,《C#数值计算算法编程》源代码升级改进版

本文开始是曲面插值&#xff08;Surface Interpolation&#xff0c;也称作&#xff1a;二维插值&#xff0c;二元插值&#xff09;。 数值计算三点式 数值计算三点式是一种常见的数值计算方法&#xff0c;它是通过对已知函数在某个点及其左右两个点处的函数值进行数值插值&…...

CentOS7系统安装MySQL 5.7

目录一、官网下载mysql5.7二、检查mysql依赖环境三、安装MySQL 5.7.281.将安装程序拷贝到/opt目录下2.安装四个安装包3.查看mysql版本4.服务的初始化5.启动mysql&#xff0c;并查看状态(加不加.service后缀都可以)6.查看mysql服务是否自启动&#xff08;默认自启动&#xff09;…...

基于粒子群算法优化BP神经网络的高炉si预测,PSO-BP

目录 摘要 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 粒子群算法的原理及步骤 基于粒子群算法改进优化BP神经网络的用电量预测 代码 效果图 结果分析 展望 参考 摘要 一般用启发式算法改进B…...

STM32输出PWM波控制电机转速,红外循迹避障智能车+L298N的详细使用手册、接线方法及工作原理,有代码

智能循迹红外避障小车 本设计的完整的系统主要包括STM32单片机最小系统、L298n电机驱动&#xff0c;超声波 &#xff0c;舵机 &#xff0c;红外模块等。寻迹小车相信大家都已经耳熟能祥了。 我们在这里主要讲一下L298N驱动电机和单片机输出PWM控制电机转速。 本设计软件系统采…...

3、AI的道德性测试

AI的道德性 AI系统的道德性如何保障是一个重要而复杂的问题,涉及到人工智能的发展、应用、监管、伦理、法律等多个方面。保障AI系统的道德性是一个很重要的问题,因为AI系统不仅会影响人类的生活和工作,也会涉及人类的价值观和伦理道德原则。针对这部分,也需要测试AI系统是…...

银行数字化转型导师坚鹏:银行业务需求分析师技能快速提升之道

银行业务需求分析师技能快速提升之道 ——以推动银行战略目标实现为核心&#xff0c;实现知行果合一课程背景&#xff1a; 很多银行都在开展业务需求分析工作&#xff0c;目前存在以下问题急需解决&#xff1a;不知道银行业务需求分析师掌握哪些关键知识&#xff1f;不清楚…...

C++IO流

文章目录一、CIO流体系二、C标准IO流三、C文件IO流1.ifstream2.ofstream一、CIO流体系 C流是指信息从外部输入设备向计算机内部输入&#xff0c;从内存向外部输出设备输出的过程&#xff0c;这种输入输出的过程非常形象地被称为流的概念。IO流指的就是输入输出流。 我们平时对…...

交友项目【后端环境搭建】

目录 1&#xff1a;环境搭建 1.1&#xff1a;MYSQL数据库 1.1.1&#xff1a;导入相应的sql 1.2&#xff1a;Linux中的docker-compose方法集中部署 1.2.1&#xff1a;介绍 1.3&#xff1a;IDEA设置 1.3.1&#xff1a;基本要求 1.3.2&#xff1a;设置项目编码格式 1.3.3&…...

大事务问题解决方案

文章目录 大事务引发的问题解决办法少用@Transactional注解将查询(select)方法放到事务外事务中避免远程调用事务中避免一次性处理太多数据非事务执行异步处理总结大事务引发的问题 1、死锁 2、回滚时间长 3、并发情况下数据库连接池被占满 4、锁等待 5、接口超时 6、数据库主…...

python开启局域网传输

python开启局域网传输 1.找自己的IP 在命令提示窗口输入&#xff1a;ipconfig <----找自己的IP地址 2.创建要传输文件的文件夹&#xff08;只允许在该文件夹下访问传输&#xff09; a.复制文件夹路径 b.在命令提示窗口cd打开新创建的文件夹 cd “C:\Users\86151\Desktop…...

病毒丨熊猫烧香病毒分析

作者丨黑蛋 一、病毒简介 病毒名称&#xff1a; 熊猫烧香 文件名称&#xff1a; 40fee2a4be91d9d46cc133328ed41a3bdf9099be5084efbc95c8d0535ecee496 文件格式&#xff1a; EXEx86 文件类型(Magic)&#xff1a; MS-DOS executable 文件大小&#xff1a; 29.30KB SHA256&…...