本文主要介绍centos8环境下,mysql-5.7.26的安装过程及自启动配置
centos8安装mysql及自启
前言
听说mysql要商业化了,很多公司都把数据库改成了Mariadb,那我为什么还要在这个时候写这个文章呢?
哎…一言难尽啊。
简单来说,最近在搞sonarqube,但是高版本的不支持mysql,并且没有pdf导出插件,只能退而求其次,降低soanrqube,那么问题来了,sonarqube-7.6是最后一版支持mysql,并且也找到了合适的pdf插件,想着学习一个技能就把东西吃透(那是不可能的,纯属手贱),安装个兼容版本的mysql。谁知道遇到了一大堆问题。
一世英名,完好无损。
一、mysql下载
下载地址:法师开的小门,10G
二、安装步骤
1.解压文件
将文件上传至规划好的目录下,并执行解压命令:
tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
修改解压后的文件名(linux 没有单独的改名命令):
mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql-5.7.26
2.创建、赋予权限
创建用户组:
groupadd mysql
创建用户:
useradd -r -g mysql mysql
查看用户组信息:
groups mysql
展示如下,即添加成功:
创建数据存储目录:
cd /home/mysql/mysql-5.7.26 && mkdir data
把data目录交给mysql来管理:
chown -R mysql:mysql /home/mysql/mysql-5.7.26/data
执行以下命令,查看效果:
cd /home/mysql/mysql-5.7.26 && ll
如下则设置成功:
三、启动mysql
1.配置mysql
执行命令,切换到安装目录:
cd /home/mysql/mysql-5.7.26
话说mysql怎么确定执行哪个配置文件呢?其实我们是可以看到mysql查找my.cnf的顺序的。
执行命令:
./bin/mysql --help|grep my.cnf
新增配置文件,名字为my.cnf
:
vim my.cnf
配置文件中输入:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/home/mysql/mysql-5.7.26
# 设置mysql数据库的数据的存放目录
datadir=/home/mysql/mysql-5.7.26/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
#日志存放目录
log-error=/home/mysql/mysql-5.7.26/data/mysqld.log
pid-file=/home/mysql/mysql-5.7.26/data/mysqld.pid
保存文件。
2.初始化数据库
在安装目录执行命令:
./bin/mysqld --initialize --user=mysql --basedir=/home/mysql/mysql-5.7.26/ --datadir=/home/mysql/mysql-5.7.26/data/
3.启动mysql
在安装目录执行:
./home/mysql/mysql-5.7.26/support-files/mysql.server start
执行命令,查看mysql进程是否启动:
ps -ef|grep mysql
4. 登录、修改密码
在安装目录执行:
./bin/mysql -u root -p
输入上面截图中的密码,我这边是+sfn*Pllj7Ag
登录成功后,先修改密码,123456是我的密码:
alter user 'root'@'localhost' identified by '123456';
开放远端登录权限:
update mysql.user set host='%' where user='root';
刷新:
flush privileges;
四、设置开机自启
centos8已经不再建议通过rc.local或者使用软连接方式设置自启,我们这次通过把mysql注册成服务来完成自启操作。
执行命令:
vim /lib/systemd/system/mysql.service
上面命令是创建mysql.service并且编辑,这时候输入以下内容:
[Unit]
Description=MySQL Server(5.7.26)
# Documentation=main:mysqld(5.7.26)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
#After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=root
Group=root
PIDFile=/home/mysql/mysql-5.7.26/data/mysqld.pid
ExecStart=/home/mysql/mysql-5.7.26/support-files/mysql.server start
ExecStop=/home/mysql/mysql-5.7.26/support-files/mysql.server stop
Restart=on-failure
LimitNOFILE=5000
保存文件,并执行:
systemctl daemon-reload
关闭当前mysql服务,先查看是否在启动中:
ps -ef|grep mysql
如果如下图所示,则使用命令关闭服务:
执行命令:
kill -9 2137 2394
通过注册的服务启动mysql:
systemctl start mysql.service
通过注册的服务查看mysql:
systemctl status mysql.service
通过注册的服务停止mysql:
systemctl stop mysql.service
如果想要尝试的话,可以通过reboot来重启服务器,来确定下是否已开启自启。前提是,先执行这个命令:
systemctl enable mysql.service
五、FAQ
1. SSL未关闭
报错信息:
[Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
解决方案:
在my.cnf
的[mysqld]
标签下设置:
skip-ssl
2. bin目录下mysqld脚本后不能跟随start或者stop
报错信息如下:
[ERROR] Too many arguments (first extra is 'start').
[Note] Use --verbose --help to get a list of available options!
[ERROR] Aborting
解决方案:
使用support-files
目录下的mysql.server
来启动/停止mysql
3. 自启服务注册后,启动后自动停止
在执行过ExecStart后直接执行ExecStop
状态信息展示如下:
解决办法,在mysql.service
中添加下面这行:
PIDFile=/home/mysql/mysql-5.7.26/data/mysqld.pid
4. SELinux 未关闭
报错信息如下:
4月 21 14:15:51 localhost.localdomain setroubleshoot[5327]: AnalyzeThread.run(): Set alarm timeout to 10
4月 21 14:15:51 localhost.localdomain setroubleshoot[5327]: AnalyzeThread.run(): Cancel pending alarm
4月 21 14:15:51 localhost.localdomain setroubleshoot[5327]: failed to retrieve rpm info for /home/mysql/mysql-5.7.26/support-files/mysql.server
4月 21 14:15:52 localhost.localdomain setroubleshoot[5327]: SELinux is preventing /usr/lib/systemd/systemd from 'read, open' accesses on the file /home/mysql/mysql-5.7.26/support-files/mysql.server. For complete SELinux messages run: sealert -l 2e4574ff-3622-4186-890a-f62c056d34cb
4月 21 14:15:52 localhost.localdomain setroubleshoot[5327]: SELinux is preventing /usr/lib/systemd/systemd from 'read, open' accesses on the file /home/mysql/mysql-5.7.26/support-files/mysql.server.
***** Plugin catchall (100. confidence) suggests **************************
If you believe that systemd should be allowed read open access on the mysql.server file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c '(l.server)' --raw | audit2allow -M my-lserver
# semodule -X 300 -i my-lserver.pp
解决方案,说起来简单也是很简单,但是对于初学者或者不熟悉linux或者英文不好的人,那真的是一种折磨:
首先,看最后两行,人家已经提示了:
其次,分别执行上面的两行命令:
ausearch -c '(l.server)' --raw | audit2allow -M my-lserver
semodule -X 300 -i my-lserver.pp
最后,如果问题还是解决不了,那么关闭SELiunx
吧,这是一种安全策略,此处引用一个网址:https://www.cnblogs.com/activiti/p/7552677.html
,不是本人写的,但是可以一起学一下。
总结
学习之路太难了,时时刻刻在遭受社会的毒打,但是除了学习,提升自己还能做什么?耐心与坚持缺一不可。加油~骚年