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

Linux运维:MySQL中间件代理服务器,mycat读写分离应用实验

Mycat适用的场景很丰富,以下是几个典型的应用场景:

1.单纯的读写分离,此时配置最为简单,支持读写分离,主从切换

2.分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片

3.多租户应用,每个应用一个库,但应用程序只连接mycat,从而不改造高程序本身,实现多租户化报表系统,借助于mycat的分表能力,处理大规模报表的统计。

4.替代hbash,分析大数据,作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时mycat可能是最简单有效的选择。

mycat长期路线图:

强化分布式数据库中间件的方面的功能,使之具备丰富的插件、强大的数据库只能优化功能、全面的系统监控能力、以及方便的数据运维工具,实现在线数据扩容、迁移等高级功能进一步挺进大数据计算领域,深度结合spark stream和storm等分布式实时流引擎,能够完成快速的巨表关联、排序、分组聚合等OLAP方向的能力,并集成一些热门常用的实时分析算法,让工程师以及DBA们更容易用mycat实现一些高级数据分析处理功能不断强化Mycat开源社区的技术水平,吸引更多的IT技术专家,使得Mycat社区成为中国的Apache,并将mycat推到Apache基金会,称为国内顶尖开源项目,最终能够让一部分志愿者成为专职的mycat开发者。

mycat可以简单概括为:

一个彻底开源的,面向企业应用开发的大数据集群。

支持事务、ACID、可以替代mysql的加强版数据库

一个可以视为mysql集群的企业级数据库,用来替代昂贵的oracle集群

一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server

结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

一个新颖的数据库中间件产品

mycat部署:

mycat安装目录结构说明:

bin:mycat命令,启动,重启,停止等运行目录

catlet:catlet为mycat的一个扩展功能

conf:mycat配置信息

lib:mycat引用的jar包,mycat是java开发的

logs:日志文件,包括mycat启动的日志和运行的日志

version.txt:mycat版本说明

mycat的常用配置文件:

mycat的配置文件都在conf目录里面,介绍以下几个常用的文件:

server.xml:mycat软件本身相关的配置文件,设置账号,参数等

schema.xml:mycat对应的物理数据库和数据库表的配置,读写分离,高可用,分布式策略定制,节点控制

rule.xml:mycat分片(分库分表)规则配置文件,记录分片规则列表,使用方法等

mycat日志:

mycat的日志文件都在logs目录里面*

wrapper.log:mycat启动日志

mycatl.log:mycat详细工作日志

mycat的读写分离实验

1. 环境准备及架构

mycat服务器上不能装mysql。客户端与mysql主从服务器安装mysql:

主机Node1作为客户端

主机Node2作为mycat服务器,不能装MySQL

主机Node3作为mysql主服务器

主机Node4作为mysql从服务器

客户端登录mycat访问的是mycat服务器,通过mycat服务器后台调取mysql服务器的数据。主记录写数据,从记录读数据。

架构如图:

2. 初始化环境

systemctl stop firewalld #防火墙

setenforce 0 #核心防护

3. 部署主从复制,客户端搭建mysql数据库

Node3主,Node4从。Node1客户端

数据库的安装参考我前面的博客,这里在数据库安装完成的前提下只做主从复制:数据库的安装(与主从复制原理与实现)

Node3开启二进制日志:

[root@Node3 ~]#:vim /etc/my.cnf
......
server-id=30
log-bin=/data/mysql/mysql-bin
#创建路径
[root@Node3 ~]#:mkdir /data/mysql -p
#修改权限
[root@Node3 ~]#:chown -R mysql.mysql /data
#重启
[root@Node3 ~]#:systemctl restart mysqld
[root@Node3 ~]#:systemctl status mysqld
● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: active (running) since 三 2024-07-10 15:10:33 CST; 6s agoDocs: man:mysqld(8)
......

Node4开启二进制日志:

 同理,与Node3一样,只需要修改一个server-id

[root@Node4 ~]#:vim /etc/my.cnf
server-id=40
log-bin=/data/mysql/mysql-bin
#创建路径
[root@Node4 ~]#:mkdir /data/mysql -p
#修改权限
[root@Node4 ~]#:chown -R mysql.mysql /data
#重启,查看状态
[root@Node4 ~]#:systemctl restart mysqld
[root@Node4 ~]#:systemctl status mysqld
● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: active (running) since 三 2024-07-10 15:14:02 CST; 11s agoDocs: man:mysqld(8)
......

