Ubuntu 安装 MySQL 8:从 apt 到远程连接,一条命令都不少

要在一台刚装好的 Ubuntu 上跑起 MySQL 8,真正需要的命令不超过十条。装只是第一步,装完不改的两处配置会让你的数据库要么连不上、要么裸奔在公网——这篇把顺序、每条命令的含义和踩坑点一次讲清。

下面的流程在 Ubuntu 22.04 与 24.04 上都验证过,MySQL 版本是 8.0.x。不确定自己源里是哪个版本,先跑 apt policy mysql-server 看一眼。

一、安装与启动

sudo apt update
sudo apt install -y mysql-server
sudo systemctl enable --now mysql      # 开机自启 + 立即启动
systemctl status mysql                 # 看到 active (running) 就成了
mysql --version                        # 确认版本

Ubuntu 的 mysql-server 包会自动把 systemd 服务建好,服务名就叫 mysql(不是 mysqld)。装完默认已经在监听 3306,只是只监听本机。

想装比源里更新的版本,去 MySQL 官网下 mysql-apt-config 的 deb 包装上,它会在 /etc/apt/sources.list.d/ 里加官方源,再 sudo apt update && sudo apt install -y mysql-server 就行。生产环境不建议追最新小版本,跟着 LTS 发行版走更省心。

二、安全初始化:这一步千万别跳过

sudo mysql_secure_installation

它会问一串问题,每个选项的实际含义如下:

提问 建议 说明
启用密码强度校验组件 是 拒绝 123456 这种弱口令,生产必开
密码强度等级 MEDIUM(1) LOW 只查长度,STRONG 还要字典/大小写/符号
删除匿名用户 是 匿名用户能让任意本地连接进来
禁止 root 远程登录 是 root 只允许本机,应用一律用专用账号
删除 test 库 是 默认 test 库对所有人可写
重新加载权限表 是 让以上修改立即生效

Ubuntu 上有个和别的发行版不一样的点:root 默认用 auth_socket 插件认证。 意思是 root 不靠密码,而是靠「你是系统 root」——所以 mysql -u root -p 可能直接被拒,而 sudo mysql 能直接进:

sudo mysql          # 这样能进,因为走了 socket 认证

想给 root 设成密码登录(有些运维脚本需要),进库后执行:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '你的强密码';
FLUSH PRIVILEGES;

反过来,如果只是为了本地管理,保持 auth_socket 反而更安全,不需要改。

三、建库建用户:别拿 root 给应用用

CREATE DATABASE appdb
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

CREATE USER 'appuser'@'localhost' IDENTIFIED BY '另一个强密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

三个细节值得记:

  1. 字符集用 utf8mb4 而不是 utf8。MySQL 的 utf8 是残缺的三字节实现,存不了 emoji 和部分生僻汉字;utf8mb4 才是真 UTF-8。8.0 默认排序规则是 utf8mb4_0900_ai_ci,比老的 utf8mb4_general_ci 更符合 Unicode 标准。
  2. 授权按最小权限给。应用通常不需要 DROP、ALTER,更不需要 SUPER。
  3. MySQL 8 默认认证插件是 caching_sha2_password。老客户端(比如某些版本的 PHP mysqli、Navicat 11、Python 的旧 MySQLdb)连不上就是这个原因。应急办法是给用户改回 mysql_native_password:
ALTER USER 'appuser'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

但要注意这只是兼容退让,不是推荐做法——优先升级客户端。

四、开放远程连接:要改两处

只改一处是连不上的,这是新手最常卡的地方。

第一处:MySQL 自己只监听 127.0.0.1。

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到 bind-address,改成 0.0.0.0(监听所有网卡)或者你的内网 IP:

bind-address            = 0.0.0.0

然后重启:sudo systemctl restart mysql,用 ss -lntp | grep 3306 确认已经监听在 0.0.0.0:3306 而不是 127.0.0.1:3306。

第二处:用户账号本身不允许远程。

MySQL 的用户是 '用户名'@'主机名' 二元组,'appuser'@'localhost' 和 'appuser'@'%' 是两个完全不同的账号。远程连要把主机部分改成允许来源:

CREATE USER 'appuser'@'%' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;

第三处(容易被忘):防火墙和云安全组。

sudo ufw allow from 192.168.1.0/24 to any port 3306   # 只放行内网段,推荐
sudo ufw allow 3306/tcp                                # 放行全网,只在测试时临时用
sudo ufw reload

如果你用的是云服务器(腾讯云 / 阿里云 / 华为云),安全组是独立于系统防火墙的第二道墙,控制台里不开放 3306,系统里全放行也连不上。

最后用客户端验证:

mysql -h 服务器IP -P 3306 -u appuser -p

👉 端口通不通可以先不装客户端就测:HTTP 探测与 Ping 工具(在线免登录)、SSH 连通性检测、Linux 命令速查

五、五个高频报错的排查顺序

报错 真正原因 怎么查
ERROR 1698 (28000): Access denied for user 'root'@'localhost' root 走 auth_socket,不给密码登录 用 sudo mysql 进
ERROR 1130: Host 'x.x.x.x' is not allowed to connect 用户主机部分是 localhost 建 'user'@'%' 或指定来源
ERROR 2003 (HY000): Can't connect to MySQL server 服务没起 / bind 没改 / 防火墙或安全组挡了 依次查 systemctl、ss -lntp、ufw status、云控制台
ERROR 1045 (28000): Access denied 密码错,或客户端不支持 caching_sha2 重置密码 / 改认证插件
启动失败,journal 里报 datadir 权限 /var/lib/mysql 属主不是 mysql sudo chown -R mysql:mysql /var/lib/mysql

查日志永远是第一步:sudo journalctl -u mysql -n 50 --no-pager,或者看 /var/log/mysql/error.log。

六、忘记 root 密码怎么办

  1. sudo systemctl stop mysql
  2. 起一个跳过权限表的实例:sudo mysqld_safe --skip-grant-tables --skip-networking &
  3. 无密码进库:sudo mysql -u root
  4. 改密码:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
  1. 杀掉临时实例,正常启动:sudo systemctl restart mysql

注意 --skip-networking 一定要带上,否则这几十秒里数据库是对全网无密码开放的。

七、彻底卸载

sudo systemctl stop mysql
sudo apt purge -y mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt autoremove -y
sudo apt autoclean

purge 和 remove 的区别是前者会连配置文件一起删;数据目录 /var/lib/mysql 不会被包管理器删除,重装想彻底干净就得手动删——删之前确认备份过。

小结

Ubuntu 装 MySQL 8 的顺序是:apt 安装 → mysql_secure_installation → 建 utf8mb4 库 → 建专用账号 → 改 bind-address 和账号 host → 放行防火墙与安全组。九成「装完连不上」的问题都出在最后两步只做了一半。

把数据库暴露到公网之前,先问自己一句:这个账号的密码扛得住暴力破解吗?改成强密码、限制来源 IP、关掉 root 远程,这三件事做完再开端口。

还有 65 个免费在线工具

纯前端实现,不用注册,数据不上传服务器。

浏览全部工具