阿里云服务器搭建SSM项目(二)

在服务器上配置数据库mysql 5.7.33

  • 在服务器的防火墙 新增协议

linux 服务器 部署nest项目_java

1.mysql 5.7.33

2.把文件丢到xftp里,解压

文件路径:/root/java/install-package

去那个路径,解压

cd /root/java/install-package

tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz -C /root/java/mysql

linux 服务器 部署nest项目_linux 服务器 部署nest项目_02

4.添加系统mysql组和mysql用户

添加系统mysql组

groupadd mysql

添加mysql用户

useradd -r -g mysql mysql

查看添加的用户组,文件/etc/group

vi是编辑文件,查看直接用cat,管道限制grep

cat /etc/group |grep mysql

linux 服务器 部署nest项目_java_03

查看用户,文件/etc/passwd

cat /etc/passwd

linux 服务器 部署nest项目_mysql_04

linux 服务器 部署nest项目_mysql_05

5.修改配置文件 /etc/my.cnf

vim /etc/my.cnf

主要内容如下:

[mysqld]
bind-address=0.0.0.0
user=mysql
basedir=/root/java/mysql/mysql-5.7.33-linux-glibc2.12-x86_64
datadir=/var/lib/mysql/data
character_set_server=utf8mb4
socket=/var/lib/mysql/mysql.sock
explicit_defaults_for_timestamp=true
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mysql/mysql.err
pid-file=/root/java/mysql/pid/mysql.pid

[client]
port=3306
socket=/var/lib/mysql/mysql.sock  #和[mysqld]中的socket路径一致

[mysql]
socket=/var/lib/mysql/mysql.sock  #和[mysqld]中的socket路径一致

最重要的是port,basedir,datadir。其他也很重要,都加上

另外要注意log-error和pid-file的默认路径是否包含远程文件夹,有的话要修改成本地文件夹

还有加上user=mysql

linux 服务器 部署nest项目_bc_06

*mysql编码使用utf8mb4:

utf8字符集支持最长三个字节的UTF-8字符,而utf8mb4支持四个字节。使用utf8字符集,无法存储Emoji表情(四个字节的)以及新增的Unicode字符等。

6.创建mysql配置的相关文件夹,设置文件夹的拥有者,设置权限

这里要保证所有mysql的my.cnf中涉及的文件夹 的拥有者是用户mysql,以及所有者的权限是rwx。

  • 修改拥有者
#表示修改当前目录以及其子目录的拥有者为mysql(用户):mysql(所属组)
chown -R mysql:mysql ./
  • 修改权限
#表示修改当前文件夹的所有者权限为rwx
chmod u+rwx *

以下为涉及文件夹,都要做以上两部操作。

6.1 mysql安装目录

  • mysql安装目录
cd /root/java/mysql

6.2 创建data文件夹

去路径/var/lib/mysql下创建文件夹data

mkdir data

*我原本把data设置到目录/root/java/mysql下,后面初始化数据库会报错。

报错:
mysqld: Can't change dir to '/root/java/mysql/data' (Errcode: 13 - Permission denied)
2021-03-17T07:22:40.474337Z 0 [ERROR] failed to set datadir to /root/java/mysql/data/

所以还是把datadir的路径设置回datadir=/var/lib/mysql/data。

报错:
[ERROR] unknown variable '路径位置'

6.3 创建mysql.sock文件

我之前有可能误删了这个文件,如果本身有这个文件就不用新建了。

在路径/var/lib/mysql下创建文件mysql.sock

6.4 创建文件mysql.err

在路径/var/log/mysql下创建文件mysql.err

6.5 创建mysql.pid

在路径/root/java/mysql/pid下创建文件mysql.pid

7.初始化数据库

进入mysql的bin目录

cd /root/java/mysql/mysql-5.7.33-linux-glibc2.12-x86_64/bin

执行当前目录下的mysqld命令,进行初始化。

./mysqld --defaults-file=/etc/my.cnf --user=mysql --initialize

*--defaults-file参数一定要放在第一个,不然会报错[ERROR] unknown variable 'defaults-file=/etc/my.cnf'。

参考

linux 服务器 部署nest项目_java_07

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

linux 服务器 部署nest项目_bc_08

是因为没有安装libaio.so,执行yum命令安装即可。

yum install -y libaio

执行结果

linux 服务器 部署nest项目_mysql_09

记住临时密码,后面登录要用

W*lj:eu+r7y-