Node3操作:登录数据库,查看节点,添加一个用户test并授权:

[root@Node3 ~]#:mysql -uroot -pabc123    #用户名和密码(可以不遵守密码策略!但要现修改密码策略)
......
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> grant replication slave on *.* to test@'192.168.114.%' identified by 'Admin@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

Node4操作:作为从,指定主服务器:

[root@Node4 ~]#:mysql -uroot -pabc123
mysql> CHANGE MASTER TO->  MASTER_HOST='192.168.114.30',->  MASTER_USER='test',->  MASTER_PASSWORD='Admin@123',->  MASTER_PORT=3306,->  MASTER_LOG_FILE='mysql-bin.000001',->  MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)#启动
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)#查看状态,两个线程yes。
mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.114.30Master_User: testMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 449Relay_Log_File: Node4-relay-bin.000002Relay_Log_Pos: 615Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes
......

测试主从:

把一个准备好的数据库文件导入到Node3主服务器中,看从服务器是否同步!

[root@Node3 ~]#:mysql -uroot -pabc123 -e "show databases"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
[root@Node3 ~]#:mysql -uroot -pabc123 < hellodb_innodb.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@Node3 ~]#:mysql -uroot -pabc123 -e "show databases"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

主上有了hellodb数据库文件:

查看从是否同步:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)#查看一个数据表teachers
mysql> select * from hellodb.teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
+-----+---------------+-----+--------+#从上也同步了主上创建的test用户
mysql> select user,host from mysql.user;
+---------------+---------------+
| user          | host          |
+---------------+---------------+
| test          | 192.168.114.% |
| mysql.session | localhost     |
| mysql.sys     | localhost     |
| root          | localhost     |
+---------------+---------------+
4 rows in set (0.00 sec)

已同步!

4. 安装mycat

Node2

准备一个mycat安装包。在我的/data/下,这个是自己建的一个目录。

创建一个目录/apps/解压到该目录下:

[root@Node2 data]#:mkdir /apps
[root@Node2 data]#:tar xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
[root@Node2 data]#:cd /apps/
[root@Node2 apps]#:ls
mycat
#添加环境变量,也可以做软链接。目的是能够补全命令,而不必使用绝对路径
[root@Node2 apps]#:echo "PATH=/apps/mycat/bin:$PATH" > /etc/profile.d/mycat.sh
[root@Node2 apps]#:source /etc/profile.d/mycat.sh

启动mycat:

[root@Node2 apps]#:mycat
#只有以下参数
Usage: /apps/mycat/bin/mycat { console | start | stop | restart | status | dump }
[root@Node2 apps]#:mycat start
Starting Mycat-server...
#查看状态:
[root@Node2 apps]#:mycat status
Mycat-server is running (8372).
is running启动起来了

mycat安装成功!成功启动!

使用客户端Node1登录mycat测试:

-u用户名

-p密码,默认123456

-h主机,是Node2,我的ip为192.168.114.20

-P端口号,默认8066

[root@Node1 ~]#:mysql -uroot -p123456 -h192.168.114.20 -P8066
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6.7.4-release-20200105164103 MyCat Server (OpenCloudDB)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.00 sec)mysql> 

 TESTDB虚表。客户端访问mycat是虚表。

5. 修改mycat配置文件使其与后端mysql主从服务器联系

进入/apps/mycat/conf/下。配置文件,修改server.xml文件,45行取消注释,修改一个端口号为3306,客户端不用指定8066端口号了,直接指定用户,密码,主机即可。

[root@Node2 apps]#:cd /apps/mycat/conf/
[root@Node2 conf]#:vim server.xml
......
<property name="serverPort">3306</property> <property name="managerPort">9066</property> 
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="dataNodeIdleCheckPeriod">300000</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property>
......

修改schema配置参数,文件清空,把下面配置复制进去,注意修改IP地址:

[root@Node2 conf]#:vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema><dataNode name="dn1" dataHost="localhost1" database="hellodb" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="host1" url="192.168.114.30:3306" user="root" password="Admin@123"><readHost host="host2" url="192.168.114.40:3306" user="root" password="Admin@123"/></writeHost></dataHost>
</mycat:schema>

