1。先更新系统包列表:sudo apt update && sudo apt upgrade -y
2。 安装MySQL服务器核心包
sudo apt install -y mysql-server
安装过程中如果弹出密码设置界面,直接设置root密码(记好!);
如果未弹出密码界面,继续下一步初始化。
3。安全初始化配置(关键)
执行 MySQL 安全配置脚本,修复默认安全漏洞、设置密码(若第一步未设置):
bash
运行
sudo mysql_secure_installation
按提示逐步操作(全程用Y/N确认,建议如下):
设置 root 密码:若第一步已设,直接输入;未设则在此设置(密码需符合复杂度:数字 + 字母 + 特殊字符,如MySQL@123456);
4。移除匿名用户:输入Y(禁止匿名登录,提升安全性);
禁止 root 远程登录:输入N(云服务器需要远程访问数据库,若仅本地使用可输Y);
删除 test 测试数据库:输入Y(无用数据库,删除避免风险);
刷新权限表:输入Y(使配置立即生效)
5。
验证安装是否成功
bash
运行
查看MySQL服务状态(确认是否开机自启、运行正常)
sudo systemctl status mysql
正常输出会显示 "active (running)"
6。
本地登录MySQL测试
sudo mysql -uroot -p
输入之前设置的root密码,能进入MySQL命令行即成功(提示符变为 "mysql>")
7。
配置远程访问(云服务器必做)
默认 MySQL 仅允许本地(localhost)访问,需修改配置开启远程连接:
步骤 1:修改 MySQL 绑定地址
bash
运行
编辑MySQL配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到bind-address = 127.0.0.1这一行,修改为:
bind-address = 0.0.0.0 # 允许所有IP访问
保存退出(vim 中按Esc→输入:wq→回车)。
步骤 2:授权 root 用户远程访问
登录 MySQL 命令行:
运行
sudo mysql -uroot -p
执行以下 SQL 语句:
sql
-- 切换到mysql系统数据库
USE mysql;
-- 修改root用户的访问权限(%表示允许所有IP)
UPDATE user SET host='%' WHERE user='root' AND host='localhost';
-- 刷新权限,使配置生效
FLUSH PRIVILEGES;
-- 退出MySQL
EXIT;
步骤 3:重启 MySQL 服务
bash
运行
sudo systemctl restart mysql
- 开放防火墙端口
MySQL 默认端口是 3306,需开放 Ubuntu 防火墙:
bash
运行
允许3306端口访问
sudo ufw allow 3306/tcp
重启防火墙使配置生效
sudo ufw reload
查看防火墙状态(确认3306已开放)
sudo ufw status
注意:如果是云服务器(阿里云 / 腾讯云等),还需在云控制台安全组中添加规则,允许 3306 端口的入站访问(否则远程仍无法连接)。
三、常用运维命令
bash
运行
启动/停止/重启MySQL
sudo systemctl start mysql
sudo systemctl stop mysql
sudo systemctl restart mysql
设置开机自启(默认已开启,可验证)
sudo systemctl enable mysql
查看MySQL版本
mysql -V
遇到的问题:安装后没有提示更改密码,要在装好后手动改。
第一步:先查询当前存在的 root 相关用户(关键前置操作)
登录 MySQL 终端(mysql -u root)后,先执行以下命令,查看实际存在的 root 用户对应的主机名,避免继续使用错误的用户组合:
sql
-- 1. 切换到mysql系统数据库(存储用户信息的核心数据库)
USE mysql;
-- 2. 查询所有用户的「用户名」和「登录主机」组合
SELECT User, Host FROM user;
执行后会返回类似如下结果(示例),你可以看到实际存在的 root 用户对应的 Host 值(比如 %、127.0.0.1 等):
plaintext
+------+-----------+
| User | Host |
+------+-----------+
| root | % |
| root | 127.0.0.1 |
+------+-----------+
记录下查询结果中 User 为 root 对应的 Host 值(这是后续命令的关键)。
三、解决方案(两种可选,优先方案 1)
方案 1:使用查询到的「实际用户组合」修改密码(推荐,最直接)
根据上面查询到的 root 对应的 Host 值,替换命令中的主机名,执行正确的密码设置命令(MySQL 8.x 适用)。
示例(根据不同查询结果对应修改):
-
若查询到
root@'%':sql
-- 方式1:SET PASSWORD 命令 SET PASSWORD FOR 'root'@'%' = 'root@12345678'; -- 方式2:ALTER USER 命令(官方推荐,更稳定) ALTER USER 'root'@'%' IDENTIFIED BY 'root@12345678'; -
若查询到
root@'127.0.0.1':sql
ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'root@12345678';
方案 2:创建 'root'@'localhost' 用户并设置密码(若需新增该用户组合)
如果你的业务需要 'root'@'localhost' 这个本地登录用户,可先创建该用户,再设置密码:
sql
-- 1. 创建 'root'@'localhost' 用户并直接设置密码(MySQL 8.x 语法)
CREATE USER 'root'@'localhost' IDENTIFIED BY 'root@12345678';
-- 2. (可选)给该用户授予最高权限(和默认root用户权限一致)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
-- 3. 刷新权限,使用户创建和授权立即生效
FLUSH PRIVILEGES;
四、后续步骤:验证密码设置成功
-
退出 MySQL 终端: sql
EXIT; -
在 Linux 终端执行登录命令,验证新密码: bash
运行
mysql -u root -p -
输入密码
root@12345678,若能成功进入mysql>提示符,说明配置生效。
补充说明
Host字段中,localhost表示仅允许本地套接字登录,127.0.0.1表示仅允许本地 IP 登录,%表示允许任意远程主机登录(公网环境不推荐);- 执行
CREATE USER或ALTER USER后,若提示权限不足,说明当前登录的用户无相关权限,可核对当前登录用户的权限组合; - 该操作仅适用于 MySQL 8.x 系列,MySQL 5.x 创建用户的语法略有差异(需使用
IDENTIFIED BY PASSWORD)。
遇到远程登入不了的问题:
你遇到的 MySQL 远程登录失败问题,结合之前user表的查询结果,核心原因是 root 用户的认证插件不支持远程、MySQL 默认限制远程访问、防火墙未开放端口 这三点,我会按优先级给出分步解决方案:
一、核心原因定位(从之前的user表结果来看)
- 认证插件不支持远程 :你的
root@%用户使用的是auth_socket插件,这个插件仅支持本地系统用户匹配认证 (比如 Linux 的root系统用户直接登录 MySQL),完全不支持远程密码登录。 - MySQL 默认绑定本地地址 :默认情况下,MySQL 会绑定
127.0.0.1(仅允许本地访问),远程客户端无法连接到 MySQL 的 3306 端口。 - Linux 防火墙未开放 3306 端口:即使 MySQL 配置正确,防火墙会拦截外部的 3306 端口请求,导致连接失败。
二、分步解决方案(按优先级执行)
步骤 1:修改 root 用户的认证插件和密码(解决远程认证问题)
这是最关键的一步,必须先把auth_socket改成密码认证插件,才能支持远程登录。
-
本地登录 MySQL (因为远程登不了,先在服务器本地操作):
bash
运行
mysql -u root # 本地用auth_socket插件可免密登录 -
修改 root@% 的认证插件和密码 (MySQL 8.x 推荐用
caching_sha2_password,兼容旧客户端用mysql_native_password):sql
-- 方式1:官方推荐的加密插件(兼容大部分新版客户端) ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY '你的新密码'; -- 方式2:兼容旧版客户端(比如Navicat早期版本) -- ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的新密码'; -- 刷新权限使配置生效 FLUSH PRIVILEGES; -
验证修改结果 :再次查询
user表,确认root@%的plugin字段变为caching_sha2_password或mysql_native_password,authentication_string字段有加密密文。
步骤 2:配置 MySQL 允许远程访问(修改绑定地址)
MySQL 默认只监听本地127.0.0.1,需要修改配置文件让它监听所有网卡。
-
找到 MySQL 的配置文件 (不同系统路径不同):
- Ubuntu/Debian 系统:
/etc/mysql/mysql.conf.d/mysqld.cnf - CentOS/RHEL 系统:
/etc/my.cnf或/etc/my.cnf.d/mysql-server.cnf
- Ubuntu/Debian 系统:
-
编辑配置文件 :
bash
运行
# Ubuntu示例,用vim编辑 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf找到
bind-address这一行,修改为:ini
bind-address = 0.0.0.0 # 监听所有网卡地址(如果找不到这一行,直接添加即可)
-
重启 MySQL 服务 :
bash
运行
# Ubuntu/Debian sudo systemctl restart mysql # CentOS/RHEL sudo systemctl restart mysqld
步骤 3:开放 Linux 防火墙的 3306 端口
MySQL 的默认端口是 3306,需要让防火墙允许外部访问这个端口。
情况 1:Ubuntu/Debian 用 ufw 防火墙
bash
运行
# 开放3306端口(TCP协议)
sudo ufw allow 3306/tcp
# 重启防火墙生效
sudo ufw reload
情况 2:CentOS/RHEL 用 firewalld 防火墙
bash
运行
# 开放3306端口
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启防火墙生效
sudo firewall-cmd --reload
步骤 4:远程登录的正确命令
在远程客户端的终端 / 工具中,执行以下命令登录(替换为你的服务器 IP 和密码):
bash
运行
# 格式:mysql -u 用户名 -p -h 服务器IP地址
mysql -u root -p -h 192.168.1.100 # 替换为你的服务器IP
执行后输入你设置的密码,即可远程登录。
三、常见排查点(如果还是登录失败)
-
检查 MySQL 是否监听 3306 端口 :在服务器本地执行,看是否有
0.0.0.0:3306的监听记录bash
运行
sudo netstat -tulpn | grep 3306正常结果示例:
tcp6 0 0 :::3306 :::* LISTEN 1234/mysqld -
测试端口连通性:在远程客户端执行,测试服务器 3306 端口是否能通
bash
运行
# 用telnet测试(没有telnet可先安装) telnet 服务器IP 3306 # 或用nc测试 nc -zv 服务器IP 3306如果提示
Connected,说明端口通;提示Connection refused,说明防火墙或 MySQL 配置有问题。 -
检查 root 用户的 Host 是否正确 :确保
user表中有root@%(%表示允许任意远程主机),如果是root@192.168.1.%则只允许该网段远程。
四、安全提醒
- 不要在公网环境中直接开放
root@%的远程权限,建议创建普通用户并只授予必要权限。 - 密码要设置为强密码(字母 + 数字 + 特殊字符),避免暴力破解。
- 若只需要特定 IP 远程访问,可将
%改为具体 IP(如root@192.168.1.200),提升安全性。