在部署或维护MySQL 8数据库时,管理员常会遇到一些基础但至关重要的配置与故障处理任务,例如重置遗忘的密码、调整端口、设置大小写不敏感以兼容特定应用,以及配置远程访问权限。这些操作是数据库/中间件日常运维的核心技能。本文将详细介绍每一项操作的完整步骤与注意事项。
忘记密码处理
若遗忘MySQL root用户密码,可按照以下步骤重置:
-
修改配置文件:使用文本编辑器打开MySQL主配置文件(通常为/etc/my.cnf)。
vim /etc/my.cnf
在 [mysqld] 配置段下添加一行,使服务器启动时跳过权限验证:
skip-grant-tables
保存并退出。
-
重启MySQL服务:使配置生效。
systemctl restart mysqld
-
免密码登录:此时可以直接以root用户身份登录,无需密码。
mysql -u root
-
清空root密码:登录后,进入mysql系统数据库,将root用户的认证字符串置空。
-- 选择系统数据库
use mysql;
-- 清空root用户的密码
update user set authentication_string='' where user='root';
-- 刷新权限
flush privileges;
exit;
-
恢复配置并重启:再次编辑/etc/my.cnf文件,删除之前添加的skip-grant-tables行。保存后重启MySQL服务。
systemctl restart mysqld
-
设置新密码:使用空密码登录,然后为root用户设置新密码。
mysql -u root -p
# 提示输入密码时,直接按回车
-- 设置新密码,将‘YourNewPassword’替换为实际密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
flush privileges;
修改服务端口号
有时需要更改MySQL默认的3306端口以避免冲突。修改方法如下:
- 编辑
/etc/my.cnf配置文件。
- 在
[mysqld]段下添加或修改port参数,例如改为3307:
port = 3307
- 保存文件并重启MySQL服务
systemctl restart mysqld。
下图展示了配置文件中端口等参数的设置位置:

配置表名大小写不敏感
Linux系统下MySQL默认区分表名大小写。若需改为不敏感(例如从Windows环境迁移项目),过程较为复杂,操作前务必备份所有数据。
第一步:备份所有数据
这是防止数据丢失的关键步骤。
mysqldump -u root -p --all-databases > /path/to/backup/all_databases_backup.sql
第二步:修改配置文件
编辑/etc/my.cnf,在[mysqld]段下添加参数:
lower_case_table_names=1
参数说明:
0:区分大小写(Unix系统默认)。
1:不区分大小写(存储和比较时均转换为小写)。
2:存储时保留大小写,比较时转换为小写。
第三步:重新初始化数据目录
由于MySQL 8的限制,仅修改配置后重启无效,必须重建系统数据。
-
停止MySQL服务
sudo systemctl stop mysqld
-
删除原数据目录(此操作将清空所有数据!)
sudo rm -rf /var/lib/mysql
-
重建目录并设置权限
sudo mkdir /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql
-
重新初始化数据库(指定大小写参数)
sudo mysqld --initialize --user=mysql --lower_case_table_names=1
执行后会生成一个临时的root密码,需在日志中查找。
-
启动服务
sudo systemctl start mysqld
第四步:验证与恢复
-
获取临时密码并修改
sudo grep ‘temporary password’ /var/log/mysqld.log
mysql -u root -p # 使用临时密码登录
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘你的新密码’;
-
验证配置
SHOW VARIABLES LIKE ‘lower_case_table_names’;
应返回 Value: 1。
-
恢复备份数据
mysql -u root -p < /path/to/backup/all_databases_backup.sql
配置远程访问
允许远程客户端连接数据库,需进行以下配置。
修改身份验证插件与绑定地址
某些客户端(如旧版Navicat)连接时可能出现 Plugin ‘mysql_native_password’ is not loaded 错误。
编辑/etc/my.cnf,在[mysqld]段下确保有以下配置:
bind-address = 0.0.0.0 # 绑定到所有IP地址
mysql_native_password=ON # 启用旧式密码插件

修改后重启MySQL服务。
用户授权管理
核心是创建用户并授予其从远程主机(%)访问的权限,这是Linux运维/DevOps中管理数据库访问的基础。
-
创建用户并授权(示例:用户 user1,密码 XXXX,授予数据库 db_example 的所有权限)
CREATE USER ‘user1’@‘%’ IDENTIFIED BY ‘XXXX’;
GRANT ALL PRIVILEGES ON db_example.* TO ‘user1’@‘%’;
-- 如果要授予所有数据库的权限,将 `db_example.*` 改为 `*.*`
FLUSH PRIVILEGES;
-
查看用户权限
SHOW GRANTS FOR ‘user1’@‘%’;
-
撤销权限
REVOKE ALL PRIVILEGES ON db_example.* FROM ‘user1’@‘%’;
-- 如需同时撤销授权权限
REVOKE GRANT OPTION ON *.* FROM ‘user1’@‘%’;
FLUSH PRIVILEGES;
-
直接删除用户
DROP USER ‘user1’@‘%’;
FLUSH PRIVILEGES;
通过以上步骤,您可以系统地解决MySQL 8在日常运维中遇到的几个典型配置与故障问题。请始终牢记,在进行任何可能影响数据的操作(尤其是修改lower_case_table_names)前,进行完整备份是必须遵守的安全准则。

|