解释:

#dataNode:表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的name

#dataNode标签: 定义mycat中的数据节点,也是通常说的数据分片,也就是分库相关配置

#database: 物理数据库中数据库名,该属性用于定义该分片属性哪个具体数据库实例上的具体库

#balance: 均衡负载的方式

#writeType: 写入方式

#host:用于标识不同实例,一般 writeHost 我们使用*M1,readHost 我们用*S1。
#url:后端实例连接地址。Native:地址:端口 JDBC:jdbc的url
#user:后端存储实例需要的用户名字
#password:后端存储实例需要的密码

重启并查看状态:会先开一下,如果有问题,还会再关闭,可以多看一下是否真正的起来

[root@Node2 conf]#:mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
[root@Node2 conf]#:mycat status
Mycat-server is running (8863).
[root@Node2 conf]#:mycat status
Mycat-server is running (8863).
[root@Node2 conf]#:mycat status
Mycat-server is running (8863).

6. 主从服务器创建一个root用户给mycat连接并授权

在主上创建好一个root用户后,从服务器也就同步了。

[root@Node3 ~]#:mysql -uroot -pabc123
......
mysql> GRANT ALL ON *.* TO 'root'@'192.168.114.%' IDENTIFIED BY 'Admin@123';
Query OK, 0 rows affected, 1 warning (0.01 sec)

在从上查看用户:同步过来了

[root@Node4 ~]#:mysql -uroot -pabc123
......
mysql> select user,host from mysql.user;
+---------------+---------------+
| user          | host          |
+---------------+---------------+
| root          | 192.168.114.% |
| test          | 192.168.114.% |
| mysql.session | localhost     |
| mysql.sys     | localhost     |
| root          | localhost     |
+---------------+---------------+
5 rows in set (0.01 sec)

主从两台服务器开启通用日志:都需要开通:

mysql> set global general_log=1;
Query OK, 0 rows affected (0.00 sec)

7. 测试读写分离

两台服务器实时(tail -f 日志文件)检测日志文件,在/var/lib/mysql/下有一个与主机名同名的日志文件:

主:Node3.log

从:Node4.log

监控:主服务器监控写操作,从服务器监控读操作:在主从服务器上实时查看通用日志

使用Node1客户端访问mycat,插入一条数据到表teachers。再查看表数据。观察主从的日志变化,是否在主上能看得到写操作,在从上能看得到读的操作。进而实现读写分离试验。

客户端登录mycat服务器:不需要端口号了

[root@Node1 ~]#:mysql -uroot -p123456 -h192.168.114.20
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 73
Server version: 5.6.29-mycat-1.6.7.4-release-20200105164103 MyCat Server (OpenCloudDB)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

客户端登录mycat,进入数据库TESTDB:查看teachers表,查看表结构,插入数据,再查看数据

[root@Node1 ~]#:mysql -uroot -p123456 -h192.168.114.20
......
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.00 sec)
#进入数据库
mysql> use TESTDB
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
#查看数据
mysql> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
+-----+---------------+-----+--------+
4 rows in set (0.01 sec)
#查看结构
mysql> desc teachers;
+--------+----------------------+------+-----+---------+----------------+
| Field  | Type                 | Null | Key | Default | Extra          |
+--------+----------------------+------+-----+---------+----------------+
| TID    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(100)         | NO   |     | NULL    |                |
| Age    | tinyint(3) unsigned  | NO   |     | NULL    |                |
| Gender | enum('F','M')        | YES  |     | NULL    |                |
+--------+----------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
#插入数据
mysql> insert into teachers values(5,'zs',18,'M');
Query OK, 1 row affected (0.03 sec)
mysql> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | zs            |  18 | M      |
+-----+---------------+-----+--------+
5 rows in set (0.00 sec)

查看主从日志:

主服务器日志:写入操作:

[root@Node3 ~]#:tail -f /var/lib/mysql/Node3.log

 从服务器日志:读取操作:

 [root@Node4 ~]#:tail -f /var/lib/mysql/Node4.log

实现了mycat读写分离!

---end---

相关文章:

