MySQL扩展架构

为什么安装MySQL的时候哦要卸载mariadb?

以前的Linux系统中数据库大部分是mysql,不过自从被sun收购之后,就没用集成在centos这些开源Linux系统中了,那么如果想用的话就需要自己安装了,首先centos7 已经不支持mysql,因为收费了你懂得,所以内部集成了mariadb,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb,以下为卸载mariadb,安装mysql的步骤。

rpm -e mariadb-libs postfix

二进制安装的mysql修改日志文件路径的时候,需要将日志文件所在目录事先建好,然后修改属主属组为mysql

mysql不能登录的几种常见的原因:

1、配置文件的bind

2、认证插件

3、没有打开%

如果设置两个主键,插入的内容可以让其中一个主键内容相同,但是不能让两个主键内容都相同。

在这里插入图片描述

子表的外键关联父表的主键(相同)

Linux中如何将不同得文件系统存储在存储设备上:

Linux通过虚拟文件系统把不同的文件系统存储到磁盘上。

或者通过数据库把不同的文件系统存储到存储设备上。

什么是数据库?

数据表就是一种数据结构,索引,查询等就是算法,通过代码融合起来对数据表高效、快速的存取。

时下最流行的DBMS:

Oracle、Mysql、SQL server、DB2

数据库的特点:

实现数据共享,减少数据冗余,采用了特定的数据类型,数据独立性较高,具有统一的数据控制功能。

数据系统的分类:

以下五种:

关系型数据库、非关系型数据库、搜索索引、流处理、批处理

数据库的分类:

1、(1)关系型数据库:MySQL、Oracle、SQL server、sqlite(移动开发和嵌入式用的),关系型数据是永久存储。

2、(2)非关系型数据库:Redis,memcache非关系型数据库存储到缓存中,是非永久的。特点:速度快。也可以做数据的持久化。说白了就是写在文件中。而且把存取数据的代码的方法保存起来。以后直接执行这个方法就可以了。

3、搜索索引:通过搜索过滤关键字,例如:只存储日志文件中有error的条目。。

两个进程之间怎么进行交互?

(1)通过共享内存

4、(2)通过流处理(代表产品:Kafka、storm、Flink(这三个都是apache的)、RabbitMQ)(来一滴水运一滴水)

5、批处理:代表产品(Hadoop)(一桶水提一桶水。)

yum安装方式:
  1. 首先卸载mariadb-libs和postfix
  2. 创建mysql组
  3. 创建mysql用户并且基本组为mysql组
  4. 创建mysql目录
  5. 解压,yum localinstall client server libs8-0 common
二进制安装方式:
设置远程登陆:
mysql -uroot -p root
mysql->use mysql
mysql->update user set host = '%' where user ='root';
mysql->grant all privileges on *.* to 'root'@'%' with grant option;
mysql->flush privileges;
mysql->exit;
systemctl restart mysqld
客户端管理服务器端工具:

1、mysql

2、mysqladmin

3、mysqldump

InnoDB:支持事务,保证了数据的一致性。修改和删除较多的操作就可以使用

采用事务日志,系统崩溃后易于数据的恢复

----------------------------

哈希索引:

哈希索引基于哈希表实现的,

哈希表是通过关键码值而直接进行访问的数据结构,也就是通过关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫散列函数,存放记录的属组叫做散列表。给定表M,存在函数f,对任意给定的关键码值key,带入函数后若能得到包含关键字的记录在表中的地址,称表M为哈希表,函数f为哈希函数。

B-树:m阶
  1. 根节点至少有两个子女
  2. 每个非根节点所包含的关键字个数j满足:[m/2]-1<= j <= m-1;向上取整
  3. 所有叶子节点都位于同一层
  4. 除根结点以外所有节点的度数正好是关键字总数+1,也就是该节点有两个关键字,则有3个孩子节点。
  5. 每个节点最多有m个孩子,最少有m/2个子节点(向上取整 5阶,3子)。
  6. 关键字必须从小到大排序。
innodb引擎数据存储

在InnoDB存储引擎中,也有页的概念,默认每个页的大小为16K,也就是每次读取数据时都是读取4*4k的大小!假设我们现在有一个用户表,我们往里面写数据

img

