MySQL 在 Linux 上的部署通常从软件仓库直接安装,然后进行安全初始化,再按需创建用户并开启远程访问。以下以 Ubuntu/Debian 和 CentOS/RHEL 两大主流分支为例,给出可直接执行的步骤。实际操作中,请根据你的发行版选择对应的包管理器。
1. 安装 MySQL Server
Ubuntu / Debian(使用 apt)
sudo apt update
sudo apt install mysql-server -y
安装完成后,MySQL 服务会自动启动。可以用 systemctl status mysql 查看运行状态。
CentOS / RHEL / Fedora(使用 dnf 或 yum)
sudo dnf install mysql-server -y # CentOS 8+/Fedora
# 或 sudo yum install mysql-server -y # CentOS 7
sudo systemctl start mysqld
sudo systemctl enable mysqld
首次启动时,MySQL 会为 root 账号生成一个临时密码,可在日志中找到(仅限 CentOS 早期版本或采用 mysqld --initialize 时):
sudo grep 'temporary password' /var/log/mysqld.log
2. 安全初始化
MySQL 提供了一个安全配置向导脚本,统一完成以下操作:设置 root 密码、移除匿名用户、禁止 root 远程登录、删除测试数据库、重新加载权限表。对于 Ubuntu,由于默认使用 auth_socket 插件认证 root,需要先切换认证方式或直接使用 sudo mysql 登录。
Ubuntu 环境
默认安装后,root 用户通过 unix socket 认证,运行 sudo mysql 即可直接登录。建议先为 root 设置密码并改为密码认证:
sudo mysql
在 MySQL 提示符下执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码';
FLUSH PRIVILEGES;
EXIT;
然后运行安全脚本:
sudo mysql_secure_installation
当询问是否设置 VALIDATE PASSWORD 组件时,按需选择;之后输入刚刚设置的 root 密码,并按提示回答 y 来移除匿名用户、禁止 root 远程登录、删除 test 数据库等。
CentOS / RHEL 环境
如果存在初始临时密码,使用它登录后强制改密:
sudo mysql_secure_installation
按提示先输入临时密码,再设置新密码,强度策略可按需选取,其余问题全部回答 y 即可。
3. 用户与权限配置
数据库连接通常不建议直接使用 root,而是为每个应用创建专用用户并授予最小必要权限。
登录 MySQL:
mysql -u root -p
创建用户
CREATE USER 'username'@'host' IDENTIFIED BY '密码';
username:数据库用户名host:允许登录的来源地址。localhost表示仅本地,%表示任意主机(远程连接),或指定 IP 如192.168.1.100密码:符合复杂度要求
授予权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
ALL PRIVILEGES可替换为具体权限,如SELECT, INSERT, UPDATE, DELETEdatabase_name.表示该数据库的所有表,也可以用.*授予全局权限(谨慎使用)
修改权限后必须刷新:
FLUSH PRIVILEGES;
EXIT;
示例:为来自任意主机的用户 appuser 授予 mydb 数据库的全部权限
CREATE USER 'appuser'@'%' IDENTIFIED BY 'Str0ngP@ssw0rd';
GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
4. 开启远程访问
为了让外部主机能够连接 MySQL,需要做两件事:让 MySQL 监听所有网络接口,并放行防火墙端口。
修改 MySQL 配置文件
找到 MySQL 配置文件(常见路径:/etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf),在 [mysqld] 段中定位或添加 bind-address:
bind-address = 0.0.0.0
如果该行被注释,取消注释并修改。某些发行版默认值为 127.0.0.1,必须改为 0.0.0.0 或本机公网 IP。
保存后重启 MySQL 服务:
sudo systemctl restart mysql # 或 mysqld
配置防火墙
- Ubuntu(ufw):
sudo ufw allow 3306/tcp
sudo ufw reload
- CentOS/RHEL(firewalld):
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
验证远程连接
在另一台机器上使用 mysql 客户端测试:
mysql -u appuser -p -h 服务器IP地址 -P 3306
输入密码后若能成功登录并看到 mysql> 提示符,说明远程连接已开启。
安全建议:生产环境中请勿直接将 bind-address 设为 0.0.0.0 且开放端口到整个互联网。应通过防火墙限制来源 IP、使用 SSH 隧道或 VPN 连接,并为远程账号设置复杂密码和有限权限。