Linux运维:MySQL中间件代理服务器,mycat读写分离应用实验

Mycat适用的场景很丰富&#xff0c;以下是几个典型的应用场景&#xff1a; 1.单纯的读写分离&#xff0c;此时配置最为简单&#xff0c;支持读写分离&#xff0c;主从切换 2.分表分库&#xff0c;对于超过1000万的表进行分片&#xff0c;最大支持1000亿的单表分片 3.多租户应…...

css文字自适应宽度动态出现省略号...

前言 在列表排行榜中通常会出现的一个需求&#xff1a;从左到右依次是名次、头像、昵称、徽标、分数。徽标可能会有多个或者没有徽标&#xff0c;徽标长度是动态的&#xff0c;昵称如果过长要随着有无徽标进行动态截断出现省略号。如下图布局所示&#xff08;花里胡哨的底色是…...

边缘计算盒子_B100_Jetson Nano (aarch64)开发环境搭建

目录 一、刷机步骤1、搭建刷机环境2、进入刷机模式3、开始刷机 二、系统迁移到TF卡 或者 U盘1、迁移脚本2、提前插入U盘或者TF卡3、 开始迁移 三、搭建miniconda 环境1、下载安装 四、jetpack开发套件环境1、版本查看2、apt 更换国内源3、安装Jetson-stats管理工具 一、刷机步骤…...

【Superset】dashboard 自定义URL

URL设置 在发布仪表盘&#xff08;dashboard&#xff09;后&#xff0c;可以通过修改看板属性中的SLUG等&#xff0c;生成url 举例&#xff1a; http://localhost:8090/superset/dashboard/test/ 参数设置 以下 URL 参数可用于修改仪表板的呈现方式&#xff1a;此处参考了官…...

【Linux网络】IP协议{初识/报头/分片/网段划分/子网掩码/私网公网IP/认识网络世界/路由表}

文章目录 1.入门了解2.认识报头3.认识网段4.路由跳转相关指令路由 该文诸多理解参考文章&#xff1a;好文&#xff01; 1.入门了解 用户需求&#xff1a;将我的数据可靠的跨网络从A主机送到B主机 传输层TCP&#xff1a;由各种方法&#xff08;流量控制/超时重传/滑动窗口/拥塞…...

香蕉派BPI-Wifi6迷你路由器公开发售

Banana Pi BPI-Wifi6 Mini 公开发售。 Banana Pi BPI-Wifi6 Mini 开源路由器采用Triductor TR6560 TR5220 wifi SOC设计&#xff0c;是一款迷你尺寸的wifi6路由器解决方案。内置高性能双核ARM Cortec A9处理器用于WIFI报文转发或智能业务处理&#xff0c;内置高性能LSW和硬件N…...

WPF-控件样式设置

1、控件样式设置 1.1、内嵌式为相同控件设置样式 <Window.Resources><Style TargetType"Button"><Setter Property"Background" Value"Yellow"></Setter><Setter Property"Width" Value"60"&g…...

C++20中的指定初始化器(designated initializers)

指定初始化器(designated initializers, 指定初始值设定项)语法如下&#xff1a;C风格指定初始化器语法&#xff0c;初始化数据成员的一种便捷方式 T object { .des1 arg1, .des2 { arg2 } ... }; T object { .des1 arg1, .des2 { arg2 } ... }; 说明&#xff1a; 1.每个指…...

QT跨平台开发(windows、mac)中.pro文件设置

方法一&#xff1a; 在配置前面加上平台标识符的前缀 # windows win32:INCLUDEPATH F:/Dev/ffmpeg-4.3.2/include win32:LIBS -LF:/Dev/ffmpeg-4.3.2/lib \-lavcodec \-lavdevice \-lavfilter \-lavformat \-lavutil \-lpostproc \-lswscale \-lswresample# mac macx:INCLUD…...

wifi中的stream parser

在Wi-Fi系统中&#xff0c;流解析器&#xff08;Stream Parser&#xff09;的主要功能是将传输的数据流&#xff08;bit stream&#xff09;按照物理层&#xff08;PHY&#xff09;和媒体访问控制层&#xff08;MAC&#xff09;协议的要求进行分解和处理。这一步骤对于确保数据…...

GitHub网页打开慢的解决办法

