Linux部署MySQL
在今后的使用过程中,需要频繁使用Linux系统,所以在Linux上安装软是必不可少的操作 。
前置要求
- 需要学习前四章知识,初识Linux、Linux基础命令、Linux权限管理、Linux高阶技巧这4个章节。
- 需要开启多态虚拟机,电脑内存要大于8G,或者可以选择使用阿里云等云服务器。
MySQL的安装部署
MySQL数据库管理系统(后续简称MySQL),是一款知名的数据库系统,其特点是:轻量、简单、功能丰富。
MySQL数据库可谓是软件行业的明星产品,无论是后端开发、大数据、AI、运维、测试等各类岗位,基本上都会和MySQL打交道。
从MySQL开始,进行实战的Linux软件安装部署。
下面将介绍2个版本进行安装:
- MySQL 5.7版本安装
- MySQL 8.x版本安装
MySQL5.7版本在CentOS系统安装
注意:安装操作需要root权限
MySQL的安装可以通过前面学习的yum命令进行。
安装
- 配置yum仓库
bash
# 更新密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 安装Mysql yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm

- 使用yum安装MySQL
bash
# yum安装Mysql
yum -y install mysql-community-server

- 安装完成后,启动MySQL并配置开机自启动
bash
systemctl start mysqld # 启动
systemctl enable mysqld # 开机自启
MySQL安装完成后,会自动配置为名称叫做:
mysqld
的服务,可以被systemctl
所管理
- 检查MySQL的运行状态
bash
systemctl status mysqld

配置
配置管理员用户root的密码 以及配置允许远程登录的权限
- 获取MySQL的初始密码
mysql
# 通过grep命令,在/var/log/mysqld.log文件中,过滤temporary password关键字,得到初始密码
grep 'temporary password' /var/log/mysqld.log

- 登录MySQL
mysql
# 执行
mysql -uroot -p
# 解释
# -u,登陆的用户,MySQL数据库的管理员用户同Linux一样,是root
# -p,表示使用密码登陆
# 执行完毕后输入刚刚得到的初始密码,即可进入MySQL数据库

- 修改root用户密码
mysql
# 在MySQL控制台内执行
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码'; -- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc

- 配置root的简单密码
我们可以给root设置简单密码,如123456.
请注意,此配置仅仅是用于测试环境或学习环境的MySQL,如果是正式使用,请勿设置简单密码
mysql
# 如果你想设置简单密码,需要降低Mysql的密码安全级别
set global validate_password_policy=LOW; # 密码安全级别低
set global validate_password_length=4; # 密码长度最低4位即可
# 然后就可以用简单密码了(在学习中使用简单密码,为了方便,生产中不要这样)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

- 配置root远程登录
默认情况下,root用户是不运行远程登录的,只允许在MySQL所在的Linux服务器登陆MySQL系统
请注意,允许root远程登录会带来安全风险
mysql
# 授权root远程登录
grant all privileges on *.* to root@"IP地址" identified by '密码' with grant option;
# IP地址即允许登陆的IP地址,也可以填写%,表示允许任何地址
# 密码表示给远程登录独立设置密码,和本地登陆的密码可以不同
# 刷新权限,生效
flush privileges;

- 退出MySQL控制台页面
mysql
# 退出命令
exit
# 或者通过快捷键退出:ctrl + d
-
检查端口
MySQL默认绑定了3306端口,可以通过端口占用检查MySQL的网络状态
bash
netstat -anp | grep 3306

至此,MySQL就安装完成并可用了,请妥善保存好MySQL的root密码。
使用Navicat连接centOS7.9中的MySQL5.7
- 开启防火墙
bash
systemctl start firewalld
- 显示防火墙状态
bash
systemctl status firewalld

- 打开防火墙的3306端口(
--permanent
永久生效)
bash
firewall-cmd --zone=public --add-port=3306/tcp --permanent

- 重启防火墙
bash
service firewalld restart

- 使用Navicat连接centOS中的MySQL5.7

MySQL8.0版本在CentOS系统安装
注意:安装操作需要root权限
安装
- 配置yum仓库(这里的2023要紧跟实时)
bash
# 更新密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
# 安装Mysql8.x版本 yum库
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