这里需要注意的一点是,在某个页内插入新行时,为了不减少数据的移动,通常是插入到当前行的后面或者是已删除行留下来的空间,所以在某一个页内的数据并不是完全有序的(后面页结构部分有细讲),但是为了数据访问顺序性,在每个记录中都有一个指向下一条记录的指针,以此构成了一条单向有序链表,不过在这里为了方便演示我是按顺序排列的!

由于数据还比较少,一个页就能容下,所以只有一个根结点,主键和数据也都是保存在根结点(左边的数字代表主键,右边名字、性别代表具体的数据)。假设我们写入10条数据之后,Page1满了,再写入新的数据会怎么存放呢?我们继续看下图

img

有个叫“秦寿生”的朋友来了,但是Page1已经放不下数据了,这时候就需要进行页分裂,产生一个新的Page。在innodb中的流程是怎么样的呢?

1、产生新的Page2,然后将Page1的内容复制到Page2。
2、产生新的Page3,“秦寿生”的数据放入Page3。
3、原来的Page1依然作为根结点,但是变成了一个不存放数据只存放索引的页,并且有两个子结点Page2、Page3。

这里有两个问题需要注意的是
  1、为什么要复制Page1为Page2而不是创建一个新的页作为根结点,这样就少了一步复制的开销了?
  如果是重新创建根结点,那根结点存储的物理地址可能经常会变,不利于查找。并且在innodb中根结点是会预读到内存中的,所以结点的物理地址固定会比较好!

2、原来Page1有10条数据,在插入第11条数据的时候进行裂变,根据前面对B-Tree、B+Tree特性的了解,那这至少是一颗11阶的树,裂变之后每个结点的元素至少为11/2=5个,那是不是应该页裂变之后主键1-5的数据还是在原来的页,主键6-11的数据会放到新的页,根结点存放主键6?
  如果是这样的话新的页空间利用率只有50%,并且会导致更为频繁的页分裂。所以innodb对这一点做了优化,新的数据放入新创建的页,不移动原有页面的任何记录。

随着数据的不断写入,这棵树也逐渐枝繁叶茂,如下图
img

每次新增数据,都是将一个页写满,然后新创建一个页继续写,这里其实是有个隐含条件的,那就是主键自增!主键自增写入时新插入的数据不会影响到原有页,插入效率高!且页的利用率高!但是如果主键是无序的或者随机的,那每次的插入可能会导致原有页频繁的分裂,影响插入效率!降低页的利用率!这也是为什么在innodb中建议设置主键自增的原因!

这棵树的非叶子结点上存的都是主键,那如果一个表没有主键会怎么样?在innodb中,如果一个表没有主键,那默认会找建了唯一索引的列,如果也没有,则会生成一个隐形的字段作为主键!

有数据插入那就有删除,如果这个用户表频繁的插入和删除,那会导致数据页产生碎片,页的空间利用率低,还会导致树变的“虚高”,降低查询效率!这可以通过索引重建来消除碎片提高查询效率!

innodb引擎数据查找

数据插入了怎么查找呢?

1、找到数据所在的页。这个查找过程就跟前面说到的B+Tree的搜索过程是一样的,从根结点开始查找一直到叶子结点。
2、在页内找具体的数据。读取第1步找到的叶子结点数据到内存中,然后通过分块查找的方法找到具体的数据。

这跟我们在新华字典中找某个汉字是一样的,先通过字典的索引定位到该汉字拼音所在的页,然后到指定的页找到具体的汉字。innodb中定位到页后用了哪种策略快速查找某个主键呢?这我们就需要从页结构开始了解。

img

左边蓝色区域称为Page Directory,这块区域由多个slot组成,是一个稀疏索引结构,即一个槽中可能属于多个记录,最少属于4条记录,最多属于8条记录。槽内的数据是有序存放的,所以当我们寻找一条数据的时候可以先在槽中通过二分法查找到一个大致的位置。

右边区域为数据区域,每一个数据页中都包含多条行数据。注意看图中最上面和最下面的两条特殊的行记录Infimum和Supremum,这是两个虚拟的行记录。在没有其他用户数据的时候Infimum的下一条记录的指针指向Supremum,当有用户数据的时候,Infimum的下一条记录的指针指向当前页中最小的用户记录,当前页中最大的用户记录的下一条记录的指针指向Supremum,至此整个页内的所有行记录形成一个单向链表。

