mycat介绍与操作步骤

news2025/1/11 16:48:55

文章目录

    • 1.分库分表
    • 2.mycat 入门
      • 2.1 概述
      • 2.2 案例:水平分表
        • 1)准备工作
        • 2)配置
        • 3)启动并测试
    • 3.mycat 配置详解
      • 3.1 schema.xml
      • 3.2 rule.xml
      • 3.3 server.xml
    • 4.mycat 分片:垂直拆分
      • 1)准备工作
      • 2)配置
      • 3)启动并测试
      • 4)全局表
    • 5.mycat 分片:水平拆分
    • 6.mycat 管理和监控
      • 6.1 9066管理端口
      • 6.2 mycat-web
    • 7.mycat 读写分离
      • 7.1 一主一从
      • 7.2 双主双从

1.分库分表

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

分库分表带来的问题

在这里插入图片描述

2.mycat 入门

2.1 概述

官网:http://www.mycat.org.cn/

在这里插入图片描述

在这里插入图片描述

注:先安装JDK,再解压mycat即可

在这里插入图片描述

在这里插入图片描述

注:lib中有mysql的jar包,需要根据mysql的版本进行更换

在这里插入图片描述

注:mycat在逻辑上进行分片处理,并不储存真正的数据

2.2 案例:水平分表

在这里插入图片描述

在这里插入图片描述

1)准备工作

准备三台mysql服务器,并创建同名的数据库,只建库,不要建表

在这里插入图片描述

在其中一台服务器上安装mycat(也可以再准备一台虚拟机进行操作)

  • 安装jdk
  • 配置环境变量
  • 解压mycat
2)配置

编辑以下两个配置文件

在这里插入图片描述

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
		<table name="student" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
	</schema>
	<dataNode name="dn1" dataHost="dataHost1" database="testdb" />
	<dataNode name="dn2" dataHost="dataHost2" database="testdb" />
	<dataNode name="dn3" dataHost="dataHost3" database="testdb" />

	<dataHost name="dataHost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc">
		<heartbeat>select user()</heartbeat>
		<writeHost host="master" url="jdbc:mysql://192.168.9.3:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
		</writeHost>
	</dataHost>
	<dataHost name="dataHost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc">
		<heartbeat>select user()</heartbeat>
		<writeHost host="master" url="jdbc:mysql://192.168.9.8:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
		</writeHost>
	</dataHost>
	<dataHost name="dataHost3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc">
		<heartbeat>select user()</heartbeat>
		<writeHost host="master" url="jdbc:mysql://192.168.9.9:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
		</writeHost>
	</dataHost>
</mycat:schema>

在这里插入图片描述

3)启动并测试

配置完毕,启动mycat。启动后,可查看日志

在这里插入图片描述

在这里插入图片描述

连接mycat与连接mysql基本一样

在这里插入图片描述

在这里插入图片描述

# 建表
create table STUDENT (
  id bigint(20) not NULL ,
  name varchar(50) not NULL,
  sex char(1) not NULL,
  primary key (id)
) engine=innodb default charset=utf8;

# 此时分别查看三个真实数据库,会发现已创建好了相同的表结构

插入数据测试

# 插入三条数据
insert into STUDENT (id,name,sex) values(1,'tom','M');
insert into STUDENT (id,name,sex) values(2,'marry','F');
insert into STUDENT (id,name,sex) values(3,'jack','M');

在这里插入图片描述

插入三条数据后分别查看三个真实数据库,发现可能只在其中一个库中插入了数据
这是由 schema.xml 中配置的 rule=“auto-sharding-long” 分片规则决定的
这个分片规则定义在 rule.xml 中,追踪到 autopartition-long.txt 文件

在这里插入图片描述

插入新数据id为 5000001,则会插入到对应的物理数据库中,如果超过1500M后,则会报异常

在这里插入图片描述

3.mycat 配置详解

