阿里云服务器linux环境搭建SSM项目(二)--linux环境配置mysql5.7.md

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

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


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


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



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

添加系统mysql组

groupadd mysql

添加mysql用户

useradd -r -g mysql mysql

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

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

cat /etc/group |grep mysql


查看用户,文件/etc/passwd

cat /etc/passwd


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


*mysql编码使用utf8mb4:

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

https://www.cnblogs.com/beyang/p/7580814.html


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'

参考

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

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

yum install -y libaio



执行结果

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

W*lj:eu+r7y-



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

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



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

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


查看当前mysql相关进程

ps -ef|grep mysql

mysql启动成功


不想每次都到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



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

https://blog.csdn.net/sihai12345/article/details/73380649


我通过这个解决:

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

(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)


解决:

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

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

skip-grant-tables

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

(3)切换数据库

use mysql;

(4)修改用户root的密码

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

再次修改密码

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远程访问数据库的,需要再设置一些东西。

[参考]

https://blog.csdn.net/weixin_43493122/article/details/96281220(我没有开启防火墙,所以防火墙设置不用管)


(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;

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



13.使用navicat远程连接mysql

参考

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

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


  • 常规


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

  • SSH

posted @ 2021-03-22 00:59  musecho  阅读(111)  评论(0编辑  收藏  举报