MySQL 安装与初始化
场景
新服务器要装 MySQL,给内部应用用。要能远程连、字符集正确、开机自启。
前置条件
- 知道应用连过来的网段
- 磁盘规划好:数据目录别放系统盘
- 确认没有装过 MariaDB 或旧版本(会冲突)
配置
# 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 要手动改):
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
default-time-zone = '+08:00'
max_connections = 500
systemctl restart mysqld
建业务账号:
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;
验证
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
回滚
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 小时,写进业务数据的都是错的时间。