在这里插入图片描述

3.1 schema.xml

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.2 rule.xml

在这里插入图片描述

3.3 server.xml

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.mycat 分片:垂直拆分

在这里插入图片描述

1)准备工作

在上例的基础上进行配置,在三台mysql服务器上创建同名的数据库 appdb,只建库,不要建表。

数据库表说明:

  • ad_promotion:首页轮播图广告位
  • app_info:app信息
  • app_category:app类别
  • app_version:app版本
  • data_dictionary:数据字典
  • backend_user:后台用户
  • dev_user:开发者用户

2)配置

分片说明

  • 数据节点1:
    • app_info :app信息
    • app_category :app类别
    • app_version :app版本
    • data_dictionary :数据字典
  • 数据节点2:
    • backend_user :后台用户
    • dev_user :开发者用户
  • 数据节点3:
    • ad_promotion :首页轮播图广告位

schema.xml

在这里插入图片描述

在这里插入图片描述

#APPDB表示库名
<schema name="APPDB" checkSQLschema="true" sqlMaxLimit="100">
<table name="app_info" dataNode="dn1" primaryKey='id'/>
<table name="app_category" dataNode="dn1" primaryKey='id'/>
<table name="app_version" dataNode="dn1" primaryKey='id'/>

<table name="data_dictionary" dataNode="dn1" primaryKey='id'/>

<table name="backend_user" dataNode="dn2" primaryKey='id'/>
<table name="dev_user" dataNode="dn2" primaryKey='id'/>

<table name="ad_promotion" dataNode="dn3" primaryKey='id'/>
</schema>
#appdb表示连接的数据库名
<dataNode name="dn1" dataHost="dataHost1" database="appdb" />
<dataNode name="dn2" dataHost="dataHost2" database="appdb" />
<dataNode name="dn3" dataHost="dataHost3" database="appdb" />

server.xml

在这里插入图片描述

<user name="root" defaultAccount="true">
      <property name="password">123456</property>
      <property name="schemas">APPDB</property>
      <!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->

       <!-- 表级 DML 权限设置 -->
       <!--            
       <privileges check="false">
               <schema name="TESTDB" dml="0110" >
                    <table name="tb01" dml="0000"></table>
                     <table name="tb02" dml="1111"></table>
                </schema>
        </privileges>           
                 -->
        </user>

        <user name="user">
                <property name="password">123456</property>
                <property name="schemas">APPDB</property>
                <property name="readOnly">true</property>
        </user>

3)启动并测试

在mycat端,统一用脚本建表、导入数据

如果在虚拟机里执行app_table.sql需要把脚本上传到某个目录下

如:opt目录下

xxx表示脚本目录的地址 如:source /opt/app_table.sql

# 建表
mysql> source /xxx/app_table.sql
# 导入数据
mysql> source /xxx/app_data.sql

测试以下sql语句

# 查询数据字典表
SELECT * FROM DATA_DICTIONARY;

# 连接查询,查询app信息
SELECT a.id,softwareName,APKName,valueName
FROM APP_INFO a
INNER JOIN DATA_DICTIONARY d
ON a.status = d.valueId
WHERE d.typeCode= 'APP_STATUS';

# 连接查询,查询管理员信息,报错截图如下
SELECT u.id,userCode,u.creationDate,valueName
FROM BACKEND_USER u
INNER JOIN DATA_DICTIONARY d
ON u.userType = d.valueId
WHERE d.typeCode= 'USER_TYPE';

在这里插入图片描述

4)全局表

如果连接查询的表处于不同的分片,则会报错

比如数据字典表,其他表可能都会引用它,则应该把它设置为全局表,让它在每个分片上都存在

重新配置后,重启mycat,还需要把物理数据库中的表全部删除,重新执行建库脚本,再进行测试

在这里插入图片描述

编辑 schema.xml

在这里插入图片描述