有时候看资料絮叨github网页打不开&#xff0c;经百度后&#xff0c;发下下面的方法有效。 1&#xff09;获取github官网ip 我们首先要获取github官网的ip地址&#xff0c;方法就是打开cmd&#xff0c;然后ping 找到github的地址&#xff1a;20.205.243.166 2&#xff09;配…...

前端vue 实现取色板 的选择

大概就是这样的 一般的web端框架 都有自带的 的 比如 ant-design t-design 等 前端框架 都是带有这个的 如果遇到没有的我们可以自己尝试开发一下 简单 的 肯定比不上人家的 但是能用 能看 说的过去 我直接上代码了 其实这个取色板 就是一个input type 是color 的input …...

[leetcode]partition-list 分隔链表

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:ListNode* partition(ListNode* head, int x) {ListNode *smlDummy new ListNode(0), *bigDummy new ListNode(0);ListNode *sml smlDummy, *big bigDummy;while (head ! nullptr) {if (head->val &l…...

Apache功能配置:访问控制、日志分割; 部署AWStats日志分析工具

目录 保持连接 访问控制 只允许指定ip访问 拒绝指定主机其他正常访问 用户授权 日志格式 日志分割 操作步骤 使用第三方工具cronolog分割日志 AWStats日志分析 操作步骤 访问AwStats分析系统 保持连接 Apache通过设置配置文件httpd-default.conf中相关的连接保持参…...

开源可视化Flutter图表库:Graphic

Graphic&#xff1a;用Graphic绘制数据的无限可能- 精选真开源&#xff0c;释放新价值。 概览 Graphic&#xff0c;这个基于Flutter的图表库&#xff0c;以其源自《The Grammar of Graphics》的灵感&#xff0c;为数据可视化提供了一种全新的方法。它不仅仅是一个工具&#xf…...

Linux搭建Socks5网络代理服务器,Centos 8 系统

一、目的用途 用于网络代理转发请求&#xff0c;隐藏真实的请求ip地址&#xff0c;或者用于绕过网络限制的目标服务器&#xff0c;将自己的访问请求到代理服务器&#xff0c;通过网络代理服务器将请求转发到目标服务器 二、安装Socks5前的准备 1、从官网下载ss5安装包&#xf…...

mysql 导出导入 数据库

导出 MySQL 数据库可以通过多种方法实现&#xff0c;最常见的方法是使用 mysqldump 工具。以下是一些常用的导出 MySQL 数据库的方法&#xff1a; 使用 mysqldump 工具 mysqldump 是一个命令行工具&#xff0c;用于导出 MySQL 数据库的结构和数据。以下是基本的导出命令&…...

linux_进程概念——理解冯诺依曼体系结构

前言&#xff1a; 本篇内容是为了让友友们较好地理解进程的概念&#xff0c; 而在真正了解进行概念之前&#xff0c; 要先了解一下冯诺依曼体系结构。 所以博主会先对冯诺伊曼体系结构进行解释&#xff0c; 然后再讲解进程的概念。 ps&#xff1a; 本篇内容适合了解一些linux指…...

Linux笔记之使用系统调用sendfile高速拷贝文件

Linux笔记之使用系统调用sendfile高速拷贝文件 code review! 文章目录 Linux笔记之使用系统调用sendfile高速拷贝文件sendfile 性能优势sendfile 系统调用优点&#xff1a;缺点&#xff1a; cp 命令优点&#xff1a;缺点&#xff1a; 实际测试&#xff1a;拷贝5.8个G的文件&a…...

OpenCV和PIL进行前景提取

摘要 在图像处理和分析中&#xff0c;前景提取是一项关键技术&#xff0c;尤其是在计算机视觉和模式识别领域。本文介绍了一种结合OpenCV和PIL库的方法&#xff0c;实现在批量处理图像时有效提取前景并保留原始图像的EXIF数据。具体步骤包括从指定文件夹中读取图像&#xff0c…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点&#xff1a; 共 6 个字段&#xff1a; Year&#xff08;年&#xff09;Month&#xff08;月&#xff09;Day&#xff08;日&#xff09;Hour&#xff08;小时&#xff09;Minute&#xff08;分钟&#xff09;Second&#xff08;秒&#xff09; 表示…...