直接装 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行为——这两处不一致,应用层就容易出现乱码,且难以复现。
