Linux 搭建 Java 环境

428 阅读8分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 13 天,点击查看活动详情

日积月累,水滴石穿 😄

前言

云服务器到期了,在自己电脑搞了一个虚拟机,需要重新在 Linux 下配置 Java 环境。本文在此记录一下!

缺失命令:

yum -y install vim*

安装 JDK

官网地址:www.oracle.com/java/techno…

如果下载 jdk-8u321-linux-aarch64.tar.gz这个包,会出现:-bash: /usr/local/java/jdk1.8.0_321/bin/java: 无法执行二进制文件异常

image.png 将下载成功的安装包,放到 /opt 目录中。然后对其进行解压。

[root@localhost opt]# tar -zxvf jdk-8u321-linux-x64.tar.gz 

创建文件夹,然后进行移动。

[root@localhost opt]# mkdir /usr/local/java

[root@localhost opt]# mv jdk1.8.0_321/ /usr/local/java
[root@localhost opt]# cd /usr/local/java/
[root@localhost java]# ls
jdk1.8.0_321 

配置环境变量

  • 打开 profile 文件
vim /etc/profile
  • 在 profile 文件最下面,添加内容如下,JAVA_HOME的 jdk 路径根据自己的安装目录来写。
#Java
export JAVA_HOME=/usr/local/java/jdk1.8.0_321
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib

注意::$PATH 不能少,不然会找不到所有的命令

  • 更新配置文件重新生效。
source /etc/profile

测试

[root@localhost jdk1.8.0_321]# java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)

安装 MySQL

在官网:dev.mysql.com/downloads/m… 中,选择以下版本的 MySQL 下载:

image.png

小杰这里下载的是 5.7.37版本,注意,下载的是tar.gz后缀的包。

image.png

将下载好的安装包上传到 /opt目录中。对其进行解压,并重命名。(mysql-5.7.37目录不存在)

[root@localhost opt]# tar -zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz 
[root@localhost opt]# mv mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/java/mysql-5.7.37
[root@localhost opt]# cd /usr/local/java/mysql-5.7.37/
[root@localhost mysql-5.7.37]# ls
bin  docs  include  lib  LICENSE  man  README  share  support-files

1、删除mariadb

因为 CentOS7 默认安装 mariadb 数据库,MySQL 和它会有冲突,先把它删掉。使用命令:

rpm -qa | grep mariadb  查看当前centos系统中是否已存在mariadb数据库
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 (从上一步查看的mariadb全包名)    删除mariadb数据库以及依赖包

再次执行查询命令,查看是否删除。

rpm -qa | grep mariadb

2、检查用户组和用户是否存在,如果没有,则创建

  • -r:建立系统帐号。
  • -g:指定用户所属的群组。
[root@localhost mysql-5.7.37]# cat /etc/group | grep mysql
[root@localhost mysql-5.7.37]# cat /etc/passwd |grep mysql
# 创建一个系统用户,不指定用户组时,会自动创建一个与用户同名的组
[root@localhost mysql-5.7.37]# useradd -r mysql
[root@localhost mysql-5.7.37]# id mysql
uid=1000(mysql) gid=1000(mysql) 组=1000(mysql)

3、创建数据文件夹data

data文件夹是 MySQL 用来存放数据库文件的,数据库的表数据都放在 data 目录。默认没有data目录,需要手动创建data目录。

[root@localhost mysql-5.7.37]# mkdir data

示例如下:

image.png

4、修改 MySQL 安装目录权限

mysql-5.7.37目录及子目录的权限给与 mysql 用户,mysql 组。

[root@localhost mysql-5.7.37]# chown -R mysql:mysql /usr/local/java/mysql-5.7.37
[root@localhost mysql-5.7.37]# ll
总用量 276
drwxr-xr-x.  2 mysql mysql   4096 3月   3 19:20 bin
drwxr-xr-x.  5 mysql mysql   4096 3月   3 20:03 data
drwxr-xr-x.  2 mysql mysql     55 3月   3 19:20 docs
drwxr-xr-x.  3 mysql mysql   4096 3月   3 19:20 include
drwxr-xr-x.  5 mysql mysql    230 3月   3 19:20 lib
-rw-r--r--.  1 mysql mysql 259253 11月 30 04:09 LICENSE
drwxr-xr-x.  4 mysql mysql     30 3月   3 19:20 man
-rw-r--r--.  1 mysql mysql    566 11月 30 04:09 README
drwxr-xr-x. 28 mysql mysql   4096 3月   3 19:20 share
drwxr-xr-x.  2 mysql mysql     90 3月   3 19:20 support-files

  • -R:处理指定目录以及其子目录下的所有文件
  • user : 新的文件拥有者的使用者 ID
  • group : 新的文件拥有者的使用者组(group)

5、初始化MySQL

进入到 bin 目录,使用 MySQL 的 mysqld 命令初始化数据库的基本信息。

[root@localhost mysql-5.7.37]# cd bin/
[root@localhost bin]# ls
innochecksum    myisampack         mysqlcheck                  mysqld-debug   mysql_embedded    mysql_secure_installation  mysql_tzinfo_to_sql  resolveip
lz4_decompress  my_print_defaults  mysql_client_test_embedded  mysqld_multi   mysqlimport       mysqlshow                  mysql_upgrade        resolve_stack_dump
myisamchk       mysql              mysql_config                mysqld_safe    mysql_install_db  mysqlslap                  mysqlxtest           zlib_decompress
myisam_ftdump   mysqladmin         mysql_config_editor         mysqldump      mysql_plugin      mysql_ssl_rsa_setup        perror
myisamlog       mysqlbinlog        mysqld                      mysqldumpslow  mysqlpump         mysqltest_embedded         replace
[root@localhost bin]# ./mysqld --initialize --user=mysql --datadir=/usr/local/java/mysql-5.7.37/data --basedir=/usr/local/java/mysql-5.7.37/
  • --datadir 为mysql数据存放目录。
  • --basedir 为mysql解压目录。

