本文介绍了如何在Linux系统上手动部署MySQL数据库,包括通过实例和官方镜像进行部署的方法,并提供了远程访问数据库的完整步骤,让用户在确保安全的同时,实现高效的数据库管理和访问。
手动部署MySQL方式概述
部署方式 | 优点 | 缺点 | 适用场景 |
|
|
| |
|
|
|
部署MySQL
Alibaba Cloud Linux 3 / CentOS
使用实例本地仓库源部署MySQL数据库
请注意,通过本地软件仓库(如 Yum 或 APT)安装软件时,获取的版本可能不是最新的发布版本。如果您需要安装最新发布版本或特定版本MySQL,请参见使用官方镜像源部署MySQL数据库。
使用本地仓库部署MySQL服务仅支持Alibaba Cloud Linux 3、CentOS 8.x、Ubuntu与Debian操作系统。
Ubuntu 18.0及以下版本操作系统实例,使用本地仓库部署MySQL服务默认版本为5.7.42,若需安装特定版本MySQL时,请参见使用官方镜像源部署MySQL数据库。
远程连接ECS实例。具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
运行以下命令,更新实例镜像源。
sudo yum update
运行以下命令,在本地仓库中搜索MySQL安装包。
sudo yum search mysql-server
如果得到如下显示,则说明本地仓库中有MySQL的安装包。
运行以下命令来安装 MySQL 服务器。
sudo yum install mysql-server
运行以下命令,启动 MySQL 服务。
sudo systemctl start mysqld
设置MySQL服务开机自启动。
sudo systemctl enable mysqld
运行以下命令,查看MySQL服务状态,若返回结果中Active为active (running),即表示MySQL服务成功启动。其余状态请参见MySQL服务常见状态说明。
sudo systemctl status mysqld
MySQL服务启动完成后,请继续参见MySQL服务安全配置完成相关配置。
使用官方镜像源部署MySQL数据库
远程连接ECS实例。具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
(可选)当操作系统为Alibaba Cloud Linux 3时,请执行如下命令,安装MySQL所需的库文件。
sudo rpm -Uvh https://mirrors.aliyun.com/alinux/3/updates/x86_64/Packages/compat-openssl10-1.0.2o-4.0.1.al8.x86_64.rpm
您可以根据自己的需求选择MySQL的版本并安装RPM包,以下命令以安装更新MySQL社区版的RPM仓库为例,您应根据需要在MySQL Yum仓库中选择相应的版本链接:
sudo rpm -Uvh [MySQL版本对应的RPM包链接]
例如,对于MySQL最新的8.4版本,可以使用以下链接(请根据实际需要替换为正确的链接):
sudo rpm -Uvh https://dev.mysql.com/get/mysql84-community-release-el8-1.noarch.rpm
说明MySQL版本对应的RPM包链接中的
mysql80-community-release-el7-1
其中:el7: 代表RHEL 7或与其兼容的系统版本,如Alibaba Cloud Linux 2、CentOS 7。
el8: 代表RHEL 8或与其兼容的系统版本,如Alibaba Cloud Linux 3、CentOS 8、AlmaLinux 8或Rocky Linux 8。
el9: 代表RHEL 9或与其兼容的系统版本,如CentOS Stream 9或其他基于EL9的发行版。
请确保您选择的仓库配置与操作系统版本相匹配,以避免安装过程中出现不必要的依赖问题或版本不兼容的错误。如果不确定系统版本,请运行
cat /etc/os-release
来查看详细信息。运行以下命令,确认 MySQL Repository 已成功添加。
sudo yum repolist enabled | grep mysql
您应该能看到类似以下的输出,表示 MySQL 相关的 YUM 源已被正确添加。
根据用户选择的MySQL版本,使用以下命令,安装MySQL。请将[MySQL版本]替换为实际的版本号。
sudo yum -y install mysql-community-server --enablerepo=mysql[MySQL版本]-community --nogpgcheck
例如,对于MySQL8.4,可以使用以下命令安装MySQL。
sudo yum -y install mysql-community-server --enablerepo=mysql-8.4-lts-community --nogpgcheck
运行以下命令,查看MySQL版本号。
mysql -V
返回结果如下,表示MySQL安装成功。
mysql Ver 8.4.3 for Linux on x86_64 (MySQL Community Server - GPL)
安装完成后,运行以下命令,启动 MySQL 服务。
sudo systemctl start mysqld
为了确保 MySQL 服务在系统启动时自动启动,运行以下命令可以使其开机自启。
sudo systemctl enable mysqld
运行以下命令,查看MySQL服务状态。
若返回结果中Active为active (running),即表示MySQL服务成功启动。MySQL服务常见状态请参见MySQL服务常见状态有哪些?。
sudo systemctl status mysqld
Ubuntu/Debian
使用实例本地仓库源部署MySQL数据库
远程连接ECS实例。具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
运行以下命令,更新实例镜像源。
sudo apt update sudo apt upgrade
运行以下命令,在本地仓库中搜索MySQL安装包。
sudo apt search mysql-server
如果得到如下显示,则说明本地仓库中存在MySQL服务安装包。
若搜索结果中无
mysql-server
相关安装包,则表示当前实例本地仓库中不包含MySQL安装包,请参见使用官方镜像源部署MySQL数据库部署MySQL服务。运行以下命令来安装 MySQL 服务器。
Ubuntu。
sudo apt install mysql-server
Debian。
说明Debian默认APT仓库中并没有MySQL官方社区版本安装包,在Debian中,MariaDB 作为默认的数据库管理系统来替代 MySQL。MariaDB 是 MySQL 的一个分支,由原来 MySQL 的开发者创建,旨在保持开源。
若您需要MySQL社区版本服务,请参见使用官方镜像源部署MySQL数据库。
sudo apt install default-mysql-server
安装完成后,运行以下命令,启动 MySQL 服务。
sudo systemctl start mysql
为了确保 MySQL 服务在系统启动时自动启动,运行以下命令可以使其开机自启。
sudo systemctl enable mysql
运行以下命令,查看MySQL服务状态,确认 MySQL 服务是否成功启动。
sudo systemctl status mysql
若返回结果中Active为active (running),即表示MySQL服务成功启动。MySQL服务常见状态请参见MySQL服务常见状态有哪些?。
在Ubuntu与Debian操作系统中,MySQL 会使用
auth_socket
插件默认为root用户进行认证;有关auth_socket插件的详细信息请参见什么是auth_socket插件?。请参见MySQL服务安全配置,完成MySQL安全策略配置。
运行以下命令,以系统 root 用户身份登录 MySQL。
sudo mysql
运行以下命令创建新用户并设置密码。本例中创建一个用户名为
mysql_test
,只允许本地访问,密码为8uhb^YJm
的用户,请根据实际需求替换命令中用户名、主机限制与密码。说明localhost
意味着用户只能从数据库服务器所在的同一主机进行连接。其背后的机制是 MySQL 将localhost
视为 Unix socket 连接。如果您想允许从外部主机连接,可以用该主机的 IP 地址或主机名取代localhost
,或者使用通配符%
来代表任意主机。CREATE USER 'mysql_test'@'localhost' IDENTIFIED BY '8uhb^YJm';
运行以下命令授予新用户对特定数据库的所有权限。本例中为
mysql_test
用户授予example_db
所有表的管理权限。GRANT ALL PRIVILEGES ON example_db.* TO 'mysql_test'@'localhost';
授予
ALL PRIVILEGES
可能会带来安全风险,特别是在生产环境中。建议根据实际需要仅授予必要的最小权限。如果某用户只需要读取数据,可以只授予SELECT
权限。GRANT SELECT ON example_db.* TO 'mysql_test'@'localhost';
运行以下命令,刷新 MySQL 的权限表,以确保新授予的权限立即生效。
FLUSH PRIVILEGES;
使用官方镜像源部署MySQL数据库
运行以下命令,更新系统apt仓库,确保您的系统包列表为最新。
sudo apt update sudo apt upgrade
添加 MySQL 官方 APT 存储库,访问 MySQL APT repository 页面,获取适合您的 Ubuntu 版本的 MySQL APT 配置包链接;运行以下命令下载对应版本APT配置包。
sudo wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
运行以下命令,使用
dpkg
命令安装下载的 MySQL APT 配置包。sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb
安装过程中会出现一个配置选项界面。
(可选)若
mysql-apt-config
脚本认为您的操作系统不是其正式支持的版本。会出现如下界面,您可以选择一个与您的系统版本最接近的支持选项来继续安装。在本例中,选择最新的jammy
版本系统。获取系统别名请参见Ubuntu/Debian实例如何获取系统别名?。配置页面会列出待安装的全部组件,其中包括MySQL Server 、Client、Tool等一系列组件,确认版本及待安装组件无误,按方向键切换到
OK
并回车。
运行以下命令再次更新包列表,以使新添加的 MySQL 存储库生效。
sudo apt update
运行以下命令使用
apt-get
或apt
命令安装 MySQL 服务器。sudo apt install mysql-server
安装完成后,运行以下命令启动 MySQL 服务并检查其状态。
sudo systemctl start mysql sudo systemctl status mysql
MySQL服务常见的状态请参见MySQL服务常见状态有哪些?。
运行以下命令确保 MySQL 在系统启动时自动启动。
sudo systemctl enable mysql
MySQL服务安全配置
Alibaba Cloud Linux3/CentOS
运行以下命令,获取root用户临时密码。
sudo grep 'temporary password' /var/log/mysqld.log
返回信息类似,表示root用户初始密码为
1qt1lb-jQ1I6
。2024-12-17T02:05:43.885354Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 1qt1lb-jQ1I6
运行以下命令,启动MySQL安全安装向导。
sudo mysql_secure_installation
输入步骤一查询的root用户初始密码。
说明输入密码时界面不会显示密码的输入过程,请您确保输入的密码正确。
输入y移除匿名用户。
移除匿名用户可以防止未经授权的用户在没有提供有效凭证的情况下访问你的 MySQL 服务器。
系统会询问是否禁止 MySQL 的
root
用户从远程登录。为了安全起见,通常建议禁止root
用户远程登录。按
y
或Y
以禁止远程 root 登录:如果有特定需求允许
root
用户远程访问(如在受控环境中进行管理),可以按除Y
以外任意键以允许远程 root 登录;并采取其他措施来加强安全性(如使用 SSH 隧道或 VPN)。
输入y移除 MySQL 自带的
test
数据库。test
数据库默认情况下允许任何用户访问,为了保证系统的安全且保持良好管理实践,建议删除这个默认数据库。输入y重新加载权限表,使之前所有更改生效。
Ubuntu/Debian
运行以下命令,启动MySQL安全安装向导。
sudo mysql_secure_installation
设置
VALIDATE PASSWORD
组件。该组件主要用于验证密码的强度,可以帮助提高数据库的安全性,选择是否启用该组件取决于您的安全需求和使用环境。
可以选择
y
或Y
来启用组件,或者选择其他键跳过这个步骤。启用该组件后,还需要配置密码强度级别。当选择启用
VALIDATE PASSWORD
组件时,需要根据您对安全性的需求选择适当的密码复杂度级别。说明密码复杂度级别说明
LOW (低):
要求:密码长度至少为 8 个字符。
适用场景:对于密码复杂度要求较低的环境。
MEDIUM (中):
要求:密码长度至少为 8 个字符,且必须包含数字、大写和小写字母以及特殊字符。
适用场景:大多数生产环境中推荐使用的级别,具有较好的平衡。
STRONG (高):
要求:密码长度至少为 8 个字符,且必须包含数字、大写和小写字母、特殊字符,并且进行字典检测防止使用常见单词。
适用场景:对于安全性要求极高的环境,推荐使用此级别。
输入所选密码级别之后,根据对应的级别的密码要求,配置对应的密码。注意设置密码时控制台并不直接打印密码,请确保两次输入密码一致。
配置完成密码后,系统会返回一个密码强度估算值,本例中密码强度估算值为
100
,表示您选择的密码在所设置的密码策略下被认为非常强。之后系统会要求您确认所提供的密码是否符合您期望的安全策略。这一提示是为了确保您没有错误输入密码或者要验证的密码是否符合先前选择的验证策略。满意则输入
Y
;不满意密码或想要重新设置则输入n
。输入y移除匿名用户。
移除匿名用户可以防止未经授权的用户在没有提供有效凭证的情况下访问你的 MySQL 服务器。
系统会询问是否禁止 MySQL 的
root
用户从远程登录。为了安全起见,通常建议禁止root
用户远程登录。按
y
或Y
以禁止远程 root 登录:如果有特定需求允许
root
用户远程访问(如在受控环境中进行管理),可以按除Y
以外任意键以允许远程 root 登录;并采取其他措施来加强安全性(如使用 SSH 隧道或 VPN)。
输入y移除 MySQL 自带的
test
数据库。test
数据库默认情况下允许任何用户访问,为了保证系统的安全且保持良好管理实践,建议删除这个默认数据库。输入y重新加载权限表,使之前所有更改生效。
远程访问MySQL数据库
远程访问 MySQL 数据库可以使用MySQL Client
或其他数据库管理工具,从不同的机器或网络中连接到 MySQL 服务器。
数据库管理工具连接:(推荐)您可以通过阿里云提供的数据管理服务DMS(Data Management Service)来远程访问MySQL数据库。具体操作,请参见相关文档云数据库录入。您也可以通过MySQL客户端远程登录MySQL进行测试。例如:MySQL Workbench、Navicat。
MySQL Client连接:以下是使用MySQL Client进行远程访问的详细步骤。
说明为了安全地允许特定用户通过远程地址访问数据库,建议使用非root账户进行MySQL数据库的远程登录。以下示例将展示如何创建新的MySQL账户,以便于远程访问MySQL服务。
远程连接ECS实例。
具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
配置安全组,MySQL 默认使用端口
3306
。实例安全组的入方向规则需放通3306
端口,如果您配置了其他端口,请根据实际情况进行安全组配置。具体操作请参见添加安全组规则。运行以下命令后,输入root用户的密码登录MySQL。root用户密码为MySQL服务安全配置步骤配置的密码。
sudo mysql -uroot -p
可选择创建新用户进行远程访问或者修改现有用户权限。
说明在本例的SQL语句中:
<username>
是您希望远程访问的用户名。<password>
是该用户的密码。%
作为通配符,允许从任何外部主机连接到 MySQL。
运行以下命令,创建新用户。
-- 创建新用户 CREATE USER '<username>'@'%' IDENTIFIED BY '<password>';
运行以下命令,更改现有用户远程访问权限。
ALTER USER '<username>'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>'; UPDATE mysql.user SET Host='%' WHERE User='<username>' AND Host='localhost';
运行以下命令,确保该用户有权访问所需的数据库。
GRANT ALL PRIVILEGES ON database_name.* TO '<username>'@'%';
运行以下命令,刷新权限,以使前述更改生效。
FLUSH PRIVILEGES;
在MySQL命令行界面执行
exit
退出命令行后,运行以下命令,测试所配置的用户名及密码是否生效。mysql -u <username> -p -h <server_ip_address> -P 3306
<server_ip_address>
是 MySQL 服务器的 IP 地址。-P
用于指定端口号(默认是 3306)。