MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用结构化查询语言(SQL)进行数据库管理,适用于Web应用开发、企业应用程序、数据分析和报告、软件开发和测试等多种场景下的数据存储和管理需求。本文介绍如何在Linux实例中部署MySQL数据库。
安装和配置MySQL数据库
本文提供以下两种部署方式,您可以根据需要选择。
手动部署:适用于熟悉Linux操作系统,并且对所安装软件的版本及各软件兼容性有所了解的用户。
镜像部署:在云市场购买MySQL镜像直接创建ECS实例,创建完成后,即可使用MySQL数据库。
方式一:手动部署MySQL数据库
手动部署MySQL时,已有ECS实例必须满足以下条件:
实例已分配公网IP地址或绑定弹性公网IP(EIP)。
操作系统:Alibaba Cloud Linux 3、Alibaba Cloud Linux 2、Ubuntu、Debian。
实例安全组的入方向规则已放行22、80、443、3306端口。具体操作,请参见添加安全组规则。
Alibaba Cloud Linux 3/2 & CentOS 7.x
步骤一:安装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 已归档版本仓库中选择相应的版本链接:
sudo rpm -Uvh [MySQL版本对应的RPM包链接]
例如,对于MySQL8.0,可以使用以下链接(请根据实际需要替换为正确的链接):
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-5.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版本,使用以下命令,安装MySQL。请将[MySQL版本]替换为实际的版本号。
sudo yum -y install mysql-community-server --enablerepo=mysql[MySQL版本]-community --nogpgcheck
例如,对于MySQL8.0,可以使用以下命令安装MySQL。
sudo yum -y install mysql-community-server --enablerepo=mysql80-community --nogpgcheck
运行以下命令,查看MySQL版本号。
mysql -V
返回结果如下,表示MySQL安装成功。
mysql Ver 8.0.39 for Linux on x86_64 (MySQL Community Server - GPL)
步骤二:配置MySQL
运行以下命令,启动并设置开机自启动MySQL服务。
sudo systemctl start mysqld sudo systemctl enable mysqld
运行以下命令,查看MySQL服务状态。
sudo systemctl status mysqld
mysql服务常见状态:
active (running): 这表明MySQL服务正在运行,并且一切正常。
active (exited):此状态在MySQL等服务中并不常见,因为它通常表示服务已完成其任务并正常退出。而MySQL作为一个长期运行的服务,其期望状态应为
running
,而非exited
。inactive (dead): 表明服务没有运行。这可能是因为它从未启动过,或者已经被停止。
failed: 如果服务启动失败或者运行过程中遇到严重错误导致终止,状态将会显示为
failed
。reloading (reload): 在极少数情况下,如果您恰好在服务重载配置时查看状态,可能会看到这个状态,但MySQL服务一般不使用
reload
操作。activating (start): 当服务正在启动过程中,可能会短暂出现这个状态。
说明除了状态,输出还会包含服务的详细日志信息,比如服务启动时间、主进程PID、以及可能的错误消息或警告,这些都能帮助诊断服务是否健康运行以及遇到问题时的原因。
运行以下命令,获取并记录root用户的初始密码。
sudo grep 'temporary password' /var/log/mysqld.log
执行命令结果示例如下。
2024-09-03T02:14:14.730031Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: D/B?W!4DwOua
说明示例末尾的
D/B?W!4DwOua
为初始密码,后续在对MySQL进行安全性配置时,需要使用该初始密码。运行以下命令,对MySQL进行安全性配置。
sudo mysql_secure_installation
根据提示信息,重置MySQL数据库root用户的密码。
说明在输入密码时,系统为了最大限度地保证数据安全,命令行将不做任何回显。您只需要输入正确的密码信息,然后按Enter键即可。
输入已获取的root用户初始密码:
Securing the MySQL server deployment. Enter password for user root:
重新设置您的MySQL服务密码:
The existing password for the user account root has expired. Please set a new password. New password: Re-enter new password:
查看密码强度并确认使用已设置的密码
Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
根据提示信息,删除匿名用户。
Remove anonymous users? (Press y|Y for Yes, any other key for No) :
禁止root账号远程登录。
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
删除test库以及对test库的访问权限。
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
重新加载授权表。
Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
安全性配置的更多信息,请参见MySQL官方文档。
Ubuntu & Debian
步骤一:安装MySQL
添加MySQL APT Repository。
首先,运行如下命令导入MySQL的公钥以确保软件包的完整性和安全性:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb
运行上述命令后,会出现一个配置界面,使用空格键选择您需要的MySQL版本,并确保"Ok"被标记,然后按Enter键确认,本文中以MySQL 8.0为例 。
更新APT源并安装MySQL。
sudo apt-get update sudo apt-get install mysql-server
运行以下命令,查看MySQL版本。
mysql -V
返回结果类似如下所示,表示MySQL已成功安装。
mysql Ver 8.0.36-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
步骤二:配置MySQL
运行以下命令,进入MySQL。
sudo mysql
运行以下命令,设置root用户密码。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '<YOUR_NEW_PASSWORD>';
运行以下命令,退出MySQL数据库。
exit;
运行以下命令,对MySQL进行安全性配置。
sudo mysql_secure_installation
输入第2步中设置的root用户的密码。
Securing the MySQL server deployment. Enter password for user root:
说明在输入密码时,系统为了最大限度地保证数据安全,命令行将不做任何回显。您只需要输入正确的密码信息,然后按Enter键即可。
输入Y,设置密码验证策略。
VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No:
根据提示,为MySQL服务器配置密码强度验证策略。
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
说明0 = LOW (低级) 这个选项设置的密码策略较为宽松,仅要求密码长度至少为8个字符。没有其他关于必须包含数字、大小写字母或特殊字符的要求。适用于对安全性要求不高的环境,但这种设置容易使密码变得简单且易被破解。
1 = MEDIUM(中级) 中等级别的密码策略不仅要求密码长度至少为8个字符,还强制要求密码必须包含以下元素以提高安全性:
数字(0-9)
混合大小写字母(A-Z, a-z)
特殊字符(如!@#$%^&*等)
这种策略能够有效阻止简单的密码被使用,提升账户安全性。
2 = STRONG(高级) 最严格的密码策略,除了满足中等级别的所有条件外,还额外要求密码不能出现在字典文件中。这意味着密码不能是常见的单词或短语,进一步增强了密码的复杂度和安全性。这种策略最适合处理敏感数据或在高度安全要求的环境中使用。
输入Y,更改root用户密码。
Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y
输入root用户密码并确认root密码。
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y New password: Re-enter new password: Estimated strength of the password: 100
输入Y,确认使用已设置的密码。
vDo you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
输入Y删除MySQL自带的匿名用户。
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
输入Y,禁止MySQL的root用户的远程登录权限。
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
输入Y,移除test数据库。
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
输入Y,重新加载授权表。
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
远程访问MySQL数据库
建议您使用非root账号远程登录MySQL数据库。下文示例中,将创建新的MySQL账号,用于远程访问MySQL。
远程连接ECS实例。
关于连接方式的介绍,请参见连接实例。
运行以下命令后,输入root用户的密码登录MySQL。
sudo mysql -uroot -p
依次运行以下命令,创建远程登录MySQL的账号,并允许远程主机使用该账号访问MySQL。
本示例账号为
dmsTest
、密码为Ecs@123****
。重要实际创建账号时,需将示例密码
Ecs@123****
更换为符合要求的密码,并妥善保存。密码要求:长度为8至30个字符,必须同时包含大小写英文字母、数字和特殊符号。可以使用以下特殊符号:()` ~!@#$%^&*-+=|{}[]:;‘<>,.?/
#创建数据库用户dmsTest,并授予远程连接权限。 create user 'dmsTest'@'%' identified by 'Ecs@123****'; #为dmsTest用户授权数据库所有权限。 grant all privileges on *.* to 'dmsTest'@'%'; #刷新权限。 flush privileges;
执行以下命令,退出数据库。
exit
使用
dmsTest
账号远程登录MySQL。(推荐)您可以通过阿里云提供的数据管理服务DMS(Data Management Service)来远程访问MySQL数据库。具体操作,请参见云数据库录入。
您可以通过MySQL客户端远程登录MySQL进行测试。例如:MySQL Workbench、Navicat。
相关文档
如果您希望更方便地管理数据库,并享有高可用、高可靠、高安全、可扩展的托管数据库服务,可以使用阿里云云数据库RDS。RDS是阿里云提供的稳定可靠、可弹性伸缩的关系型云数据库,支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,具备容灾、备份、恢复、迁移等方面的全套解决方案。更多信息,请参见云数据库RDS简介。
您可以通过数据迁移工具DTS,将自建数据库平滑迁移到阿里云数据库上。具体操作,请参见数据库迁移方案和从自建MySQL迁移至RDS MySQL实例。
数据库备份DBS(Database Backup)是阿里云提供的低成本、高可靠的云原生数据库备份平台,可帮助您有效解决备份耗时耗成本等问题。更多信息,请参见什么是数据库备份DBS。