期目录:
上期教程我们学习了环境变量,这期教程我们将学习如何在Linux上安装MySQL。
一、安装方式一
1.1 安装mysql的yum仓库
1.1.1 下载
我们可以去官网(MySQL :: Download MySQL Yum Repository)选择自己想要的版本rpm包。
这里以mysql8为例。
那么该怎么去下载呢?
- 方式1:直接去官网下载好然后将下载好的rpm包上传到Linux虚拟机里面。
- 方式2:直接使用wget进行安装。
这里我们使用wget进行安装。
补充:
wget是一个常用的命令行工具,用于从网络上下载文件。它支持HTTP、HTTPS和FTP协议,可以通过命令行直接进行文件的下载,甚至可以在没有用户交互的情况下进行批量下载或自动化下载任务。
如果我们想要使用wget,需要先下载wget。
yum install wget
下面我们就可以使用wget了。
wget [选项] url
wget命令常见选项如下所示:
- -O:将下载的文件保存为指定的文件名,而不是默认的文件名。
- -c:从上次中断的地方继续下载文件,这对于大文件或断点续传非常有用。假设下载过程中发生了中断,可以重新执行wget命令继续下载,而不是重新开始。
- -q:静默运行,不输出任何下载信息。适用于不需要显示过程的脚本或自动化任务。
- -r:递归下载网站内容。使用此选项时,wget将下载整个网站或指定路径下的所有文件和子目录。
- -np:用于与-r一起使用,防止下载父目录中的内容。
- -A:限制下载特定类型的文件。
- -R:与-A 相反,-R选项可以排除不需要下载的文件类型。
- --limite-rate=RATE:限制下载速率。对于带宽有限制的网络,可以使用此选项限制wget的下载速度。
- -b:在后台下载文件。当需要启动一个长时间运行的下载任务时,可以使用这个选项,它将 wget进程放到后台运行,并且不会阻塞终端。下载进度和日志会写入到一个名为wget-log的文件中。
- -nd:不创建目录结构,下载的文件将直接保存到当前工作目录中。
- -nH:下载文件时,不会在本地创建主机名目录,所有文件将直接保存到当前目录中。
- --user-agent=STRING:使用指定的用户代理字符串。通常,用于模拟不同浏览器或操作系统的下载请求。
- --no-check-certificate:跳过SSL证书验证。对于一些不受信任的HTTPS服务器或自签名证书的情况,使用此选项来避免验证证书。
- -i:可以使用一个包含多个URLs的文件进行批量下载。
- -l:若只想下载网站的部分内容而不是整个网站,可以使用-l选项来设置递归下载的深度。
下面我们就开始使用wget安装mysql8的rpm包。
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
这里我是直接将mysql80-community-release-el7-3.noarch.rpm安装再root家目录里面的,我们自己在安装的时候可以选择合适的位置去安装。
1.1.2 安装
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
注意:这里的rpm包名要和自己前面通过wget下载的保持一致。
yum repolist enabled | grep "mysql.*-community.*"
安装好以后我们可以来验证一下。
1.2 启用mysql仓库
由于我们下载的是mysql8的仓库,因此默认情况下,yum仓库会启用 MySQL 8.0。
当然我们也可以手动去关闭和开启仓库。
yum-config-manager --enable 仓库名称
yum-config-manager --disable 仓库名称
上述命令中的enable用于开启仓库,而disable用于关闭仓库。
例如:
yum-config-manager --enable mysql80-community
注意:yum-config-manager是由yum-utils工具包提供的命令,因此我们需要通过命令“yum install yum-utils”去下载。
1.3 安装mysql
安装好并启用了mysql仓库以后我们就可以去安装mysql了。
yum install mysql-community-server
注意:这里在安装mysql的时候可能会报错,当然它没有报错的话就不用去理会它。
例如这里我在安装的时候就遇到了GPG密钥错误。
若遇到了密钥的错误,我们就需要考虑mysql仓库的密钥是否存在。
通过检查密钥发现密钥是存在的,那么只能说明一个问题这里GPG密钥和安装的mysql8不匹配。
注意:如果报错不存在密钥就去import导入即可。
这里由于我们下载的mysql版本为8.0因此improt最新版的密钥后还是会报错,说密钥和安装包不匹配,当然我们若是安装的是最新版mysql,那么可能就不会存在这个错误。
那么该怎么去解决呢?
这里的解决方案有两种。
方式一:自己创建GPG密钥并导入(推荐)
首先我们打开mysql官网去复制mysql8版本对应的GPG密钥。
官网地址:MySQL :: MySQL 8.0 Reference Manual :: 2.1.4.2 Signature Checking Using GnuPG
注意:在进入官网复制密钥的时候一定要根据自己mysql的版本来,比如我这里是mysql8.0。
进入官网以后点击旁边的复制按钮即可。
接下来我们需要在/etc/pki/rpm-gpg目录下新建一个mysql_pubkey.asc文件,并将刚才复制的密钥粘贴进去。
vi /etc/pki/rpm-gpg/mysql_pubkey.asc
接下来我们我们就可以打开mysql的仓库文件并去修改里面的密钥映射。
打开以后九江gpg替换为我们刚才所创建的mysql_pubkey.asc文件。
接下来我们清除一下缓存。
yum clean all
下面我们再次去尝试安装mysql。
yum install mysql-community-server
再次执行上述命令的时候就发现mysql服务和mysql客户端都已经安装好了。
方式二:绕过GPG验证(不推荐)
如果能够确信包是安全的,但依然想跳过 GPG 密钥验证,可以临时禁用 GPG 检查。但这种方法不推荐使用,因为会降低系统的安全性。
在使用rpm安装时添加--nosignature。
rpm -ivh --nosignature mysql-community-client-plugins-8.0.40-1.el7.x86_64.rpm
当然我们也可以直接去mysql的仓库文件里面将gpgcheck的值改为0也行。
1.4 查看mysql版本
安装好mysql以后我们可以检查一下mysql安装的版本。
mysql --version
1.5 开启mysql服务
由于我们使用的是yum安装的mysql,因此我们可以直接使用systemctl命令去管理mysql服务。
启动mysql服务
systemctl start mysqld
设置mysql开机自启
systemctl enable mysqld
检查mysql服务状态
systemctl status mysqld
1.6 获取mysql临时密码
MySQL 安装完成后,会生成一个临时的 root 密码,root账号是超级管理员,它的权限最高。
对于这个临时密码,我可以先进行复制后面我们要用到它。
1.7 mysql安全配置
我们可以通过运行mysql_secure_installation命令来设置mysql的安全性。
mysql_secure_installation
执行该命令后会提示以下几个问题:
- 输入当前 root 密码(临时密码)。
- 是否配置 VALIDATE PASSWORD 插件来加强密码安全(建议选择 "Y")。
- 设置 root 用户密码(建议更换为强密码)。
- 是否删除匿名用户(建议选择 "Y")。
- 是否禁止 root 远程登录(建议选择 "Y")。
- 是否删除测试数据库(建议选择 "Y")。
- 是否重新加载权限表(选择 "Y")。
在这里我们可以重新设置root账号的密码以及禁止root账号远程登录。
在后续我们使用root账号登录mysql服务器时我们就可以使用现在更改的新密码。
1.8 登录mysql服务
mysql -u root -p
输入新密码后,应该可以成功登录 MySQL。
1.9 创建可远程登录用户
对于root用户我们一般禁止远程登录并且对root账户进行严格的控制,因为root用户是超级管理员权限最高。
这里我们创建一个admin账户并且可以进行远程登录。
CREATE USER 'admin'@'%' IDENTIFIED BY 'S@5vTk!8dLr';
接下来我们可以给予admin用户权限。
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
设置好权限以后我们还需要进行刷新。
注意:这里为了方便就给amdin开放了所有权限,实际中并不会这样。
FLUSH PRIVILEGES;
1.10 设置防火墙
mysql服务创建好以后就可以在Linux系统中的防火墙设置端口放行以及相关的拦截。
这里我们可以在防火墙中设置对3306(mysql默认端口号)端口号进行放行。
firewall-cmd --zone=public --add-port=3306/tcp --permanent
放行以后需要重载,才能让放行规则生效。
firewall-cmd --reload
下面我们就来检查一下防火墙是否设置成功。
firewall-cmd --list-all
上图中可以看出防火墙对3306是设置成功了的。
虽然我们已经在防火墙里面对3306进行放行,但是admin用户可能还是不能远程访问。
默认情况下,MySQL 可能会配置为只允许本地连接。因此我们需要修改 MySQL 配置文件,以允许远程连接。
对于mysql的配置文件一般会安装在/etc/目录下,如果没有安装在里面,我们可以先去查询。
my.cnf
上图中我们可以看出配置文件中没有bind-address选项,因此是允许远程访问的,但我们可以将该选项添加上,也方便后期修改。
修改完mysql配置文件以后我们需要重启mysql服务。
systemctl restart mysqld
1.11 远程访问mysql
下面我们就可以在我们的电脑上通过可视化工具去远程访问linux虚拟机里面的mysql服务。
这里以Navict为例。
打开Nvicat以后点击左上角的连接并选择mysql。
接下来需要填写连接信息。
填写完信息后先点击测试连接若成功再点击确定。
现在我们就可以通过navicat去控制Linux系统中的mysql服务了。
1.12 设置mysql用户组
我们先来创建一个mysql用户组用于权限管理。
groupadd mysql
mysql在安装的时候会默认帮忙创建一个mysql用户组。
接下来可以创建一个与 MySQL 相关的用户,并将其添加到 mysql 用户组。
useradd -r -g mysql -s /bin/false mysql
上述命令的选项含义如下所示:
- -r:创建一个系统用户(无登录权限)。
- -g mysql:将用户添加到mysql用户组。
- -s /bin/false:禁止该用户登录。
下面开始设置MySQL数据目录的权限。
MySQL 的数据目录通常是/var/lib/mysql,您需要将该目录的所有权设置为mysql用户组,以便 MySQL 能够访问和管理数据。
chown -R mysql:mysql /var/lib/mysql
这将递归地将 MySQL 数据目录的所有文件的拥有者和用户组都更改为mysql。
下面我们继续设置文件系统权限。
现在还需要确保 MySQL 的相关目录和文件有合适的读写权限。
chown -R mysql:mysql /etc/my.cnf
chown -R mysql:mysql /etc/mysql/
二、安装方式二
方式一我们是通过yum进行安装的,下面我们通过下载mysql官网相关压缩安装包进行安装。
2.1 安装相关依赖包
MySQL 8 需要一些依赖包,首先确保系统已经安装了相关的依赖。
yum install -y wget gcc-c++ cmake ncurses-devel libaio-devel
2.2 下载mysql官方压缩包
进入mysql官网:MySQL :: Download MySQL Community Server
进入官网后选择适合我们自己系统架构的Linux-Generic版本。然后复制下载链接。假设我们使用的是 x86_64 版本的 Linux,可以使用wget来下载压缩包。
在此之前我们可以现在/opt目录下创建一个software文件见并跳转到该目录下。
接下来我们就可以下载压缩包了。
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar
2.3 解压缩
mysql压缩包下载好以后我们就可以使用tar命令去解压缩。
tar -xvf mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar
2.4 安装mysql
MySQL 官方的 RPM 包里包含了安装 MySQL 所需的所有组件。我们可以使用rpm来安装这些包。
rpm -ivh mysql-community-common-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.32-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.32-1.el7.x86_64.rpm
注意:安装的时候一定要注意安装顺序,因为这些包会存在着依赖关系。
2.5 查看mysql版本
安装好mysql后可以检查下是否安装成功以及mysql版本。
mysql --version
到此为止mysql就安装好了,后面的操作和方式一是一样的,这里就不多去赘述了。
三、卸载mysql
前面我们已经学习了安装mysql的两种方式,下面我们了解一下mysql的卸载。
首先我们需要先停止mysql服务。
systemctl stop mysqld
接着使用可以使用yum卸载安装的 MySQL 包。
yum remove mysql mysql-server mysql-libs mysql-common
为了确保删除干净我们可以搜索一下。
rpm -qa | grep mysql
该命令会列出已安装的mysql的相关安装包,有的话就卸载,没有就不管。
接下来我们需要删除mysql的各种文件。
rm -f /etc/my.cnf
rm -rf /etc/my.cnf.d/
rm -rf /var/lib/mysql/
rm -rf /var/log/mysql/
rm -f /var/log/mysqld.log
下面我们还需要去删除mysql用户组和相关用户。
userdel mysql
groupdel mysql
有时,yum remove命令可能会留下不再需要的依赖包,可以使用yum autoremove来清理这些依赖包。
最后,可以使用以下命令检查 MySQL 是否已被完全卸载。
which mysql
有的话就删除没有的话可以不用去理会。
四、安装方式三
下面我们来尝试另外一种安装方式。
4.1 下载压缩包
首先我们进入mysql官网根据系统架构选择对应的版本:MySQL :: Download MySQL Community Server (Archived Versions)
例如我这里选择8.0.3版本。
对于该压缩包的下载,我们可以在官网中下载下来然后再传输到Linux系统中,也可以直接使用wget下载。
这里我们选择将其下载到/opt/software目录下。
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.30-el7-x86_64.tar
4.2 解压缩
tar -xvf mysql-8.0.30-el7-x86_64.tar
tar -zxvf mysql-8.0.30-el7-x86_64.tar.gz
4.3 文件夹迁移&data目录
下面我们就将解压好的mysql-8.0.30-el7-x86_64文件夹移动到/usr/local下并改名为mysql8。
mv /opt/software/mysql-8.0.30-el7-x86_64 /usr/local/mysql8
接着在/usr/local/mysql8目录下创建一个data目录用于存储mysql数据。
mkdir /usr/local/mysql8/data
4.4 创建mysql用户组
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql /usr/local/mysql8/
chmod -R 755 /usr/local/mysql8/
4.5 初始化mysql
进入到mysql所在目录并执行相关命令。
cd /usr/local/mysql8
./bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql8/data --basedir=/usr/local/mysql8
mysql初始化以后会创建一个root账号并分配一个随机密码,我们需要复制下来。
4.6 创建mysq配置文件
vi /etc/my.cnf
创建好文件以后可以添加内容。
[client]
port = 3306
socket = /usr/local/mysql8/data/mysql.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
port = 3306
socket = /usr/local/mysql8/data/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
datadir = /usr/local/mysql8/data
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
接着给my.cnf设置权限。
chmod 777 /etc/my.cnf
4.7 制作&启动mysql服务
这里我先来创建一个mysqld服务单元。
vi /etc/systemd/system/mysqld.service
接着往里面填充内容。
[Unit]
Description=MySQL Community Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql8/bin/mysqld --defaults-file=/etc/my.cnf
ExecStop=/usr/local/mysql8/bin/mysqladmin shutdown
TimeoutSec=300
[Install]
WantedBy=multi-user.target
接着我们需要重新加载系统服务以使其生效。
systemctl daemon-reload
接下来我们就可以通过systemctl去控制mysql服务了。
接下来我们只需要进入到/usr/local/mysql8/bin目录下登录mysql。
注意:密码要使用前面生成的随机初始化密码。
对于mysql服务除了可以这样启动以外,我们还可以通过去目录下通过mysql.serve脚本去管理mysql服务。
/usr/local/mysql8/support-files/mysql.server 选项
上述命令常见选项如下所示:
- start:开启mysql服务
- reload:重启mysql服务
- stop:停止mysql服务
例如:/usr/local/mysql8/support-files/mysql.server start命令可以启动mysql服务。
本期内容就先到这里,更多内容将在后续教程中进行展示。