<table name="data_dictionary" dataNode="dn1,dn2,dn3" primaryKey='id' type="global"/>

注意:

  • 修改 schema.xml 后,重启mycat
  • 删除每个分片上的数据表,重新执行建库脚本等
  • 对全局表进行更新等操作后,其他分片上的全局表也会进行同步

5.mycat 分片:水平拆分

在这里插入图片描述

在这里插入图片描述

在上一个案例的基础上完成

schema.xml ,mod-long:通过对id取模运算把数据均匀的分散到分片上

在这里插入图片描述

server.xml ,让 root 也可以管理此逻辑库

在这里插入图片描述

重启mycat,测试略

6.mycat 管理和监控

6.1 9066管理端口

在这里插入图片描述

6.2 mycat-web

在这里插入图片描述

在这里插入图片描述

zookeeper

下载地址:https://archive.apache.org/dist/zookeeper/

安装步骤:

# 解压
tar -xf zookeeper-3.4.6.tar.gz -C /usr/local/

# 创建数据存放目录
mkdir /usr/local/zookeeper-3.4.6/data

# 配置文件 
cp /usr/local/zookeeper-3.4.6/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.6/conf/zoo.cfg

# 修改配置文件
vim /usr/local/zookeeper-3.4.6/conf/zoo.cfg
# 第12 行
dataDir=/usr/local/zookeeper-3.4.6/data

#启动
/usr/local/zookeeper-3.4.6/bin/zkServer.sh start
# 查看状态
/usr/local/zookeeper-3.4.6/bin/zkServer.sh status

安装 mycat-eye

# 解压
tar -xf Mycat-web.tar.gz -C /usr/local/

# 启动
cd /usr/local/mycat-web/
sh start.sh

# 网页访问
http://192.168.9.3:8082/mycat/

在这里插入图片描述

启动 zookeeper、mycat-eye,访问网页

在这里插入图片描述

在这里插入图片描述

7.mycat 读写分离

7.1 一主一从

两台虚拟机,先配置好一主一从,再配置 mycat

  • 配置好一主一从后,在主库的DDL操作会同步到从库中
  • 在主库测试建库、建表、插入数据

mycat 配置说明

  • writeHost 节点、readHost 节点
  • balance 属性(一般设置为1或3,在一主一从配置中1和3都一样)
  • 读写分离的配置中不用配置逻辑表,默认会加载物理数据库中的所有表为逻辑表

在这里插入图片描述

在这里插入图片描述

配置 schema.xml

在这里插入图片描述

writeHost 和eadHost 节点中的 name 不要相同

在这里插入图片描述

server.xml

在这里插入图片描述

重启mycat,登录并测试

  • 连接 mycat,测试新增,主库和从库中都会有新增的数据
  • 用navicat在从库中修改一条数据,在mycat 中测试查询,以验证读写是否分离
  • 如果 schema.xml 中的负载均衡策略为2,则会随机查询到两个节点的数据
  • 如果主库宕机了,查询操作正常,新增、修改、删除都会失败(一主一从并没有高可用)

7.2 双主双从

介绍

在这里插入图片描述

准备和规划

在这里插入图片描述

主机master1

  • server-id:唯一值
  • binlog-do-db:指定一个需要同步的库做测试即可,如 db01
  • log-slave-updates

在这里插入图片描述

vim /etc/my.cnf

server-id=1
log-bin=mysql-bin
#选择要同步的数据库名  只能在这个数据库进行同步
#不写就是全部数据库
binlog-do-db=mytest
log-slave-updates
#重启数据库
systemctl restart mysqld

主机master2

  • 和 master1 对比,也就是 server-id 不同
vim /etc/my.cnf

server-id=3
log-bin=mysql-bin
#选择要同步的数据库名  只能在这个数据库进行同步
#不写就是全部数据库
binlog-do-db=mytest
log-slave-updates
#重启数据库
systemctl restart mysqld

