不推荐用 apt-get install mysql-server——它在Ubuntu/Debian上实际安装MariaDB,非Oracle最新MySQL,导致认证插件、JSON函数、密码策略等行为不一致;必须通过最新APT/YUM源安装mysql-community-server。
直接说结论:云服务器上安装 MySQL,不推荐用 apt-get install mysql-server 这类系统默认源——它装的是 MariaDB 或老旧版本,和最新 MySQL 行为不一致,后续权限、密码策略、JSON 函数支持都会出问题。
Ubuntu/Debian 的 apt install mysql-server 实际安装的是 mariadb-server,不是 Oracle 最新 MySQL。CentOS 7/8 默认仓库也早已移除 MySQL,只留 MariaDB。两者在以下地方表现不同:
mysql_secure_installation 脚本行为差异大(MariaDB 不强制密码强度校验)caching_sha2_password 认证插件,MariaDB 用的是 unix_socket 或 mysql_native_password
CREATE USER ... IDENTIFIED WITH 语法在 MariaDB 中要么缺失要么语义不同以 Ubuntu 22.04/24.04 或 CentOS Stream 9 为例,正确安装步骤是:
sudo apt remove --purge mysql-server mariadb-server(Ubuntu)或 sudo dnf remove mysql-community-server(RHEL系)wget https://dev.mysql.com/get/mysql80-community-release-$(lsb_release -sc)-1.noarch.rpm,然后 sudo rpm -ivh mysql80-community-release-*.rpm(CentOS/RHEL);Ubuntu 则用 sudo dpkg -i mysql80-community-release-*.deb
sudo yum repolist enabled | grep mysql 或 apt-cache policy mysql-community-server
sudo yum install mysql-community-server(CentOS)或 sudo apt install mysql-community-server(Ubuntu)MySQL 8.0+ 启动后会生成临时密码,藏在 /var/log/mysqld.log 里,用 sudo grep 'temporary password' /var/log/mysqld.log 找到。但别急着用这个密码连——先执行 mysql_secure_installation,它会强制你:
root@localhost 密码(必须满足策略:长度 ≥8、含大小写字母+数字+特殊字符)DELETE FROM mysql.user WHERE User='';
root@localhost 即可)这步跳过等于裸奔。很多“连不上 MySQL”问题,根源就是没跑 mysql_secure_installation,导致 root 只能从 localhost 用 socket 连,且密码为空或过期。
云服务器默认不开 3306 端口,且 MySQL 默认只监听 127.0.0.1。想让外部应用连接,必须同时做两件事:
/etc/my.cnf(或 /etc/mysql/mysql.conf.d/mysqld.cnf),把 bind-address = 127.0.0.1 改成 bind-address = 0.0.0.0 或具体内网 IP(如 172.16.0.5)sudo ufw allow 3306(Ubuntu)或 sudo firewall-cmd --permanent --add-port=3306/tcp(CentOS)sudo systemctl restart mysqld
注意:改完 bind-address 后,必须给远程用户显式授权,比如 CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'StrongPass!2026'; GRANT SELECT,INSERT ON mydb.* TO 'app'@'192.168.1.%'; —— 直接用 root@'%' 是严重安全隐患。