执行完这行命令可能会出现问题:

./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

出现该问题首先检查该链接库文件有没有安装使用,使用命令进行核查:

[root@izm5eeq7orgtvuxpgma2f4z bin]# rpm -qa|grep libaio  

运行命令后发现系统中没有 libaio,进行安装

yum install  libaio-devel.x86_64

安装完成之后,继续使用上面那条命令。

image.png 执行此命令后,系统会为 root 用户随机生成一个密码 oOwCk75gyw/C。登录之后可以进行修改。

6、启动mysql

  • 方式一
[root@localhost bin]# ./mysqld_safe --user=mysql

出现以下日志说明 mysql 启动成功。 image.png

  • 方式二:
[root@localhost mysql-5.7.37]# cp support-files/mysql.server /etc/init.d/mysql
[root@localhost mysql-5.7.37]# service mysql start

但是这种启动方式可能会出现以下异常:

/etc/init.d/mysql: line 239: my_print_defaults: command not found`
/etc/init.d/mysql: line 259: cd: /usr/local/mysql: No such file or directory Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)

解决方式也简单,指明basedir和datadir路径即可。 解决办法:

[root@localhost etc]# vim my.cnf

[mysqld]
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
basedir=/usr/local/java/mysql-5.7.37/
datadir=/usr/local/java/mysql-5.7.37/data

然后重新启动即可。

[root@localhost etc]# service mysql start
Starting MySQL. SUCCESS! 

新开一个窗口,查看 Mysql 进程

[root@localhost ~]# ps -ef | grep mysql

image.png

7、设置 MySQL 开机自启动

注意:第 6 步 启动 MySQL 时,选择 方式二。

# 赋予可执行权限
[root@localhost ~]# chmod +x /etc/init.d/mysql
# 添加为启动服务
[root@localhost ~]# chkconfig --add mysql
# 查看启动服务列表
[root@localhost ~]# chkconfig --list
mysql           0:关    1:关    2:开    3:开    4:开    5:开    6:关
netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关

如果 3、4、5 状态为开或者为 on 则表示成功。如果是关或者 off 则执行一下:chkconfig --level 345 mysql on

执行完毕之后,可以重启计算机,命令为:reboot。 重启成功之后,执行 ps -ef | grep mysql,可以看到 mysql 的进程。

使用mysql客户端进入mysql

使用账号密码登录

进入到 bin 目录下执行命令, ./mysql -uroot -p

-u 用户名。 -p 密码,使用上面生成的密码。

image.png

成功登录客户端。先来使用命令创建一个数据库验证一下!

mysql>  CREATE DATABASE test_db;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

意思是:在执行此语句之前,必须使用ALTER USER语句重置密码。

修改密码

mysql> alter user 'root'@'localhost' identified by '密码';
Query OK, 0 rows affected (0.00 sec)
# 再次进行验证
mysql>  CREATE DATABASE test_db;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |
+--------------------+
5 rows in set (0.01 sec)

添加到系统命令

如果不想每次连接 MySQL 时,都要进入到 mysql/bin目录下,可以将 mysql 命令添加到系统命令执行路径中。

[root@localhost /]# mysql -uroot -p
-bash: mysql: 未找到命令
[root@localhost /]# ln -s /usr/local/java/mysql-5.7.37/bin/* /usr/local/bin/
[root@localhost /]# mysql -uroot -p
Enter password: 

配置远程连接

如果这时候使用远程连接,你会发现无法连接。会出现以下异常:

image.png 在没有授权之前只能在本机访问mysql,远程授权就是让其他计算机通过网络访问 MySQL。

  • 方式1: 更改 mysql数据库userhost字段值,从localhost改成%
mysql> use mysql;
mysql> select host,user from user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
3 rows in set (0.00 sec)

mysql> update user set host = '%' where user ='root';
mysql> flush privileges; 刷新
  • 方式2: 直接授权
mysql> grant all privileges on *.* to root@'%' identified by '密码'
mysql> flush privileges; 刷新

%也可以指定具体的ip的地址,比如 grant all privileges on . to root@47.105.198.54 identified by '密码'。其中第一个 * 表示所有数据库名,第二个 * 表示的数据库表。 root@'%'中的root表示用户名,%表示ip地址。

如果上述操作进行了还是不行,则检查防火墙是否关闭!

检查防火墙

可以通过systemctl status firewalld命令查看防火墙状态!

[root@localhost ~]# systemctl status firewalld

image.png 防火墙一般默认都是开启的。如果防火墙是开启的,那就要进行端口检测,如果端口是关闭的,则要放开。 如果不想开放端口,直接将防火墙关闭就行。

[root@localhost ~]# systemctl stop firewalld

关闭防火墙之后,再次使用远程工具连接。

开放端口

查看 3306 端口是否开放!注:查看端口需要先打开防火墙

[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# firewall-cmd --query-port=3306/tcp
no

开放端口:

[root@localhost ~]# firewall-cmd --add-port=3306/tcp --permanent
success
  • --permanent:永久生效,没有此参数服务器重启后失效。 重启防火墙:
[root@localhost ~]#  systemctl restart firewalld

开放端口之后,再次使用远程工具连接。


  • 如你对本文有疑问或本文有错误之处,欢迎评论留言指出。如觉得本文对你有所帮助,欢迎点赞和关注。