在这里插入图片描述

分别在两台主库上都创建同名的用户,用于主从复制,查看主库状态(记录 binlog文件和位置)

在这里插入图片描述

#登录mysql
mysql -uroot -p
# 创建用户,并授予主从复制权限
mysql> create user 'my'@'%' identified with mysql_native_password by 'Bdqn_8888';

mysql> grant replication slave on *.* to 'my'@'%';

mysql> SHOW MASTER STATUS;

从机slave1

  • 只需要配置 server-id

在这里插入图片描述

vim /etc/my.cnf


#从机id
server-id=2

#重启数据库
systemctl restart mysqld

从机slave2

  • 和 slave1对比,也就是server-id不同

在这里插入图片描述

vim /etc/my.cnf


#从机id
server-id=4

#重启数据库
systemctl restart mysqld

分别在两台从库上设置其关联的主库

在这里插入图片描述

#登录从库mysql
mysql -uroot -p

#分别在两台从库上设置其关联的主库
mysql> CHANGE MASTER TO
master_host='192.168.9.6',
master_user='my',
master_password='Bdqn_8888',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=591;

mysql> START SLAVE;

mysql> SHOW SLAVE STATUS\G;

分别在两台主库上配置互相复制

在这里插入图片描述

两台主机进行复制    1号机连接3号机    3号机连接1号机
mysql> CHANGE MASTER TO
master_host='192.168.9.4',
master_user='my',
master_password='Bdqn_8888',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=591;

mysql> START SLAVE;

mysql> SHOW SLAVE STATUS\G;

测试(在navicat中测试即可)

在这里插入图片描述

  • 在 master1 执行建库、建表语句,会自动同步到其他三台服务器

  • 在 master2 执行新增语句,会自动同步到其他三台服务器


# 建库建表添加数据
mysql> create database mytest;

mysql> use mytest;

mysql> create table person(
  id int(10) primary key not null auto_increment,
  name varchar(50) not null,
  gender char(1) not null
)engine=innodb default charset=utf8mb4;

mysql> insert into person values (null,'tom','m'),(null,'jack','m'),(null,'marry','f');

此时双主双从搭建完毕,下面在 mycat 进行读写分离的配置

#先安装JDK在解压mycat  
tar -xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local

schema.xml

#schema.xml配置文件位置
cd /usr/local/mycat/conf
#备份
cp schema.xml schema.xml.bak

vim schema.xml

在这里插入图片描述

在这里插入图片描述

 <!--mytest -->
        <schema name="MYTEST" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1" >
        </schema>

        <dataNode name="dn1" dataHost="dataHost1" database="mytest" />


        <dataHost name="dataHost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100" >
                <heartbeat>select user()</heartbeat>
                <writeHost host="master1" url="jdbc:mysql://192.168.9.3:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="Bdqn_8888">
                        <readHost host="slave1" url="jdbc:mysql://192.168.9.4:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="Bdqn_8888">
                        </readHost>
                </writeHost>

                <writeHost host="master2" url="jdbc:mysql://192.168.9.5:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="Bdqn_8888">
                        <readHost host="slave2" url="jdbc:mysql://192.168.9.7:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="Bdqn_8888">
                        </readHost>
                </writeHost>
        </dataHost>

server.xml

vim server.xml

在这里插入图片描述

<user name="root" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">MYTEST</property>
                <!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->

                <!-- 表级 DML 权限设置 -->
                <!--            
                <privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>           
                 -->
        </user>

        <user name="user">
                <property name="password">123456</property>
                <property name="schemas">MYTEST</property>
                <property name="readOnly">true</property>
        </user>

开启mycat

/usr/local/mycat/bin/mycat start

日记检测

tail -f /usr/local/mycat/logs/wrapper.log

重启mycat服务测试

