直接安装mysql-server即可,ubuntu 22.04+默认提供mysql 8.0.x,安装后自动启用;alter database仅影响新表,全局字符集需修改mysqld.cnf并重启;root默认用auth_socket认证,可用sudo mysql登录或切换为mysql_native_password;远程访问需改bind-address、授权用户并开放3306端口。

直接装 mysql-server 就行,别碰 mysqld 手动启停
Ubuntu 22.04+ 默认源里 mysql-server 已是 8.0.x,开箱即用。执行 sudo apt update && sudo apt install mysql-server 后服务自动启用并运行,systemctl is-active mysql 返回 active 即可确认。不用手动调 mysqld 命令,也无需改 /etc/mysql/mysql.conf.d/mysqld.cnf 启动项——装完就跑,改配置是下一步的事。
ALTER DATABASE 不生效?得进 mysqld.cnf 改默认字符集
MySQL 8.0 默认 utf8mb4,但新库仍可能继承旧配置。临时改单个库用 ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci; 只影响后续新建表,已有表字段编码不变。真要全局生效,必须编辑 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 段下加:
character-set-server = utf8mb4 collation-server = utf8mb4_0900_ai_ci
然后重启: sudo systemctl restart mysql。不重启,SHOW VARIABLES LIKE 'character_set_server'; 依然显示旧值。
登录报错 ERROR 1698 (28000): Access denied for user 'root'@'localhost'
这是 Ubuntu 版 MySQL 的默认安全策略:root 用户用 auth_socket 插件认证,只认系统用户,不走密码。解决方式有两种:
- 用
sudo mysql直接进(推荐初装调试) - 切到
mysql_native_password:进 MySQL 后执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;
注意:改完后普通用户用 mysql -u root -p 才能输密码登录;用 sudo mysql 仍可用,但权限模型已变。
客户端连不上?检查 bind-address 和防火墙
默认 bind-address = 127.0.0.1,只允许本地连接。要远程访问,得改成 bind-address = 0.0.0.0 或具体 IP,并确保用户有对应主机权限:CREATE USER 'user'@'%' IDENTIFIED BY 'pass'; GRANT ALL ON *.* TO 'user'@'%'; FLUSH PRIVILEGES;。同时别忘了开防火墙端口:sudo ufw allow 3306。漏掉任一环,客户端都会卡在 “Connection refused” 或超时。
字符集配置真正起效的地方不在建库语句里,而在 mysqld.cnf 的 server 级设置和用户连接时的 SET NAMES 行为——这两处不一致,应用层就容易出现乱码,且难以复现。










