介绍
在MySQL官方文档中了解到,CentOS操作系统下的MySQL安装可以有三种方式,分别是:
- YUM存储库安装
- 通用二进制包安装
- 源码安装
生产环境中,不建议使用源码安装,所以我这里只提供其他两种安装方式。另外说明一下,不建议使用的原因是源码安装过于复杂,并且在构建过程中选项会对性能和稳定性有很大影响。万一设置的不合理,导致数据库性能或稳定性出现了问题,岂不是悲剧了。对于不是很懂源码安装或者不需要对服务器进行定制的配置的话,使用二进制包安装即可(YUM存储库也是二进制包,只不过包管理方式不同罢了)。MySQL官方对于每个二进制包的发布都进行了大量的测试,以找到使用最佳选项进行构建。
环境说明
本次安装的所有示例均运行在如下环境:
CentOS的版本:CentOS 7.9 2009
MySQL的版本:MySQL社区版5.7.35
安装
YUM存储库安装
使用YUM库安装通常使用在服务器能够访问到外网,直接下载YUM包。
1、下载MySQL YUM库
从官网下载对应服务器版本的YUM库,CentOS7版本直接下载Red Hat Enterprise Linus 7/Oracle Linux 7即可。
官网地址:https://dev.mysql.com/downloads/
我这里是获取到链接地址后,直接下载到CentOS的/usr/local/src目录下。
[root@localhost src]# wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
2、安装发行包
下载后,我们直接使用RPM安装它。安装成功后,会在/etc/yum.repo.d目录下发现两个新的源文件,分别是mysql-community.repo和mysql-community-source.repo。
[root@localhost src]# rpm -ivh mysql80-community-release-el7-5.noarch.rpm
3、选择发行版
安装完成后,我们需要配置使用的MySQL版本。默认情况下它会选择最新的稳定版,但由于我这里是使用MySQL5.7版本,所以还需要禁用最新的版本,并启用5.7的版本。
列出存储库中的所有版本信息
[root@localhost src]# yum repolist all | grep mysql
从图中看到,它默认已经帮我们启用了mysql8.0的版本。
禁用mysql8.0版本
[root@localhost src]# yum-config-manager --disable mysql80-community
启用mysql5.7版本
[root@localhost src]# yum-config-manager --enable mysql57-community
再次列出存储库中的所有版本信息
[root@localhost src]# yum repolist all | grep mysql
4、安装MySQL服务
配置好发行版本后,我们就可以直接使用yum下载并安装相应的MySQL版本了。
[root@localhost src]# yum install -y mysql-community-server
5、配置MySQL服务
在安装好MySQL后,我们不要立即启动,先将默认的存储地址修改下,毕竟默认是存储在/var目录下。由于我这里是虚拟机,没有多余的硬盘,就直接将其指定到/usr/local/mysql目录下。
[root@localhost src]# vim /etc/my.cnf
新增或编辑以下内容,参数根据自己的实际情况去选择,如果不清楚也可以按我的设置去配置。
[mysqld]
datadir=/usr/local/mysql
socket=/usr/local/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/usr/local/mysql/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid
explicit_defaults_for_timestamp=true
tls_version=TLSv1.2
user=mysql
[client]
socket=/usr/local/mysql/mysql.sock
参数说明:
- [mysqld] 下面的参数都是mysqld配置
- datadir 存储数据的目录
- socket socket文件目录
- symbolic-links 是否支持符号链接
- log-error mysql日志文件目录
- pid-file 记录mysql进程号的文件
- explicit_defaults_for_timestamp 启用后,当表中的其他列更新时,即使没有更新timestamp类型的字段,它也会记录本次更新的时间。
- tls_version tls版本
- user 指定启用数据库时使用的用户
- [client] 下面的参数都是client配置
- socket socket文件目录
6、关闭Selinux
配置好MySQL的参数后,我们还需要关闭Selinux,否则直接启动数据库会报错。
[root@localhost src]# setenforce 0
7、开启firewalld的端口
MySQL的默认端口是3306,如果没有指定mysql的端口号,则开放默认端口。
检查firewalld状态
[root@localhost src]# systemctl status firewalld.service
开放3306端口
[root@localhost src]# firewall-cmd --permanent --zone=public --add-port=3306/tcp
重启firewalld
[root@localhost src]# systemctl restart firewalld
8、启动MySQL服务
所有参数配置好后,启动MySQL服务。MySQL在首次启动时,如果检测到数据目录为空,则会进行以下操作:
- 自动初始化
- 生成ssl证书和密钥文件
- validate_password插件安装并启用
- 创建root用户并随机生成密码记录到日志文件中。
[root@localhost src]# systemctl start mysqld
9、查看默认生成的root密码
MySQL服务正常启动后,查看临时生成的root密码,密码存储在刚刚配置的log-error文件中。
[root@localhost src]# grep 'temporary password' /usr/local/mysql/mysqld.log
10、使用临时密码登录数据库
[root@localhost src]# mysql -uroot -p
11、修改root密码并刷新权限
使用yum安装的会自动有配置密码校验,所以尽量不要使用过于简单的密码。
打开MySQL Shell命令窗口
[root@localhost src]# mysql/bin/mysql -uroot -p
修改MySQL数据库的root用户的访问权限及密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
参数介绍:
- localhost 表示只有本地能访问数据库,本地也就是安装MySQL数据库的服务器。如果想让其他客户端访问的话,将@后面的引号部分修改为%,则表示所有客户端都可以访问。除此之外,你还可以指定ip地址段访问,例如只想让192.168.0段的ip访问的话,则可以设置成192.168.0.%。
修改后,刷新权限表
mysql> flush privileges;
二进制包安装
建议在内网环境使用此安装方式。
1、移除mariadb
CentOS 7已经默认安装mariadb了,我们将它移除。
检查是否安装mariadb
[root@localhost src]# rpm -qa|grep mariadb*
移除mariadb
[root@localhost src]# yum -y remove mariadb-libs*
2、下载二进制包
在下载MySQL之前,我们需要知道MySQL数据库的版本划分。从官网了解到,MySQL分为开发版本和可用性版本(GA)。开发版本是有最新的功能,但稳定性不如GA版本。因此,我们必须在服务器中使用GA版本。
官网下载地址:https://dev.mysql.com/downloads/mysql/
进入到临时目录
[root@localhost ~]# cd /usr/local/src
使用wget下载安装包
[root@localhost src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35-el7-x86_64.tar
3、解压tar并重命名
解压tar
[root@localhost src]# tar -xvf mysql-5.7.35-el7-x86_64.tar
解压tar.gz
[root@localhost src]# tar -xvf mysql-5.7.35-el7-x86_64.tar.gz
重命名解压文件
[root@localhost src]# mv mysql-5.7.35-el7-x86_64 mysql
4、新增用户和组,配置环境变量
根据官网中,这里新增的用户是不具有登陆会话权限的,也就是表示着你只能用其他用户来管理mysql。
新增mysql组
[root@localhost src]# groupadd mysql
新增mysql用户并加入组
使用-s /bin/false参数指定mysql不允许登录ssh会话
[root@localhost src]# useradd -r -g mysql -s /bin/false mysql
配置环境变量
[root@localhost src]# export PATH=$PATH:/usr/local/src/mysql/bin
5、创建数据存储目录,并授权
这里通常是设置成磁盘空间较大的位置。
创建数据存储目录
[root@localhost src]# mkdir -p /usr/local/mysql
授权目录及子目录为mysql所有
[root@localhost src]# chown -R mysql:mysql /usr/local/mysql
6、配置参数文件
编辑配置文件
[root@localhost src]# vim /etc/my.cnf
新增或编辑以下内容,参数根据自己的实际情况去选择,如果不清楚也可以按我的设置去配置。
[mysqld]
basedir=/usr/local/src/mysql
datadir=/usr/local/mysql
socket=/usr/local/mysql/mysql.sock
explicit_defaults_for_timestamp=true
tls_version=TLSv1.2
[mysqld_safe]
log-error=/usr/local/mysql/mysql.log
pid-file=/usr/local/mysql/mysql.pid
user=mysql
[client]
socket=/usr/local/mysql/mysql.sock
参数说明:
- [mysqld] 下面的参数都是mysqld配置
- basedir 数据库文件目录,可以理解为tar包解压后的目录
- datadir 存储数据的目录
- socket socket文件目录
- explicit_defaults_for_timestamp 启用后,当表中的其他列更新时,即使没有更新timestamp类型的字段,它也会记录本次更新的时间。
- tls_version tls版本
- [mysqld_safe] 下面的参数都是mysqld_safe配置
- log-error mysql日志文件目录
- pid-file mysql.pid文件目录
- user 用户,表示什么用户启动的mysql
- [client] 下面的参数都是client配置
- socket socket文件目录
7、初始化数据目录
这里可以理解为开始安装,也就是构建mysql数据库了。它会自动生成一个root密码,需要我们连接进去后改密码。
初始化数据库
[root@localhost src]# mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql
8、开放firewalld端口
检查firewalld状态
[root@localhost src]# systemctl status firewalld.service
开放3306端口
MySQL的默认端口是3306,如果没有指定mysql的端口号,则开放默认端口。
[root@localhost src]# firewall-cmd --permanent --zone=public --add-port=3306/tcp
重启firewalld
[root@localhost src]# systemctl restart firewalld
9、启动数据库
启动数据库我们可以使用mysqld,也可以使用mysqld_safe,官方建议我们使用mysqld_safe启动。加&表示以后台进程启动,不加的话是作为前台进程启动,在shell断开或手动关闭后,数据库也会关闭。
启动数据库
[root@localhost src]# mysql/bin/mysqld_safe &
10、初始化root密码
启动数据库后,我们开始初始化密码。初始化密码,简单来说就是将root用户的密码给修改掉,不要使用默认的。
打开MySQL Shell命令窗口
[root@localhost src]# mysql/bin/mysql -uroot -p
修改MySQL数据库的root用户的访问权限及密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
参数介绍:
- localhost 表示只有本地能访问数据库,本地也就是安装MySQL数据库的服务器。如果想让其他客户端访问的话,将@后面的引号部分修改为%,则表示所有客户端都可以访问。除此之外,你还可以指定ip地址段访问,例如只想让192.168.0段的ip访问的话,则可以设置成192.168.0.%。
修改后,刷新权限表
mysql> flush privileges;
结束
至此,mysql数据库的两种安装方式都已安装完成。
评论区