测试1:

  • 修改 slave1 的数据、修改 slave2 的数据,在 mycat 中 select 看看效果,会发现显示的数据来源于master2、slave1、slave2。

  • 在 mycat 中 insert ,会发现都进行了数据同步。

测试2:

  • 停止 master1 的 mysql 服务,在 mycat 中测试查询,会发现显示的数据来源于slave2。

  • 在 mycat 中测试 insert,看能否执行写入,会发现数据写入了 master2、slave2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!

这里写目录标题 什么是Selenium&#xff1f;Selenium基础用法详解环境搭建编写第一个Selenium脚本解析脚本脚本执行结果常用的元素定位方法常用的WebDriver方法等待机制 Selenium高级技巧详解页面元素操作处理弹窗和警告框截图和日志记录多窗口和多标签页操作 一个实战的小demo…

Apache XMLBeans 一个强大的 XML 数据处理框架

Apache XMLBeans 是一个用于处理 XML 数据的 Java 框架&#xff0c;它提供了一种方式将 XML Schema (XSD) 映射到 Java 类&#xff0c;从而使得开发者可以通过强类型化的 Java 对象来访问和操作 XML 文档。下面将以一个简单的案例说明如何使用 Apache XMLBeans 来解析、生成和验…

带格式 pdf 翻译

支持 openAI 接口&#xff0c;国内 deepseek 接口兼容 openAI 接口&#xff0c; deepseek api 又非常便宜 https://pdf2zh.com/ https://github.com/Byaidu/PDFMathTranslate

ubuntu22.04降级安装CUDA11.3

环境&#xff1a;主机x64的ubuntu22.04&#xff0c;原有CUDA12.1&#xff0c;但是现在需要CUDA11.3&#xff0c;本篇文章介绍步骤。 一、下载CUDA11.3的run文件 下载网址&#xff1a;https://developer.nvidia.com/cuda-11-3-1-download-archive?target_osLinux&target_…

9 异常

如果你希望在软件调试上有所突破,或者想了解如何通过异常进行反调试,或者想自己写一个调试器,那么就必须要深入了解异常,异常与调试是紧密相连的,异常是调试的基础。 异常产生后,首先是要记录异常信息(异常的类型、异常发生的位置等),然后要寻找异常的处理函数,我们…

springBoot整合ELK Windowsb版本 (elasticsearch+logstash+kibana)

springBoot整合ELK Windowsb版本 【elasticsearchlogstashkibana】 下载软件启动服务1、elasticsearch2、kibana3、logstash 集成springboot1、添加依赖2、在logback.xml添加相关配置3、修改logstash 配置4、重启logstash 最后测试 下载软件 elasticsearch 官网 https://www.…

详解Sonar与Jenkins 的集成使用!

本文阅读前提 本文假设读者熟悉Jenkins和SonarQube的基础操作。 核心实现功能 Jenkins中运行的job来调用SonarScanner&#xff0c;最后可实现测试结果与SonarQube中同步查看。 Jenkins中安装Sonar相关插件 配置Sonarqube Dashboard>Manage Jenkins>Systems 指定son…

鸿蒙面试 2025-01-10

写了鉴权工具&#xff0c;你在项目中申请了那些权限&#xff1f;&#xff08;常用权限&#xff09; 位置权限 &#xff1a; ohos.permission.LOCATION_IN_BACKGROUND&#xff1a;允许应用在后台访问位置信息。 ohos.permission.LOCATION&#xff1a;允许应用访问精确的位置信息…

php 使用simplexml_load_string转换xml数据格式失败

本文介绍如何使用php函数解析xml数据为数组。 <?php$a <xml><ToUserName><![CDATA[ww8b77afac71336111]]></ToUserName><FromUserName><![CDATA[sys]]></FromUserName><CreateTime>1736328669</CreateTime><Ms…

【多空资金博弈】综合副图指标,资金做多线,短线做多雷达,中长线共振,大资金进场会涨等技术信号