- 使用yum安装MySQL
bash
# yum安装Mysql
yum -y install mysql-community-server

- 安装完成后,启动MySQL并配置开机自启动
bash
systemctl start mysqld # 启动
systemctl enable mysqld # 开机自启
MySQL安装完成后,会自动配置为名称叫做:
mysqld
的服务,可以被systemctl
所管理
- 查看MySQL的运行状态
bash
systemctl status mysqld

配置
主要修改root密码和允许root远程登录
- 获取MySQL的初始密码
mysql
# 通过grep命令,在/var/log/mysqld.log文件中,过滤temporary password关键字,得到初始密码
grep 'temporary password' /var/log/mysqld.log
- 登录MySQL数据库系统
mysql
# 执行
mysql -uroot -p
# 解释
# -u,登陆的用户,MySQL数据库的管理员用户同Linux一样,是root
# -p,表示使用密码登陆
# 执行完毕后输入刚刚得到的初始密码,即可进入MySQL数据库
- 修改root密码
bash
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'; -- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc
- 配置root的简单密码
我们可以给root设置简单密码,如123456.
请注意,此配置仅仅是用于测试环境或学习环境的MySQL,如果是正式使用,请勿设置简单密码
mysql
set global validate_password.policy=0; # 密码安全级别低
set global validate_password.length=4; # 密码长度最低4位即可
- 允许root远程登录,并设置远程登录密码
默认情况下,root用户是不运行远程登录的,只允许在MySQL所在的Linux服务器登陆MySQL系统
请注意,允许root远程登录会带来安全风险
mysql
# 第一次设置root远程登录,并配置远程密码使用如下SQL命令
create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码!'; -- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc
# 后续修改密码使用如下SQL命令
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
- 退出MySQL控制台页面
mysql
# 退出命令
exit
# 或者通过快捷键退出:ctrl + d
-
检查端口
MySQL默认绑定了3306端口,可以通过端口占用检查MySQL的网络状态
bash
netstat -anp | grep 3306

至此,MySQL就安装完成并可用了,请妥善保存好MySQL的root密码。
使用Navicat连接centOS7.9中的MySQL8.0
- 开启防火墙
bash
systemctl start firewalld
- 显示防火墙状态
bash
systemctl status firewalld
- 打开防火墙的3306端口(
--permanent
永久生效)
bash
firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 重启防火墙
bash
service firewalld restart

- 使用Navicat连接centOS中的MySQL8.0

- 查看MySQL版本
mysql
mysql> status;
--------------
mysql Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 12
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.36 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/lib/mysql/mysql.sock
Binary data as: Hexadecimal
Uptime: 18 min 0 sec
Threads: 3 Questions: 21 Slow queries: 0 Opens: 179 Flush tables: 3 Open tables: 95 Queries per second avg: 0.019
--------------
mysql>
可以看到这个MySQL的版本号是8.0.36
使用Xshell连接Ubuntu系统
Ubuntu系统的配置
- 提升root权限
bash
sudo su -
#输入密码
- 安装
net-tools
bash
sudo apt install net-tools
- 查看IP地址
bash
ifconfig

- 查看22号端口
bash
netstat -ntlp|grep 22
- 安装
spenssh-server
bash
apt-get install openssh-server

- 启动ufw防火墙
bash
ufw enable

- 允许通过TCP协议在22端口上的传入连接
bash
ufw allow 22/tcp

使用Xshell连接Ubuntu系统
- 填写IP

- 填写用户密码

- 在Xshell上登录成功

MySQL5.7版本在Ubuntu(可使用WSL环境)系统安装
课程中配置的WSL环境是最新的Ubuntu22.04版本,这个版本的软件商店内置的MySQL是8.0版本
所以我们需要额外的步骤才可以安装5.7版本的MySQL
安装操作需root权限,你可以:
-
通过
sudo su -
,切换到root用户课程中选择这种方式操作
-
或在每一个命令前,加上
sudo
,用来临时提升权限
安装
- 下载apt仓库文件
shell
# 下载apt仓库的安装包,Ubuntu的安装包是.deb文件
wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb

- 配置
apt
仓库
bash
# 使用dpkg命令安装仓库
dpkg -i mysql-apt-config_0.8.12-1_all.deb
弹出框中选择:ubuntu bionic
(Ubuntu18.04系统的代号是bionic,选择18.04的版本库用来安装)

弹出框中选择:MySQL Server & Cluster

弹出框中选择:mysql-5.7

最后选择ok

- 更新apt仓库的信息
shell
# 首先导入仓库的密钥信息
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
# 更新仓库信息
apt update

- 检查是否成功配置MySQL5.7的仓库
bash
apt-cache policy mysql-server
发现没有5.7版本的MySQL,并有以下报错
bash
W: GPG error: http://repo.mysql.com/apt/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C
E: The repository 'http://repo.mysql.com/apt/ubuntu bionic InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
该报错说明APT无法验证仓库的 GPG 签名,因为它缺少必要的公钥,可以执行以下命令
bash
#加入公钥
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C
#更新apt
apt update
#查看是否配置MySQL5.7仓库
apt-cache policy mysql-server

- 安装MySQL5.7
bash
# 使用apt安装mysql客户端和mysql服务端
apt install -f -y mysql-client=5.7* mysql-community-server=5.7*
加载安装

进入安装界面
输入密码,123456,然后选择ok

再次输入密码,然后选择ok

- 启动MySQL5.7
bash
/etc/init.d/mysql start # 启动
/etc/init.d/mysql stop # 停止
/etc/init.d/mysql status # 查看状态

- 对MySQL5.7进行初始化
bash
# 执行如下命令,此命令是MySQL安装后自带的配置程序
mysql_secure_installation
# 可以通过which命令查看到这个自带程序所在的位置
root@DESKTOP-Q89USRE:~# which mysql_secure_installation
/usr/bin/mysql_secure_installation
-
输入密码
-
是否开启密码验证插件,如果需要增强密码安全性,输入
y
并回车,不需要直接回车(课程中选择直接回车) -
是否更改root密码,需要输入
y
回车,不需要直接回车(课程不更改) -
是否移除匿名用户,移除输入
y
回车,不移除直接回车(课程选择移除) -
是否进制root用户远程登录,禁止输入
y
回车,不禁止直接回车(课程选择不禁止) -
是否移除自带的测试数据库,移除输入
y
回车,不移除直接回车(课程选择不移除) -
是否刷新权限,刷新输入
y
回车,不刷新直接回车(课程选择刷新) -
登录MySQL5.7
bashmysql -u root -p
至此,在Ubuntu上安装MySQL5.7版本成功。
使用Navicat连接Ubuntu中的MySQL5.7
- 配置MySQL的文件,需要用到
vim
操作,先安装vim
命令
bash
apt install vim

- 编辑
/etc/mysql/mysql.conf.d/mysqld.cnf
文件
bash
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉 bind-address = 127.0.0.1
bash
# bind-address = 127.0.0.1
添加3306端口
bash
port = 3306
最后按ESC输入:wq
保存并退出

- 重启MySQL5.7
bash
#停用MySQL
service mysql stop
#启动MySQL
service mysql start
#设置MySQL开机自启动
systemctl enable mysql
- 进入MySQL配置远程登录密码
bash
# 授权root远程登录
grant all privileges on *.* to root@"IP地址" identified by '密码' with grant option;
# IP地址即允许登陆的IP地址,也可以填写%,表示允许任何地址
# 密码表示给远程登录独立设置密码,和本地登陆的密码可以不同
# 刷新权限,生效
flush privileges;
- 配置防火墙,开放3306防火墙端口
bash
#安装防火墙软件
apt install firewalld

- 开放3306端口
bash
firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 重启防火墙
bash
firewall-cmd --reload
- 查询防火墙是否允许通过3306端口
bash
firewall-cmd --query-port=3306/tcp

- 使用Navicat连接Ubuntu中的MySQL5.7