行记录被Page Directory逻辑的分成了多个块,块与块之间是有序的,也就是说“4”这个槽指向的数据块内最大的行记录的主键都要比“8”这个槽指向的数据块内最小的行记录的主键要小。但是块内部的行记录不一定有序。

每个行记录的都有一个n_owned的区域(图中粉红色区域),n_owned标识这个这个块有多少条数据,伪记录Infimum的n_owned值总是1,记录Supremum的n_owned的取值范围为[1,8],其他用户记录n_owned的取值范围[4,8],并且只有每个块中最大的那条记录的n_owned才会有值,其他的用户记录的n_owned为0。

所以当我们要找主键为6的记录时,先通过二分法稀疏索引中找到对应的槽,也就是Page Directory中“8”这个槽,“8”这个槽指向的是该数据块中最大的记录,而数据是单向链表结构所以无法逆向查找,所以需要找到上一个槽即“4”这个槽,然后通过“4”这个槽中最大的用户记录的指针沿着链表顺序查找到目标记录。

----------------------------

高性能数据库需要解决的两个主要问题:

第一个是如何实现数据共享或者同步数据,第二个是如何处理故障转移。数据共享一般的解决方案是通过SAN来实现,而数据同步可以通过rsync软件或者DRBD技术来实现。故障转移的意思就是当服务器死机或出现错误时可以自动切换到其他备用服务器,不会影响服务器上业务的运行。

SAN:

存储区域网络,采取网状通道技术,通过网状通道交换机连接存储阵列和服务器主机,建立专用的数据存储的区域网络。

NAS:

网络附加存储,一台普通的主机,只要有自己的磁盘和文件系统,而且对外提供访问其文件系统的接口(NFS/CIFS),他就是一台NAS,常用的Windows文件共享服务器就是利用CIFS最为调用接口协议的NAS设备,一般来说,NAS就是处于以太网的一台利用NFS/CIFS等网络文件系统的共享服务区。

SAN是一个网络上的磁盘,NAS是一个网络上的文件系统,SAN就是共享硬盘,NAS就是共享一个目录。

详情请见:https://blog.csdn.net/github_38885296/article/details/80880840

引言:DAS:直接附加存储,通过总线将存储设备连接到服务器上

DAS(direct Attached Storage):直接附加存储,第一台主机正在写文件,文件已经被读入到第一台主机的内存中,第二台主机想要进行删除操作,直接就会导致文件错乱。

​ NAS(Network Attached Storage):网络附加存储,第一台主机正在进行写操作,第二台主机想要进行删除操作,NFS服务器会发现文件正在被使用,已经加锁了,你要等一会,文件不会发生错乱。

​ 假如NAS是百兆以太网,传输速度就是12.5M/S,DAS设备给你搞一个UltraSCSI(阿克)设备,的理论值带宽为320Mbps,传输速度为320/8=40M/S,那我NAS给你再来个千兆以太网,传输速度125M/S,那好,我DAS在使用一个SAS设备,理论带宽最高值6Gbps,传输速度6G/8=768M/S。所以在一定级别上DAS比NAS好的原因。

DRBD:

是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案

实现高可用的Mysql解决方案
主动复制解决方案:

主从复制解决方案就是Mysql自身提供的一种高可用解决方案,数据同步方法采用的是Mysql复制技术。Mysql复制就是一个日志的复制过程,在复制过程中一个服务器充当主服务器,而一个或者多个其他服务器充当”从“服务器。简单来说,就是从服务器到主服务器上拉取二进制日志文件,然后再将日志文件解析成相应的sql在从服务器上重新执行一遍主服务器的操作,通过这种方式保证了数据的一致性。

Mysql复制技术仅仅提供了日志的同步执行功能,而从服务器只能提供读操作,并且当主服务器故障时,必须通过手动来处理故障转移,通常的做法是将一台从服务器更改为主服务器。这种解决方案在一定程度上实现了Mysql的高可用性。实现了大约90%的SLA。

SLA:服务水平协定。是关于网络服务供应商和客户间的一份合同,其中定义了服务类型、服务质量和客户付款等术语。

MMM高可用解决方案:

全称是Mysql主主复制管理器,它提供了Mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件。在MMM高可用方案中,典型的应用是双主多从架构,通过Mysql复制技术可以实现两个服务器互为主从,并在任何时候只有一个节点可以被写入,避免了多点写入的数据冲突。同时,当可写的主节点故障时,MMM套件可以立刻监控到,然后将服务自动切换到另一个主节点,从而实现Mysql的高可用。

MMM方案是目前比较成熟的Mysql高可用的解决方案,可以实现99%的SLA。

Heartbeat/SAN高可用解决方案:

H/S高可用解决方案是借助第三方软硬件实现的。在这个解决方案中,处理故障转移的方式是高可用集群软件heartbeat,它监控和管理各个节点之间连接的网络,并监控集群服务,当节点出现故障或者服务不可用时,自动在其他节点启动集群服务。 在数据共享方面,通过SAN存储来共享数据,在正常状态下,集群主节点将通过挂载存储进行数据读写,而当集群发生故障时,heartbeat会首先通过一个仲裁设备将主节点挂载的存储设备释放,然后在备用节点上挂载存储,接着启动服务,通过这种方式实现数据的共享和同步。这种数据共享方式实现简单,但是成本价较高,并且有脑裂的可能,需要根据实际应用环境来选择,这个方案可以实现99.99%的SLA。

脑裂:在高可用系统中,当联系2个节点的”心跳线“断开后,本来为一整体、动作协调的高可用系统,就分裂成两个独立的个体,由于相互失去联系,都以为是对方出了故障,两个节点上的高可用软件就像”裂脑人“一样,争抢”共享资源“,争起”应用服务“,从而发生共享资源被瓜分、两边服务都起不来;或者两边服务都起来了,但是同时读写“共享资源”,导致数据损坏(常见如数据库轮询着的联机日志出错)。

脑裂产生原因:

1、HA服务器对之间心跳线链路发生故障,导致无法正常通信。

2、心跳线坏了

3、网卡及相关驱动坏了,IP配置及冲突问题

4、心跳线间的连接的设备故障

5、仲裁的机器出问题了

6、HA服务器上开启了iptables防火墙阻挡了心跳消息传输

7、HA服务器上心跳网卡地址不准确等信息配置不正确,导致发送心跳失败

8、其他原因,软件bug等。

对付高可用(HA)系统“裂脑”的对策,目前大概有一下几条:

1、增加冗余的心跳线,如:双线条线,尽量减少“脑裂”发生几率;

2、启用磁盘锁,正在服务的一方锁住磁盘,“脑裂发生时,让对方完全抢不走共享磁盘资源,但是如果占用共享盘的乙方不主动解锁,另外一方就永远得不到资源。

3、设置仲裁机制,当心跳线完全断开时,2个节点各自ping一下参考IP,不通则表明断点在本端,不仅心跳,还兼对外服务的本段网络链路断了,即使启动服务也没有用了,那就主动放弃竞争资源。

Heartbeat/DRBD高可用解决方案:

H/D高可用解决方案也是借助与第三方软硬件实现的,在故障处理转移的方法是依旧采用的是heartbeat,不同的是,在数据共享方面,采用了基于块级别的数据同步软件DRBD来实现。

DRBD是一个用软件实现的无共享的、服务器之间镜像块设备内容的分布式存储复制解决方案,和SAN网络不同,它并不共享存储,而是通过服务器之间的网络复制数据。这种方案实现起来稍微复杂,同样会有脑裂的问题,可以实现99.9的SLA。

MysqlCluster高可用解决方案:

Mysql官方主推的技术方案,功能强大,但是结构复杂,配置麻烦,实际应用不多,可以实现99.999%的SLA。

----------------------------

Mysql复制介绍:

Mysql复制是Mysql自身提供的一个主从复制功能,其实就是一台从服务器从另一台主服务器上复制日志,然后再解析日志并应用到自身的过程。Mysql复制时单向、异步复制,基本复制过程为:主服务器首先将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志的循环,这些日志文件可以发送到从服务器进行更新,当一个从服务器连接主服务器时,它从主服务器日志中读取上一次成功更新的位置,然后从服务器开始接受从上一次完成更新后发生的所有更新,所有更新完成,将等待主服务器通知新的更新。

Mysql复制支持链式复制,就是从服务器下还可以在链接从服务器,同时从服务器也可以充当主服务器角色

