MySQL数据库 主从复制与读写分离
读写分离是什么
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
为什么要进行读写分离
因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。
但是数据库的“读”(读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率。
何时要进行读写分离
数据库不一定要读写分离,但如果程序使用数据库较多,而更新少,查询多的情况下会考虑使用。利用数据库主从同步,再通过读写分离可以分担数据库压力,提高性能。
主从复制与读写分离
在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。
MySQL支持的复制类型
STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。
ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。
主从复制的过程
主(Master):dump线程,二进制日志
从(Slave):I/O线程,SQL线程,中继日志
1、主中数据进行更新,并写入二进制日志。
2、从开启IO线程,并勘测主的二进制日志是否有更新,请求读取二进制日志。
3、主为从的IO线程开启dump线程,向从发送二进制日志
4、从保存二进制日志到中继日志中
5、从开启SQL线程读取中继日志,解析成sql语句,实现主从同步
数据库主从数据不一致解决方案
一:忽略错误后,继续同步 该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况
二:重新做主从,完全同步 该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
MYSQL读写分离原理
读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性操作,而从数据库处理select查询。数据库复制被用来把主数据库上事务性操作导致的变更同步到集群中的从数据库。
目前较为常见的MysQL读写分离分为以下两种:
基于程序代码内部实现
在代码中根据select、insert进行路由分类,这类方法也是目前生产环境应用最广泛的。
优点是性能较好,因为在程序代码中实现,不需要增加额外的设备为硬件开支;缺点是需要开发人员来实现,运维人员无从下手。
但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的Java应用,如果在程序代码中实现读写分离对代码改动就较大。
基于中间代理层实现
代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有以下代表性程序。
MySQL-Proxy
MySQL-Proxy为MysQL开源项目,通过其自带的1ua脚本进行sQL判断。
Atlas
是由奇虎360的Web平台部基础架构团队开发维护的一个基于MysQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用atlas运行的mysql业务,每天承载的读写请求数达几干保条。支持事物以及存储过程。
Amoeba
由陈思儒开发,作者曾就职于阿里巴巴。该程序由Java语言进行开发,阿里巴巴将其用于生产环境。但是它不支持事务和存储过程。
Amoeba是一个非常容易使用、可移植性非常强的软件。因此它在生产环境中被广泛应用于数据库的代理层。
Mycat
是一款流行的基于Java语言编写的数据库中间件,是一个实现了MySq1协议的服务器,其核心功能是分库分表。配合数据库的主从模式还可以实现读写分离 由于使用MysQLProxy需要写大量的ua脚本,这些Lua并不是现成的,而是需要自己去写。这对于并不熟悉MysQLProxy 内置变量和MySQL Protocol的人来说是非常困难的。
MySQL主从复制延迟的原因
1、master服务器高并发,形成大量事务
2、网络延迟
3、主从硬件设备导致:cpu主频、内存io、硬盘io
4、本来就不是同步复制、而是异步复制
从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。
从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o方面性。
从库使用SSD磁盘
网络优化,避免跨机房实现同步
主从复制配置
#准备Master 服务器:20.0.0.30 mysql5.7
Slave1 服务器:20.0.0.40 mysql5.7
Slave2 服务器:20.0.0.120 mysql5.7#关闭防火墙及安全机制systemctl stop firewalld
systemctl disable firewalld
setenforce 0
Mysql主从服务器时间同步
#主服务器设置(20.0.0.30)
#安装ntp
yum install ntp -yvim /etc/ntp.conf
--末尾添加--
server 127.0.0.0 #设置本地是时钟源,注意修改网段 127.0.0.0
fudge 127.0.0.0 stratum 8 #设置时间层级为8(限制在15内)service ntpd start
或
systemctl start ntpd#从服务器设置(20.0.0.40 、20.0.0.120)yum install ntp ntpdate -yservice ntpd start
或
systemctl start ntpd/usr/sbin/ntpdate 20.0.0.30 #进行时间同步 20.0.0.30#可添加定时任务,实现自动同步
crontab -e
*/30 * * * * /usr/sbin/ntpdate 20.0.0.30
主服务器的mysql配置
vim /etc/my.cnf #MySQL的配置文件
server-id = 1
log-bin=master-bin #添加,主服务器开启二进制日志
binlog_format = MIXED #设置日式格式为混合模式
log-slave-updates=true #添加,允许slave从master复制数据时可以写入到自己的二进制日志#重启MySQL服务
systemctl restart mysqldmysql -u root -p123456
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'20.0.0.%' IDENTIFIED BY '123456'; #给从服务器的网段授权#刷新
FLUSH PRIVILEGES;show master status;
//如显示以下
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 447 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)#File 列显示日志名,Position 列显示偏移量
从服务器的mysql配置
vim /etc/my.cnf
server-id = 2 [server-id = 3] #修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin #添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index #添加,定义中继日志文件的位置和名称,一般和relay-log在同一目录
relay_log_recovery = 1
#relay_log_recovery = 1 选配项:当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log,并且重新从 master 上获取日志,这样就保证了relay-log 的完整性。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。systemctl restart mysqldmysql -u root -123456
CHANGE master to master_host='20.0.0.30',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=447;
#配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致start slave; #启动同步,如有报错执行 reset slave;
show slave status\G #查看 Slave 状态
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes #负责与主机的io通信
Slave_SQL_Running: Yes #负责自己的slave mysql进程
查看从配置不正常的情况
#一般 Slave_IO_Running: No 的可能性:
1、网络不通
2、my.cnf配置有问题
3、密码、file文件名、pos偏移量不对
4、防火墙没有关闭
验证主从复制效果
#当主数据库进行增添或修改时,从数据库会同步记录主的数据#在主数据库增添数据(20.0.0.30)mysql> create database xxxx;
Query OK, 1 row affected (0.00 sec)#此时查看配置的两台从服务器数据库#20.0.0.40
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bbs |
| mysql |
| performance_schema |
| sys |
| test |
| test1 |
| wordpress |
| xxxx |
+--------------------+#20.0.0.120
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
| test2 |
| xxxx |
+--------------------+
读写分离配置
基于上面的主从复制
#准备Master 服务器:20.0.0.30 mysql5.7
Slave1 服务器:20.0.0.40 mysql5.7
Slave2 服务器:20.0.0.120 mysql5.7Amoeba 服务器:20.0.0.41 jdk1.6、Amoeba
客户端 服务器:20.0.0.41 mysql#关闭防火墙及安全机制systemctl stop firewalld
systemctl disable firewalld
setenforce 0
做读写分离实验之前必须有一 主 两从 环境
#Amoeba服务器配置##安装 Java 环境##因为 Amoeba 是基于 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。cd /opt/
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local/
chmod +x jdk-6u14-linux-x64
./jdk-6u14-linux-x64.bin//按yes,按enter#重命名目录
mv jdk1.6.0_14/ /usr/local/jdk1.6#修改系统配置文件
vim /etc/profileexport JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
#执行
source /etc/profile
#查看当前java环境
java -version#安装 Amoeba软件mkdir /usr/local/amoebatar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/chmod -R 755 /usr/local/amoeba//usr/local/amoeba/bin/amoeba#如显示amoeba start|stop说明安装成功#配置 Amoeba读写分离,两个 Slave 读负载均衡###先在Master(20.0.0.30)、Slave1(20.0.0.40)、Slave2(20.0.0.120) 的mysql上开放权限给 Amoeba 访问grant all on *.* to test@'20.0.0.%' identified by '123456';#再回到amoeba服务器配置amoeba服务:cd /usr/local/amoeba/conf/#备份
cp amoeba.xml amoeba.xml.bakvim amoeba.xml #修改amoeba配置文件
--30行--
<property name="user">amoeba</property>--32行--
<property name="password">123456</property>--115行--
<property name="defaultPool">master</property>--117-去掉注释-
<property name="writePool">master</property>
<property name="readPool">slaves</property>#备份
cp dbServers.xml dbServers.xml.bak
vim dbServers.xml #修改数据库配置文件--23行--注释掉 作用:默认进入test库 以防mysql中没有test库时,会报错
<!-- <property name="schema">test</property> -->--26--修改
<property name="user">test</property>--28-30--去掉注释
<property name="password">123456</property>--45--修改,设置主服务器的名Master
<dbServer name="master" parent="abstractServer">--48--修改,设置主服务器的地址
<property name="ipAddress">192.168.10.15</property>--52--修改,设置从服务器的名slave1
<dbServer name="slave1" parent="abstractServer">--55--修改,设置从服务器1的地址
<property name="ipAddress">192.168.10.14</property>--58--复制上面6行粘贴,设置从服务器2的名slave2和地址
<dbServer name="slave2" parent="abstractServer">
<property name="ipAddress">192.168.10.16</property>--65行--修改
<dbServer name="slaves" virtual="true">--71行--修改
<property name="poolNames">slave1,slave2</property>/usr/local/amoeba/bin/amoeba start& #启动Amoeba软件,按ctrl+c 返回
netstat -anpt | grep java #查看8066端口是否开启,默认端口为TCP 8066
测试读写分离
yum install -y mariadb-server mariadb
systemctl start mariadb.service
———————————————————— 可选,也可以用MySQL在客户端服务器上测试(20.0.0.41):mysql -u amoeba -p123456 -h 20.0.0.41 -P8066#通过amoeba服务器代理访问mysql ,在通过客户端连接mysql后写入的数据只有主服务会记录,然后同步给从--从服务器#在客户端(20.0.0.41)更新mysql> create database amoeba;
Query OK, 1 row affected (0.04 sec)#查看主(20.0.0.30)、从1(20.0.0.40)、从2(20.0.0.120)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| amoeba |
| bbs |
| mysql |
| performance_schema |
| sys |
| test |
| test1 |
| wordpress |
+--------------------+
9 rows in set (0.01 sec)#当关闭两台从服务器(20.0.0.40、20.0.0.120)stop slave; #关闭同步use amoeba;
create table test(id int,name varchar(20),text varchar(30));//在slave1上:insert into test values('1','zhangsan','this_is_slave1');//在slave2上:
insert into test values('2','lisi','this_is_slave2');//在主服务器上:
insert into test values('3','wangwu','this_is_master');//在客户端服务器上:
use amoeba;
select * from test; //客户端会分别向slave1和slave2读取数据,显示的只有在两个从服务器上添加的数据,没有在主服务器上添加的数据
mysql> select * from test;
+------+----------+----------------+
| id | name | text |
+------+----------+----------------+
| 1 | zhangsan | this_is_slave1 |
+------+----------+----------------+再次执行select * from test; mysql> select * from test;
+------+------+----------------+
| id | name | text |
+------+------+----------------+
| 2 | lisi | this_is_slave2 |
+------+------+----------------+#在客户端(20.0.0.41) 插入新条目
insert into test values('4','qianqi','this_is_client'); #只有主服务器(20.0.0.30)上有此数据
mysql> select * from test;
+------+--------+----------------+
| id | name | text |
+------+--------+----------------+
| 3 | wangwu | this_is_master |
| 4 | qianqi | this_is_client |
+------+--------+----------------+//在两个从服务器(20.0.0.40、20.0.0.120)上执行 start slave; 即可实现同步在主服务器上添加的数据
start slave;
#(20.0.0.40)
mysql> select * from test;
+------+----------+----------------+
| id | name | text |
+------+----------+----------------+
| 1 | zhangsan | this_is_slave1 |
| 3 | wangwu | this_is_master |
| 4 | qianqi | this_is_client |
+------+----------+----------------+#(20.0.0.120)
mysql> select * from test;
+------+----------+----------------+
| id | name | text |
+------+----------+----------------+
| 2 | lisi | this_is_slave2 |
| 3 | wangwu | this_is_master |
| 4 | qianqi | this_is_client |
+------+----------+----------------+
相关文章:

MySQL数据库 主从复制与读写分离
读写分离是什么 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 为什么要进行读写分离 因…...

Qt day2
目录 1.多态,虚函数,纯虚函数 1.多态性(Polymorphism): 2.虚函数(Virtual Function): 3.纯虚函数(Pure Virtual Function): 将引用作为函数参…...

JavaScript - 好玩的打字动画
效果预览: 🚀HTML版本 <!DOCTYPE html> <html> <head><title>打字动画示例</title><style>.typewriter {color: #000;overflow: hidden; /* 隐藏溢出的文本 */white-space: nowrap; /* 不换行 */border-right: .…...

rpm打包
文章目录 rpm打包 1. rpm打包步骤0)准备工作:安装打包工具rpm-build和rpmdevtools(1)在线安装(2)离线安装 1)创建初始化目录2)准备打包内容3)编写打包脚本 spec文件4&…...

匠心新品:大彩科技超薄7寸WIFI线控器发布,热泵、温控器、智能家电首选!
一、产品介绍 此次发布一款7寸高清全新外壳产品,让HMI人机界面家族再添一新成员。该产品相比其他外壳有以下5个大改动: 1 表面玻璃盖板使用2.5D立体结构; 2 液晶盖板采用一体黑设计,且液晶屏与触摸板是全贴合结构; …...