如上图&#xff0c;副图指标【多空资金博弈】&#xff0c;红线做多资金线&#xff0c;绿色线为做空资金线&#xff0c;紫色柱线为短线做多雷达信号&#xff0c;紫色圆柱叠加文字为大资金进场信号&#xff0c;堆量柱线和紫色空心柱线为底部吸筹建仓信号&#xff0c;三条横向虚线…

Win11家庭版转专业版

Win11家庭版转专业版&#xff08;亲测有效&#xff09; 第一步 【断网】输入这个密钥&#xff1a; R8NJ8-9X7PV-C7RCR-F3J9X-KQBP6 第二步 点击下一步会自动重启 第三步 【联网】输入这个密钥&#xff1a; F3NWX-VFMFC-MHYYF-BCJ3K-QV66Y 注意 两次输入密钥的地方一致 …

【云商城】高性能门户网构建

第3章 高性能门户网构建 网站门户就是首页 1.OpenResty 百万并发站点架构 ​ 1).OpenResty 特性介绍 ​ 2).搭建OpenResty ​ 3).Web站点动静分离方案剖析 2.Lua语法学习 ​ 1).Lua基本语法 3.多级缓存架构实战 ​ 1).多级缓存架构分析 用户请求网站&#xff0c;最开始…

上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天探底回升&#xff0c;沪指盘中跌超1.6%&#xff0c;创业板指一度跌逾3%&#xff0c;午后集体拉升翻红…

计算机毕业设计Python机器学习农作物健康识别系统 人工智能 图像识别 机器学习 大数据毕业设计 算法

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

游戏语音的历史是什么样的?

游戏中&#xff0c;离不开游戏社交。 无社交&#xff0c;不游戏&#xff0c;大家都深知社交在游戏体验中的重要性。 游戏语音的发展史是怎么样的&#xff1f;问了下AI&#xff0c;给我的回答是 早期阶段 1970年代&#xff1a;1970年代出现了第一个语音游戏“尤瓦尔的冒险”&am…

《解锁图像的语言密码:Image Caption 开源神经网络项目全解析》

《解锁图像的语言密码&#xff1a;Image Caption 开源项目全解析》 一、开篇&#xff1a;AI 看图说话时代来临二、走进 Image Caption 开源世界三、核心技术拆解&#xff1a;AI 如何学会看图说话&#xff08;一&#xff09;深度学习双雄&#xff1a;CNN 与 RNN&#xff08;二&a…

毕业设计选题

你是不是正在纠结毕业设计该如何完成&#xff1f;不知道该如何选题?同时又觉得定制太昂贵&#xff1f;你是不是还在为毕业论文不会写而苦恼&#xff1f; 当你看到这儿&#xff0c;就不用再纠结再苦恼了&#xff0c;周哥为你提供了计算机专业各个方向的选题&#xff0c;包括Jav…

linux RT-Preempt spin lock实现

一、spin_lock概述 Spinlock是linux内核中常用的一种互斥锁机制&#xff0c;和mutex不同&#xff0c;当无法持锁进入临界区的时候&#xff0c;当前执行线索不会阻塞&#xff0c;而是不断的自旋等待该锁释放。正因为如此&#xff0c;自旋锁也是可以用在中断上下文的。也正是因为…

Ubuntu 22.04 桥接配置

1. 网卡配置文件备份 sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.bak 1.1 静态ip配置 1.1.3 解释 network: version: 2 ethernets: # 网卡名称 使用ifconfig查看 ens33: dhcp4: false dhcp6: false …

PHP多功能投票小程序源码

多功能投票小程序&#xff1a;全方位打造专属投票盛宴的得力助手 &#x1f389; &#x1f527; 基于先进的ThinkPHP框架与Uniapp技术深度融合&#xff0c;我们匠心独运&#xff0c;精心雕琢出一款功能全面、操作便捷的投票小程序&#xff0c;旨在为您带来前所未有的投票体验。…