Mysql主从复制中,所有表的更新必须在主服务器上进行,从服务器仅能提供查询操作。

复制原理:

(1)Slave上面的IO线程连接Master,并请求从指定二进制日志文件的指定位置之后的日志内容;

(2)Master接受到来自Slave的IO线程的请求后,通过负责复制的IO线程根据请求信息读取指定日治指定位置之后的日志信息,返回给Slave端的IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在Master端二进制日志文件的名称以及在二进制日志中的位置。

基于单项复制的Mysql复制有以下优点:

1、如果主服务器出现问题,可以随时切换到从服务器

2、可以将Mysql读写分离,写操作只在主服务器上完成,读操作可以在多个从服务器上完成。由于主从服务器时保持数据同步的,因此不会对前端业务系统产生影响。同时,通过读写分离,可以大大降低Mysql的运行负荷3、在网络环境较好的环境下,业务量不是很大的环境下,从服务器基本可以达到实时同步,并且在同步过程终不悔干扰主服务器。

Mysql复制支持多种类型的复制方式:

基于语句的复制,基于行的复制和混合类型的复制。

Mysql复制的常见架构:

1、一主一从

2、一主多从,常用于写操作不频繁、查询量比较大的业务中

3、主主互备,又叫双主互备,即两个服务器互相将对方作为自己的主服务器,有同时将自己视为对方的从服务器来进行复制。主要用于对Mysql写操作要求比较高的环境中,避免了Mysql单点故障问题。

4、双主多从,其实就是双主互备,然后再加上多个从服务器,主要用户Mysql写操作要求比较高,同时查询量也较大的环境中。

但是万变不离其宗,在进行Mysql复制的各种部署前,

Mysql复制必须遵守的规则。

1、同一时刻只能由一台主服务器进行写操作

2、一个主服务器可以有多个从服务器

3、无论是主从服务器,都要确保各自服务器ID唯一,不然,双主互备就会出问题。

双主互备模式架构:

企业级Mysql集群具备高可用、可扩展、易管理、低成本的特点。

采用双主互备模式架构,这样就实现了高可用架构中数据同步功能,同时,将采用keepalived来实现Mysql的自动故障切换,在这个架构中,虽然两台服务器互为主从,但同一时刻只有一个Mysql服务器可读写,另外一个服务器只能进行读操作,这样可以保证数据的一致性。

架构图如下:

在这里插入图片描述

如图,DB1和DB2互为主从,这样保证了两台服务器的数据始终时同步的,同时在DB1和DB2上还需要安装高可用软件Keepalived,在正常情况下,web服务器仅从DB1进行读写操作,DB2只负责从DB1上同步数据,而Keepalived维护一个VIP(虚拟IP),此IP用来对外提供连接服务,同时Keepalived还负责监控DB1和DB2上Mysql数据库的运行状态,当DB1主机出现故障或者Mysql运行异常时,自动将VIP地址和Mysql服务切换到DB2上,Web服务器继续从DB2进行读写操作,通过keepalived保持了数据库服务的连通性,整个切换过程非常快,对web前端是透明的。

keepalived:

keepalived是用C语言编写的路由软件,该项目的主要目标是为Linux系统和基于Linux的基础结构提供负载均衡和高可用的简单而强大的功能。负载均衡框架依赖于提供第四层负载平衡的著名而广泛使用的Linux虚拟服务器(IP VS)内核模块。keepalived实现了一组检查器,以根据其运动状态动态,自适应的维护和管理负载平衡的服务器池。另一方面,VRRP实现了高可用性协议,VRRP是路由器故障转移的基础。此外,Keepalived还实现了一组VRRP有限状态机的挂钩,从而提供了低级和高速协议交互。为了提供最快的网络故障检测,Keepalived实施BFD协议。VRRP状态转换可以考虑BFD提示来驱动快速状态转换。Keepalived框架可以独立使用,也可以一起使用以提供弹性基础架构。

VRRP:

虚拟路由冗余协议,为了解决局域网中配置静态网关出现单点失效现象的路由协议。广泛应用在边缘网络中,设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及及时在实际第一跳路由器使用失败的情形下仍能维护路由器件的连通性。

BFD:

