linux下安装MySQL5.7及遇到的问题总结

linux下安装MySql5.7.24

一. 准备工作

1.1 检查是否安装过mysql

rpm -qa | grep mysql

 

 

 我这台机器没有安装过mysql,所以上述命令输出为空,
否则要执行如下命令删除mysql:

rpm -e --nodeps * #(*为上一个命令输出结果)

1.2 查询并删除所有mysql对应的文件夹

查找所有mysql对应的文件夹

whereis mysql

 find / -name mysql # 这里要切换到root账户,否则可能会出现目录没有权限的问题

删除上述的全部文件夹:

rm -rf /etc/selinux/targeted/active/modules/100/mysql /usr/lib64/mysql /usr/share/mysql /usr/lib64/mysql /usr/share/mysql
# 注意 : 对rm -rf命令的使用一定要谨慎!! 建议先在文本编辑器上编辑好,执行时一定要再三确认! 尤其是在生产环境!

 

 

 确认下mysql相关目录是否清除干净:

find / -name mysql
whereis mysql

1.3.检查mysql用户组和用户是否存在,没有要创建

cat /etc/group | grep mysql
cat /etc/passwd |grep mysql
groupadd mysql
useradd -r -g mysql mysql

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
# 首先尝试使用wget命令直接下载...

执行如下图 : (速度高达每秒10K, 12小时就可以下载完…)

1.4.下载linux对应的mysql安装包

到这里,我只能说,对不起,打扰了!

接着尝试着去官网下载

mysql官网下载链接, 选择社区版
点击looking for previous GA versions ,下载较早版本

。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。

此处省略。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。

1.5.文件上传

我这里将tar.gz文件上传到了

/opt/module

文件夹下,这里可根据自己的需要和规划自定义设置

在这里插入图片描述

注意 : 如果是使用wget命令,默认文件会下载到执行wget命令的目录下
这个时候,需要在合适的目录执行wget命令
或者使用mv操作,将tar.gz文件移动到合适的位置

二. 正式安装MySQL

2.1. 解压mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz文件

tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

解压之后结果如下:

# 将mysql-5.7.24-linux-glibc2.12-x86_64文件夹重明名为mysql
mv /opt/module/mysql-5.7.24-linux-glibc2.12-x86_64 /opt/module/mysql

2.2 在mysql解压目录下新建data目录

mkdir /opt/module/mysql/data

2.3. 更改mysql目录下所有的目录文件及文件夹所属的用户和组,更改文件夹权限

chown -R mysql:mysql /opt/module/mysql
chmod -R 755 /opt/module/mysql

2.4. 编译安装mysql

cd /opt/module/mysql/bin 

./mysqld --initialize --user=mysql --datadir=/opt/module/mysql/data --basedir=/opt/module/mysql

运行结果如下图:

 

 

 

请务必记住初始化输出日志末尾的内容(数据库管理员临时密码)!!!我把自己输出日志的文字内容全部截取出来!

2020-04-16T11:25:57.726087Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp serveroption (see documentation for more details).
2020-04-16T11:25:57.726242Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2020-04-16T11:25:57.726257Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
2020-04-16T11:25:57.735098Z 0 [Warning] ./mysqld: ignoring option '--innodb-file-per-table' due to invalid value '64'
2020-04-16T11:25:58.482391Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-04-16T11:25:58.639002Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-04-16T11:25:58.740607Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 0b96a796-7fd5-11ea-b583-000c29df67f8.
2020-04-16T11:25:58.744135Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-04-16T11:25:58.745668Z 1 [Note] A temporary password is generated for root@localhost: fsi%Sg&U<5VY

这里**root@localhost:**后的字符串,我这里是:

fsi%Sg&U<5VY

为mysql管理员临时登录密码

2.5. 编辑配置文件my.cnf

[root@linux01 bin]# vi /etc/my.cnf

修改配置项:

datadir

log-error
pid-file

 

 

 添加配置项:

sql_mode
max_connections
innodb_file_per_table
lower_case_table_names
basedir
[client]
port
socket

修改后配置如下:

[mysqld]
datadir=/opt/module/mysql/data
#socket=3306
socket=/var/lib/mysql/mysql.sock

basedir=/opt/module/mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
max_connections=400
innodb_file_per_table=64
lower_case_table_names=1
# 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=/opt/module/mysql/log/mariadb/mariadb.log
pid-file=/opt/module/mysql/run/mariadb/mariadb.pid
[client]
port=3306
socket=/var/lib/mysql/mysql.sock

 

 

 

2.6. 创建log-error,pid-file,socket对应目录并赋予权限

mkdir -vp /opt/module/mysql/log/mariadb #递归创建目录
chown -R mysql:mysql /opt/module/mysql/log 
chown -R mysql:mysql /opt/module/mysql/log/mariadb 
chmod -R 755 /opt/module/mysql/log/mariadb
touch /opt/module/mysql/log/mariadb/mariadb.log

