0aa8fe6
这次没有正文改动。
这是 database/MySQL 安装与初始化.md 的改动记录。后台每次保存都会留一份快照,
这里显示的是快照之间的差异,不会混入其他文章的改动。
还没有后台修改记录。
下面是 Git 里的提交,可能包含其他文章的改动(因为一次提交会带上工作区所有变化)。
0aa8fe6
这次没有正文改动。
a0b4968
@@ -0,0 +1,82 @@ +--- +tags: [MySQL, 安装, 数据库] +order: 10 +--- + +# MySQL 安装与初始化 + +## 场景 + +新服务器要装 MySQL,给内部应用用。要能远程连、字符集正确、开机自启。 + +## 前置条件 + +- 知道应用连过来的网段 +- 磁盘规划好:数据目录别放系统盘 +- 确认没有装过 MariaDB 或旧版本(会冲突) + +## 配置 + +```bash +# CentOS / Rocky / 麒麟 +dnf install -y mysql-server +systemctl enable --now mysqld + +# Ubuntu / Debian +apt install -y mysql-server + +# 取初始密码 +grep 'temporary password' /var/log/mysqld.log + +# 安全初始化:改密码、删匿名用户、禁 root 远程 +mysql_secure_installation +``` + +字符集(8.0 默认 `utf8mb4`,5.7 要手动改): + +```ini +[mysqld] +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +default-time-zone = '+08:00' +max_connections = 500 +``` + +```bash +systemctl restart mysqld +``` + +建业务账号: + +```sql +CREATE DATABASE appdb DEFAULT CHARACTER SET utf8mb4; +CREATE USER 'app'@'10.0.0.%' IDENTIFIED BY '强密码'; +GRANT ALL PRIVILEGES ON appdb.* TO 'app'@'10.0.0.%'; +FLUSH PRIVILEGES; +``` + +## 验证 + +```bash +systemctl status mysqld +mysql -u root -p -e "SELECT VERSION(); SHOW VARIABLES LIKE 'character_set_server';" +mysql -h 10.0.0.5 -u app -p -e "SELECT 1;" +ss -lntp | grep 3306 +``` + +## 回滚 + +```bash +systemctl disable --now mysqld +dnf remove -y mysql-server +rm -rf /var/lib/mysql +``` + +## 坑 + +- **数据目录放系统盘**,日志一多就把根分区写满。 +- 5.7 默认 `latin1`,建库不改字符集,中文全靠运气。 +- `bind-address` 默认只有 `127.0.0.1`,远程连不上。 +- 防火墙/安全组没开 3306,应用一直超时。 +- root 只允许本地登录是默认安全策略,不要图省事开远程。 +- 时区不对会导致 `NOW()` 差 8 小时,写进业务数据的都是错的时间。