华为云云服务器评测|使用云耀云服务器L实例部署Portainer工具
华为云云服务器评测|使用云耀云服务器L实例部署Portainer工具 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点1.3 云耀云服务器L实例使用场景 二、本次实践介绍2.1 本次实践简介2.2 Portainer简介 三、购买云耀云服务器L实例3.1 登录…...

C++并发编程:构建线程安全队列(第一部分:粗粒度锁)
C并发编程:构建线程安全队列(第一部分:粗粒度锁) 引言 在多线程编程中,线程之间的数据共享和通信是一个非常重要的问题。在这篇博客中,我们将讨论如何用C实现一个基础但非常实用的线程安全队列。这个队列…...

C++设计模式-更新中
单例模式 这个类实现了单例模式。单例模式是一种设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点来获取该实例。 在 ConnectionManager 类中,它通过以下方式实现了单例模式: 构造函数 ConnectionManager() 被声明为…...

Hydra工具的使用
目录 Hydra初识 Hydra使用 hydra破解mysql 前言 不固定用户名密码爆破 hydra破解ssh 以用户名为密码登录 hydra破解rdp 将爆破密码的结果输出到文件中 Hydra初识 前言: hydra是一款开源的暴力破解工具,支持多种服务破解原理:使用户…...

Pytorch学习:卷积神经网络—nn.Conv2d、nn.MaxPool2d、nn.ReLU、nn.Linear和nn.Dropout
文章目录 1. torch.nn.Conv2d2. torch.nn.MaxPool2d3. torch.nn.ReLU4. torch.nn.Linear5. torch.nn.Dropout 卷积神经网络详解:csdn链接 其中包括对卷积操作中卷积核的计算、填充、步幅以及最大值池化的操作。 1. torch.nn.Conv2d 对由多个输入平面组成的输入信号…...