mkdir -vp /opt/module/mysql/run/mariadb #递归创建目录
chown -R mysql:mysql /opt/module/mysql/run
chown -R mysql:mysql /opt/module/mysql/run/mariadb
chmod -R 755 /opt/module/mysql/run

mkdir -vp /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql

2.7. 启动mysql服务器:

/opt/module/mysql/support-files/mysql.server start

出现以下输出证明服务启动成功!

 

 

 2.8. 添加软连接,并重启mysql服务:

 ln -s /opt/module/mysql/support-files/mysql.server /etc/init.d/mysql
 ln -s /opt/module/mysql/bin/mysql /usr/bin/mysql
 ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
 service mysql restart

 

 

 2.9 登录mysql,修改密码(密码为步骤2.4生成的临时密码)

mysql -u root -p

set password for root@localhost = password('yourpassword');

2.10 开放远程连接

mysql> use mysql;
mysql> update user set user.Host='%' where user.User='root';
mysql> flush privileges;

2.11 设置开机自动启动

cp /opt/module/mysql/support-files/mysql.server /etc/init.d/mysqld #将服务文件拷贝到init.d下,并重命名为mysqld
chmod +x /etc/init.d/mysqld #赋予可执行权限
chkconfig --add mysqld #添加服务
chkconfig --list # 显示服务器列表

至此,mysql彻底安装成功 

三. 安装中遇到的问题

3.1. 启动mysql时报错:

报错1:

[root@linux01 mysql-5.7.24-linux-glibc2.12-x86_64]# /opt/module/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/support-files/mysql.server start
/opt/module/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/support-files/mysql.server:行239: my_print_defaults: 未找到命令
/opt/module/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/support-files/mysql.server: 第 259 行:cd: /usr/local/mysql: 没有那个文件或目录

 

 原因 :编辑配置文件my.cnf时,没有配置basedir属性

解决办法:

[root@linux01 bin]# vi /etc/my.cnf 
basedir=/opt/module/mysql/ # 这里根据个人实际情况配置

报错2:

Starting MySQL.2020-04-16T08:30:15.375180Z mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Createwritable for user 'mysql'.

报错原因:log-error文件夹没有创建或者log-error文件夹mysql用户缺乏相关权限

解决办法:

mkdir /var/log/mariadb
chown -R mysql:mysql /var/log/mariadb
chmod -R 755 /var/log/mariadb

报错3:

[root@linux01 mysql-5.7.24-linux-glibc2.12-x86_64]# /opt/module/mysql/support-files/mysql.server start
Starting MySQL.. ERROR! The server quit without updating PID file (/opt/module/mysql/data/linux01.pid).

a. 首先怀疑mysql进程是否已经启动

ps -ef|grep mysqld

 

 这里并没有查看到mysql相关进程,证明不是该原因导致

b.怀疑是selinux惹的祸,如果是centos系统,默认会开启selinux

vi /etc/selinux/config
# 将SELINUX=enforcing改为SELINUX=disabled,重启服务器

 

 

问题仍然没有解决

后面又试了N多种方案, 都没有能够解决问题,失败的方法就不一一列举…

c.根据过往的经验,一般linux出现让人束手无策的问题,都是权限的锅
于是,开始着手相关目录的权限排查, 不排查不知道,一排查吓一跳!!

 

 

录,run目录的权限居然是root!!罪魁祸首找到了!

原因: 最初执行的赋权命令为:

chown -R mysql:mysql /opt/module/mysql/run/mariadb
chown -R mysql:mysql /opt/module/mysql/log/mariadb 

是以root用户的身份执行的,它们的父目录仍然为root权限,也因此导致了mysql启动失败

解决方案 :

chown -R mysql:mysql /opt/module/mysql/log
chown -R mysql:mysql /opt/module/mysql/run

 

 之后重启mysql,启动成功!!

 

 linux使用一定要注意权限问题!!!
linux使用一定要注意权限问题!!!
linux使用一定要注意权限问题!!!

3.2 mysql通过账户名密码登陆报错:

[root@linux01 lib]# mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

 

 这次学聪明,首先考虑是否是权限问题:

chown -R mysql:mysql /var/lib/mysql

赋权后,该问题依然存在.

解决方案,添加client配置项

vi /etc/my.cnf
#添加如下内容
[client]
port=3306
socket=/var/lib/mysql/mysql.sock

和最初的my.cof文件对比下感受下区别

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# 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/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

添加完之后,再次执行,问题得到解决!

 
 




 






posted @ 2021-09-11 02:17  vekair  阅读(1260)  评论(0编辑  收藏  举报