双向转发检测,BFD是一种全网同意的检测机制,用于快速检测,监控网络中链路或者IP路由的转发连通状况。BFD控制报文封装在UDP报文中传送,对于单条检测其UDP目的端口号为3784,对于多条检测其UDP目的端口号为4784或3784.

MMM高可用方案简介:

是一个Mysql主主复制管理器。

MMM集群套件具有良好的稳定性,高可用性和可扩展性,当活动的主服务器故障后,备用的主服务器会立刻接管,而其他的从服务器也能自动切换到主服务器继续进行同步复制,整个过程不用人为干预。

但是MMM集群套件也有一定的缺点,首先MMM架构需要多个节点,多个IP,对服务器数量有要求,其次,MMM方案在读写非常繁忙的业务系统中表现得不是很稳定,可能会出现复制延时,切换失效等问题,因此,MMM方案不太适应于对数据安全性要求很高并且读写频繁的环境中。

通过MMM套件实现双主互备架构:

在这里插入图片描述

这种架构需要5个IP,两个Master节点各有一个固定IP,其中一个正在运行的服务器还有一个可读IP和可写IP,实现了读写分离架构,另外一个只有一个只读IP,如Master1出现故障,所有的读写IP都给了Master2.

通过MMM套件实现双主多从架构:

在这里插入图片描述

通过MMM提供的读IP和写IP可以实现mysql的读写分离架构,通过两个Master实现了Mysql写操作的高可用性,然后在Master后端又增加了多个Slave(从设备)节点,而多个Slave节点之间可以通过LVS、Haproxy等负载均衡软件实现Mysql读操作的负载均衡。

MMM不仅能提供VIP自动转移功能,更重要的是,如果活动的Master节点发生故障,会自动将后端的多个Slave节点转向备用的Master节点继续进行同步复制,整个过程完全不用收购哦那个更改同步复制的配置,这是其他所有Mysql高可用集群方案都不具备的功能。

常见的读写分离的解决方案:

虽然在MMM集群架构中通过VIP实现了数据可的读写分离,但这仅仅设定了读、写的VIP地址,并没有在真正的业务系统中实现读写分离。可以通过两种方法来实现:

第一种实现是通过修改程序,将读写操作提取出来,并分别在程序的连接池中设定可读、可写的VIP地址,这种方法要修改业务系统的程序,对于新开发的程序,就可以在开发时预留这样的接口,而如果程序已经在运行,修改难度是相当大的,基本行不通。

第二种方案是通过一个数据库透明代理,也就是在业务系统和数据库之间提供一个代理接口,由这个接口来完成业务系统4读写请求的分发,将读操作分发到后台只读的数据库服务器上,而将写请求分发到后端可写的数据库服务器上,常见的读写分离软件由Amoeba和Mysql-Proxy。

Mysql-Proxy是Mysql官方推出一个处在业务系统和Mysql数据库之间的程序,这个代理可以用来分析、监控和变换通信数据,但是Mysql官方建议不要将其用于生产环境,因为它很不稳定,读写分离都是通过一个脚本实现的,而且这个脚本中bug很多。

Amoeba是一个开源项目,致力于Mysql的分布式数据库前端代理层,它主要在应用层访问Mysql的时候充当SQL路由器功能,具有负载均衡、高可用性,SQL过滤、读写分离等功能,通过Amoeba可以实现数据源的高可用、负载均衡,数据切片等功能。

通过Amoeba实现Mysql读写分离:
1、MMM整合Amoeba应用架构(企业级应用):

在实际生产环境中,Amoeba经常与MMM集群架构一起使用,这样如果任意的Mysql节点故障,MMM集群就能自动屏蔽故障节点,从而保证Amoeba一直能够连接到正常的Mysql集结点。

在这里插入图片描述

Amoeba下载:http://sourceforge.net/projects/amoeba/。直接解压就可以使用。

Amoeba框架是基于JavaSE1.5开发的,因此,要安装Java环境,建议使用JavaSE1.5以上的JDK版本,将JDK安装到/user/local/下,然后配置Java环境变量,如下:

在这里插入图片描述

将这些内容添加到系统的/etc/profile文件中即可。

----------------------------

发布了33 篇原创文章 · 获赞 6 · 访问量 655

猜你喜欢

转载自blog.csdn.net/qq_42508901/article/details/104109216
今日推荐