MySQL8.0版本在Ubuntu(可使用WSL环境)系统安装
课程中配置的WSL环境是最新的Ubuntu22.04版本,这个版本的软件商店内置的MySQL是8.0版本
所以直接可以通过apt安装即可
注意,课程是以WSL获得的Ubuntu操作系统环境。如果你通过VMware虚拟机的方式获得了Ubuntu操作系统环境,操作步骤不用担心,和课程中使用WSL环境是完全一致的
安装操作需root权限,你可以:
-
通过 sudo su -,切换到root用户
课程中选择这种方式操作
-
或在每一个命令前,加上sudo,用来临时提升权限
安装
- 如果已经安装过MySQL5.7版本,需要卸载仓库信息哦
bash
# 卸载MySQL5.7版本
apt remove -y mysql-client=5.7* mysql-community-server=5.7*
# 卸载5.7的仓库信息
dpkg -l | grep mysql | awk '{print $2}' | xargs dpkg -P
- 更新apt仓库信息
bash
apt update
- 安装MySQL
bash
apt install -y mysql-server
- 启动MySQL
bash
/etc/init.d/mysql start # 启动
/etc/init.d/mysql stop # 停止
/etc/init.d/mysql status # 查看状态
- 登录MySQL8.0,设置密码
bash
# 直接执行:mysql
mysql
- 设置密码
bash
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
- 退出MySQL控制台
bash
exit
- 初始化MySQL8.0
bash
# 执行如下命令,此命令是MySQL安装后自带的配置程序
mysql_secure_installation
# 可以通过which命令查看到这个自带程序所在的位置
root@DESKTOP-Q89USRE:~# which mysql_secure_installation
/usr/bin/mysql_secure_installation
- 输入密码

- 是否开启密码验证插件,如果需要增强密码安全性,输入
y
并回车,不需要直接回车(课程中选择直接回车)

- 是否更改root密码,需要输入
y
回车,不需要直接回车(课程不更改)

- 是否移除匿名用户,移除输入
y
回车,不移除直接回车(课程选择移除)

- 是否进制root用户远程登录,禁止输入
y
回车,不禁止直接回车(课程选择不禁止)

- 是否移除自带的测试数据库,移除输入
y
回车,不移除直接回车(课程选择不移除)

- 是否刷新权限,刷新输入
y
回车,不刷新直接回车(课程选择刷新)

- 重新登陆MySQL(用更改后的密码)
bash
mysql -u root -p

至此,在Ubuntu上安装MySQL8.0版本成功。
使用Navicat连接Ubuntu中的MySQL8.0
- 配置MySQL的文件,需要用到
vim
操作,先安装vim
命令
bash
apt install vim
- 编辑
/etc/mysql/mysql.conf.d/mysqld.cnf
文件
bash
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉 bind-address = 127.0.0.1
bash
# bind-address = 127.0.0.1
添加3306端口
bash
port = 3306
最后按ESC输入:wq
保存并退出

- 重启MySQL5.7
bash
#停用MySQL
service mysql stop
#启动MySQL
service mysql start
#设置MySQL开机自启动
systemctl enable mysql
- 进入MySQL配置远程登录密码
在MySQL 5.7.6及以后的版本中,CREATE USER
和GRANT
语句是分开的
mysql
CREATE USER 'root'@'%';
ALTER USER 'root'@'%' IDENTIFIED BY '654321';
#授予该用户所有数据库的所有权限,并允许该用户授予其他用户权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
#刷新权限
FLUSH PRIVILEGES;
#退出
exit;

- 配置防火墙,开放3306防火墙端口
bash
#安装防火墙软件
apt install firewalld
- 开放3306端口
bash
firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 重启防火墙
bash
firewall-cmd --reload
- 查询防火墙是否允许通过3306端口
bash
firewall-cmd --query-port=3306/tcp
- 使用Navicat连接Ubuntu中的MySQL8.0

注意
在正式的生产环境中,一定要使用强密码配置MySQL的登录,以及Linux的登录,MySQL远程登录最好是固定一个公网IP,阿里云服务器中专用的安全组策略来设置,同时要定期备份数据库。否则你的数据库会像如下一样,被劫持。
在使用Ubuntu系统安装MySQL时,使用虚拟机创建的Ubuntu与上述WSL环境一样
WSL环境是指Windows自带的Linux系统环境