8.将mysql加入开机启动(不是这条命令)

chkconfig --add /root/java/mysql/mysql-5.7.33-linux-glibc2.12-x86_64/bin/mysqld

linux 服务器 部署nest项目_linux 服务器 部署nest项目_10

9.启动mysql

将mysql.server复制到目录/etc/rc.d/init.d下,命名为mysql。

cp /root/java/mysql/mysql-5.7.33-linux-glibc2.12-x86_64/support-files/mysql.server /etc/rc.d/init.d/mysql

启动mysql

service mysql start

linux 服务器 部署nest项目_mysql_11

重启是service mysql restart,有任何配置修改都要重启mysql。

查看当前mysql相关进程

ps -ef|grep mysql

mysql启动成功

linux 服务器 部署nest项目_bc_12

不想每次都到mysql安装目录的bin目录下启动mysql,执行下面命令后可以直接执行类似mysql-u root -p 的命令

ln -s /root/java/mysql/mysql-5.7.33-linux-glibc2.12-x86_64/bin/mysql /usr/bin/mysql

*启动mysql的时候出现报错

The server quit without updating PID file(xxx路径下的xxx.pid)

解决:

这步我不确定有没有作用。我的问题有可能是通过修改my.cnf中的某些参数路径,文件夹权限解决的。

参考

在文件/etc/rc.d/init.d/mysql中这个位置加上--user=mysql

位置不太好找,在start模块里加上--user=mysql

linux 服务器 部署nest项目_mysql_13

linux 服务器 部署nest项目_bc_14

10.登录mysql,修改密码

登录mysql,密码填之前那个临时密码

./mysql -u mysql -p

有些人直接填写之前临时密码就ok了,这步后面不用看了。

但我这里一致在报错,下面列举我碰到的问题。

10.1 出现报错

ERROR 2002 (HY000): Can't connect to local MySQL server through socket 'socket=/var/lib/mysql/mysql.sock' (2)

(参考)

我通过它的解决方案一解决的:http://aiezu.com/article/mysql_cant_connect_through_socket.html

我通过这个解决:

(1)检查my.cnf中三个地方是否都配置好了socket

linux 服务器 部署nest项目_linux 服务器 部署nest项目_15

(2)添加软连接

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

重启mysql

10.2 出现报错

ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: YES)

linux 服务器 部署nest项目_mysql_16

解决:

(1)在my.cnf设置跳过密码授权

在配置文件my.cnf中[mysqld]加上

skip-grant-tables

linux 服务器 部署nest项目_mysql_17

(2)密码直接 空格回车,成功进入。

linux 服务器 部署nest项目_mysql_18

(3)切换数据库

use mysql;

(4)修改用户root的密码

update user set authentication_string=password('root') where user='root';

再次修改密码

linux 服务器 部署nest项目_java_19

alter user 'root'@'localhost' identified by 'root';

(5)指定授权:前一个引号里用户名,后一个引号里是密码

参考

a.使用 用户/密码,从任何主机连接到mysql服务器

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

b.使用 用户/密码,从当前主机连接到mysql服务器

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION;

(6)刷新权限

flush privileges;

到此结束

11.设置mysql开机启动

添加软链接

ln -s /root/java/mysql/mysql-5.7.33-linux-glibc2.12-x86_64/support-files/mysql.server  /etc/rc.d/init.d/mysql

12.远程连接设置

到这里,是无法使用navicat远程访问数据库的,需要再设置一些东西。

[参考]

(我没有开启防火墙,所以防火墙设置不用管)

(1)启动mysql

# service mysql start

(2)切换到mysql数据库

mysql> use mysql;

(3)开放远程连接

update user set host = '%' where user = 'root';

执行这条命令,可能出现报错Duplicate entry '%-root' for key 'PRIMARY',不影响结果 忽视即可。出现这条报错的原因是user表里有两条user=root的记录。

(4)刷新权限

flush privileges;

(5)查看user表的user和host

select host, user from user;

linux 服务器 部署nest项目_bc_20

如果root有两个host:%和localhost,就设置成功了。

13.使用navicat远程连接mysql

参考

navicat需要填写常规和SSH两页信息

注意:SSH的用户和密码是服务器的远程连接中设置密码。

  • 常规

linux 服务器 部署nest项目_mysql_21

  • 服务器的远程连接在这里先设置

linux 服务器 部署nest项目_mysql_22

  • SSH

linux 服务器 部署nest项目_java_23