水果库存系统(SSM+Thymeleaf版)
不为失败找理由,只为成功找方法。所有的不甘,因为还心存梦想,所以在你放弃之前,好好拼一把,只怕心老,不怕路长。 文章目录 一、前言二、系统架构与需求分析1、技术栈1.1 后端1.2 前端 2、需求分析 三、设计…...

如何在VueJS应用程序中设置Toast通知
通知是开发者提升应用程序互动性和改善用户体验的强大工具。通过利用通知,开发者可以在用户与应用程序互动的同时,有效地向用户传达重要事件。 通知在应用程序中起着至关重要的作用,可以及时通知用户有关各种操作和事件的信息。它们可以用于通…...

css让元素保持等比例宽高
使用新属性 aspect-ratio: 16/9; 代码示例 <style>div {width: 60%;/* 等比例宽高 */aspect-ratio: 16/9;background-color: red;margin: auto;}</style> </head><body><div></div> </body>示例 aspect-ratio兼容性...

骨传导和入耳式哪个危害大一点?入耳式和骨传导哪种好?
骨传导和入耳式这两种耳机虽然都存在一定的危害,但是入耳式耳机对人体的危害要更大一点。 入耳式耳机直接塞进耳朵这种佩戴方式,会阻塞外部声音的进入,长时间使用可能会导致耳道感染,还可能对听力造成损伤,而骨传导耳…...

介绍OpenCV
OpenCV是一个开源计算机视觉库,可用于各种任务,如物体识别、人脸识别、运动跟踪、图像处理和视频处理等。它最初由英特尔公司开发,目前由跨学科开发人员社区维护和支持。OpenCV可以在多个平台上运行,包括Windows、Linux、Android和…...

Android中的view绘制流程,简单理解
简单理解 Android中的View类代表用户界面中基本的构建块。一个View在屏幕中占据一个矩形区域、并且负责绘制和事件处理。View是所有widgets的基础类,widgets是我们通常用于创建和用户交互的组件,比如按钮、文本输入框等等。子类ViewGroup是所有布局&…...

商城开发:店铺管理系统应具备哪些功能?
电子商务的迅猛发展,越来越多的企业选择在线商城作为业务拓展的重要渠道。而要实现一个成功的在线商城,一个强大而高效的店铺管理系统是不可或缺的。店铺管理系统作为商城的核心管理工具,应具备一系列功能,以提供卓越的用户体验和…...

