阿里云服务器linux环境搭建SSM项目(二)--linux环境配置mysql5.7.md
阿里云服务器搭建SSM项目(二)
在服务器上配置数据库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