Ubuntu 中安装和配置 MySQL 远程连接
(适用于 Ubuntu 18.04 及更高版本,MySQL 8.0 及更高版本)
一、 安装 MySQL
-
更新软件包列表:
sudo apt update -
安装 MySQL 服务器:
sudo apt install mysql-server- 安装过程中可能需要设置 root 密码,请务必记住。
- MySQL 8.0+ 默认使用
auth_socket插件,可通过sudo mysql以 root 身份连接,无需密码。
-
启动并检查 MySQL 服务:
sudo systemctl status mysql # 检查状态 sudo systemctl start mysql # 启动服务 -
(可选但强烈推荐) 运行安全脚本:
sudo mysql_secure_installation- 设置 root 密码 (如果安装时未设置)。
- 删除匿名用户。
- 禁止 root 远程登录 (稍后会配置远程访问)。
- 删除测试数据库。
- 重新加载权限表。
-
(可选) 安装 MySQL 客户端:
sudo apt install mysql-client -
连接到 MySQL 服务器:
auth_socket插件 (MySQL 8.0+):sudo mysql- 设置了 root 密码:
mysql -u root -p
-
常用 MySQL 命令:
SHOW DATABASES;CREATE DATABASE 数据库名;USE 数据库名;SHOW TABLES;EXIT;或\q
二、 开启 MySQL 远程连接
安全提示:
- 开启远程连接会增加安全风险。
- 不要直接将 root 用户暴露给远程连接,创建专用用户并限制权限。
- 使用防火墙限制对 MySQL 端口 (3306) 的访问。
-
修改 MySQL 配置文件 (允许远程连接):
-
打开配置文件 (如
/etc/mysql/mysql.conf.d/mysqld.cnf):sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf -
找到
bind-address指令。 -
修改
bind-address:- 允许所有 IP (不推荐):
bind-address = 0.0.0.0或注释掉该行。 - 允许特定 IP (更安全):
bind-address = <你的服务器IP>(内网或公网 IP)。
- 允许所有 IP (不推荐):
-
保存并关闭配置文件。
-
-
授权远程用户访问 MySQL 数据库:
-
连接到 MySQL:
sudo mysql -u root -p或sudo mysql -
创建新用户 (推荐) 或修改现有用户:
-- 创建新用户 (推荐) CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON your_database.* TO 'remote_user'@'%'; FLUSH PRIVILEGES; -- 修改现有用户 (如 root,不推荐) -- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_root_password'; -- 错误语法,不适用所有版本 -- FLUSH PRIVILEGES; -
退出 MySQL 命令行。
-
-
配置防火墙 (如果需要):
-
检查防火墙状态:
sudo ufw status -
允许 MySQL 端口 (3306):
- 允许所有 IP (不推荐):
sudo ufw allow 3306/tcp - 允许特定 IP:
sudo ufw allow from <IP地址> to any port 3306 proto tcp
- 允许所有 IP (不推荐):
-
重新加载防火墙规则:
sudo ufw reload
-
-
重启 MySQL 服务:
sudo systemctl restart mysql -
测试远程连接:
mysql -h <服务器IP> -u remote_user -p
三、 解决 GRANT 命令错误
- 错误信息:
ERROR 1064 (42000): ... near 'IDENTIFIED BY ...' - 原因:
IDENTIFIED BY在GRANT语句中的用法可能不正确 (尤其是在设置密码方面)。 - 解决: 分开操作密码设置和权限授予。
- 设置/修改密码:
ALTER USER 'user'@'host' IDENTIFIED BY 'password'; - 授予权限:
GRANT ALL PRIVILEGES ON *.* TO 'user'@'host';
- 设置/修改密码:
四、 解决 ALTER USER 命令错误
- 错误信息:
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%' - 原因: MySQL 中没有定义用户
'root'@'%'。 - 解决:
- 确认用户是否存在:
SELECT User, Host FROM mysql.user WHERE User = 'root'; - 如果不存在,创建用户 (不推荐使用 root,建议创建新用户):
CREATE USER 'remote_admin'@'%' IDENTIFIED BY 'RemotePassword123'; GRANT ALL PRIVILEGES ON *.* TO 'remote_admin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; - 也可以尝试修改已有的root用户,但是不推荐。
- 确认用户是否存在:
五、Ubuntu 系统 MySQL 管理命令 (补充)
-
启动 MySQL 服务:
sudo systemctl start mysql -
停止 MySQL 服务:
sudo systemctl stop mysql -
重启 MySQL 服务:
sudo systemctl restart mysql -
检查 MySQL 服务状态:
sudo systemctl status mysql -
设置 MySQL 开机自启:
sudo systemctl enable mysql -
禁止 MySQL 开机自启:
sudo systemctl disable mysql -
完全卸载 MySQL (包括数据文件):
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* sudo rm -rf /etc/mysql /var/lib/mysql sudo apt autoremove sudo apt autocleanapt purge: 卸载软件包并删除配置文件。rm -rf: 强制递归删除目录 (请务必谨慎使用,确保目录正确)。apt autoremove: 移除不再需要的依赖包。apt autoclean: 清理已下载的软件包缓存。
六、 最佳实践
- 创建专门用于远程连接的用户,而不是使用
root。 - 只授予远程用户必要的权限。
- 限制远程连接的主机范围。
- 考虑使用 SSH 隧道或 VPN。
- 定期备份数据库。
- 及时更新 MySQL 到最新版本,以获取安全补丁和性能改进。