小白学go基础04-命名惯例对标识符进行命名
计算机科学中只有两件难事:缓存失效和命名。 命名是编程语言的要求,但是好的命名却是为了提高程序的可读性和可维护性。好的命名是什么样子的呢?Go语言的贡献者和布道师Dave Cheney给出了一个说法:“一个好笑话,如果你…...

使用iCloud和Shortcuts实现跨设备同步与自动化数据采集
在如今的数字时代,跨设备同步和自动化数据采集对于提高工作效率和便利性至关重要。苹果的iCloud和Shortcuts App为我们提供了强大的工具,可以实现跨设备同步和自动化数据采集的功能。本文将详细介绍如何利用iCloud和Shortcuts App实现这些功能࿰…...

Spring框架-基于STOMP使用Websocket
文章目录 前言一、范例演示1.注解方式2.XML方式二、可能出现错误错误: WebSocket代理中断错误: 缺少EventExecutor类错误: 缺少Publisher类错误: 缺少Scheduler类错误: WebSocket调用失败总结前言 Spring框架提供了多种WebSock消息机制,不仅包含了模拟SockJS,还提供了基…...

kafka-- 安装kafka manager及简单使用
一 、安装kafka manager 管控台: # 安装kafka manager 管控台: ## 上传 cd /usr/local/software ## 解压 unzip kafka-manager-2.0.0.2.zip -d /usr/local/ cd /usr/local/kafka-manager-2.0.0.2/conf vim /usr/local/kafka-manager-2.0.0.2/conf/appl…...

深圳-海岸城购物中心数据分析
做数据分析的时候,如果要对商场进行分析,可以从这些数据纬度进行分析,如下图所示: 截图来源于数位观察:https://www.swguancha.com/...

vue3 + elementplus Cannot read properties of null (reading ‘isCE‘)
使用命令行直接下载的element-plus,使用时会报错。 卸载掉,然后在项目根目录下,使用vue ui安装依赖, 即可使用...

易云维®医院后勤管理系统软件利用物联网智能网关帮助实现医院设备实现智能化、信息化管理
近年来,我国医院逐渐意识到医院设备信息化管理的重要性,逐步建立医院后勤管理系统软件,以提高信息化管理水平。该系统是利用数据库技术,为医院的中央空调、洁净空调、电梯、锅炉、医疗设备等建立电子档案,把设备监控、…...

c# 定期重启程序操作
1 先说说重启//这部分是转载的 一、Restart方法 System.Windows.Forms.Application.Restart();经测试发现有时候只会关闭程序,并不会重新启动 二、Process.Start()和Exit() System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly()…...

ps beta 2.5的妙用
1、https://pan.baidu.com/s/1CCw6RGlzEJ7TPWou8pPADQ?pwd2023 2、下载新便携版。 3、解压到c:\myapp文件夹下。 4、运行。 5、登录us账号。 6、使用智能移除。 效果如下: 使用滤镜。 先将C:\myApp\(新便携版)Adobe Photoshop (25.0.0 m22…...

IDEA无效发行版本17
IDEA无效发行版本17 idea开发工具依赖的 jdk版本 和 项目依赖的jdk版本一定要保持 一致,不然会报错。 setting-->build-->compiler-》javaCompiler project->structure 这个也要保持一样。 在porm.xml文件中,你配置jdk版本是1.8,这…...

Ubuntu22.04安装ROS
Ubuntu22.04安装ROS_笔记大全_设计学院 Excerpt 在安装ROS之前,需要先安装Ubuntu22.04操作系统。您可以从Ubuntu官网下载Ubuntu22.04的最新版本镜像文件,并创建一个可启动的USB。您可以参考以下步骤: 一、安装Ubuntu22.04操作系统 在安装ROS…...

Linux 学习笔记(2)—— 关于文件和目录
目录 1、切换目录 2、查看系统信息 3、文本的创建和编辑 3-1)创建文件 3-2)查看文件 3-3)输出重定向和追加重定向 3-4)使用 vi 编辑器编辑文件 4、文件和文件夹的处理 4-1)对文件的处理 4-2)查看…...

[重要] 如何在桌面上生成一个指定网址的快捷方式
方法一: 要在桌面上生成一个指定网址的快捷方式,可以按照以下步骤进行操作: 首先,打开你的浏览器,并确保已经访问了你想要创建快捷方式的网址。 在浏览器中,将鼠标悬停在地址栏上的网址上,然后…...