跳到主要内容

· 阅读需 4 分钟
Duke Lu

一、下载并解压 JDK

1. 下载 JDK

这个没有什么好说的,一般我们使用 Oracle JDK,在 Oracle 官网下载对应系统的 JDK 版本即可

2. 解压 JDK

通常,大多数情况下,都是将资源库等文件放在 /usr/local/ 目录下。这里出于个人习惯,我一般将非系统的软件和资源等放在 /opt/ 目录下,所以将刚刚下载的 JDK 移动到 /opt/ 目录下并解压

mkdir /opt/jdk
mv ./jdk-8u241-linux-x64.tar.gz /opt/jdk
cd /opt/jdk
tar -zxvf jdk-8u241-linux-x64.tar.gz

二、配置 Java 环境变量

1. Java 环境变量说明

配置 Java 环境变量,会配置 JAVA_HOMECLASSPATHPATH 3 个环境变量,下面是它们的简单说明:

  1. JAVA_HOME 环境变量:指定 JDK 的安装目录。Eclipse/IDEA/Tomcat 等软件就是通过搜索 JAVA_HOME 变量来找到并使用安装好的 JDK。
  2. CLASSPATH 环境变量:指定类搜索路径。JVM 就是通过CLASSPTH 来寻找类的。我们 需要把 JDK 安装目录下的 lib 子目录中的 dt.jar 和 tools.jar 设置到 CLASSPATH 中。当然,当前目录 “.” 也必须加入到该变量中。
  3. PATH 环境变量:指定命令搜索路径。在 Shell 下面执行命令时,它会到 PATH 变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把 JDK 安装目录下的 bin 目录增加到现有的 PATH 变量中,bin 目录中包含经常要用到的可执行文件。

2. 写入 Java 环境变量

环境变量通常有 3 个级别:系统级、用户级、临时(关于环境变量可以参考:Linux/Mac 配置环境变量)。我们可以根据自己的场景灵活配置

  • 系统级:对所有用户生效,在 /etc/profile 文件追加 Java 环境变量

    # Java
    export JAVA_HOME=/opt/jdk/jdk1.8.0_241
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    ps: 保存文件后,记得 source /etc/profile,使写入的配置生效

  • 用户级:仅对当前用户生效,在 ~/.bash_profile~/.bashrc 文件追加 Java 环境变量

    # Java
    export JAVA_HOME=/opt/jdk/jdk1.8.0_241
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    ps: 保存文件后,记得 source ~/.bash_profilesource ~/.bashrc,使写入的配置生效

  • 临时:仅对当前用户临时生效,退出后被系统清理,在命令行执行以下命令即可

    export JAVA_HOME=/opt/jdk/jdk1.8.0_241
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    ps: 配置临时环境变量,一般用于调试使用,不建议用这种方式配置


三、验证是否配置成功

验证 Java 环境是否配置成功,只需运行命令 java -versiong,返回并显示有 JDK 版本号就说明 Java 环境已经配置成功了

· 阅读需 2 分钟
Duke Lu

概述

Linux/Mac 均是 Unix 类型的系统,故它们配置环境变量的方式基本一致,通常环境变量有以下三种级别:

  • 系统级环境变量:配置的环境变量,对所有用户生效
  • 用户级环境变量:配置的环境变量,仅对当前用户生效
  • 临时境变量:配置的环境变量,当前用户生效,退出后环境变量被清除

优先级:临时 > 用户级 > 系统级,优先级高的会覆盖优先级低的环境变量

系统级环境变量

配置系统级环境变量,修改 /etc/profile 文件即可

  • 编辑 /etc/profile 文件

    vi /etc/profile  
  • 写入环境变量(这里以配置 Java 环境变量为例)

    # Java
    export JAVA_HOME=/opt/jdk/jdk1.8.0_241
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 使环境变量生效

    source /etc/profile  

用户级环境变量

配置系统级环境变量,修改 ~/.bash_profile~/.bashrc 文件即可,.bash_profile.bashrc 有什么不用可以参考这篇文章:关于“.bash_profile”和“.bashrc”区别的总结

  • 编辑 ~/.bash_profile 文件

    vi ~/.bash_profile
  • 写入环境变量(这里以配置 Java 环境变量为例)

    # Java
    export JAVA_HOME=/opt/jdk/jdk1.8.0_241
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 使环境变量生效

    source ~/.bash_profile

临时环境变量

配置临时环境变量,仅需使用 export 命令即可

export JAVA_HOME=/opt/jdk/jdk1.8.0_241
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

· 阅读需 2 分钟
Duke Lu

问题

使用 Navicat 连接 MySQL 数据库时,出现以下报错提示:

2059 - authentication plugin 'caching_sha2_password' cannot be loaded...

这个报错,中文意思就是:权限插件 caching_sha2_password 不能被加载

通过查阅 MySQL 的官方参考文档,我们看到这样的一段描述:

  • In MySQL 5.7, libmysqlclient uses as its default choice either mysql_native_password or the plugin specified through the MYSQL_DEFAULT_AUTH option for mysql_options().
  • When a 5.7 client tries to connect to an 8.0 server, the server specifies caching_sha2_password as its default authentication plugin, but the client still sends credential details per either mysql_native_password or whatever is specified through MYSQL_DEFAULT_AUTH.

从这里,我们就明白了:

  • 8.0 以前的默认身份验证插件是 mysql_native_password
  • 8.0 以后的默认身份验证插件是 caching_sha2_password

这里会报错的原因在上面也提到了:5.7 的客户端去连接 8.0 的服务端,因为默认的身份验证插件不同,故会造成插件不能加载的错误

说明一下:目前大多数的 MySQL 客户端都还没有升级为 8.0 的认证方式,故像 Navicat、Sequel Pro、SQLyog 等这些常用的连接工具,都有可能出现这个问题

解决

将 MySQL 8.0 的身份认证插件改回为 mysql_native_password

  • 修改 身份认证插件为 mysql_native_password

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  • 刷新权限

    FLUSH PRIVILEGES;

OK,现在再用 Navicat 去连接 MySQL 便可以成功了