找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

358

积分

0

好友

44

主题
发表于 2025-12-28 23:23:02 | 查看: 27| 回复: 0

在部署或维护MySQL 8数据库时,管理员常会遇到一些基础但至关重要的配置与故障处理任务,例如重置遗忘的密码、调整端口、设置大小写不敏感以兼容特定应用,以及配置远程访问权限。这些操作是数据库/中间件日常运维的核心技能。本文将详细介绍每一项操作的完整步骤与注意事项。

忘记密码处理

若遗忘MySQL root用户密码,可按照以下步骤重置:

  1. 修改配置文件:使用文本编辑器打开MySQL主配置文件(通常为/etc/my.cnf)。

    vim /etc/my.cnf

    [mysqld] 配置段下添加一行,使服务器启动时跳过权限验证:

    skip-grant-tables

    保存并退出。

  2. 重启MySQL服务:使配置生效。

    systemctl restart mysqld
  3. 免密码登录:此时可以直接以root用户身份登录,无需密码。

    mysql -u root
  4. 清空root密码:登录后,进入mysql系统数据库,将root用户的认证字符串置空。

    -- 选择系统数据库
    use mysql;
    -- 清空root用户的密码
    update user set authentication_string='' where user='root';
    -- 刷新权限
    flush privileges;
    exit;
  5. 恢复配置并重启:再次编辑/etc/my.cnf文件,删除之前添加的skip-grant-tables行。保存后重启MySQL服务。

    systemctl restart mysqld
  6. 设置新密码:使用空密码登录,然后为root用户设置新密码。

    mysql -u root -p
    # 提示输入密码时,直接按回车
    -- 设置新密码,将‘YourNewPassword’替换为实际密码
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
    flush privileges;

修改服务端口号

有时需要更改MySQL默认的3306端口以避免冲突。修改方法如下:

  1. 编辑/etc/my.cnf配置文件。
  2. [mysqld]段下添加或修改port参数,例如改为3307:
    port = 3307
  3. 保存文件并重启MySQL服务 systemctl restart mysqld

下图展示了配置文件中端口等参数的设置位置:

MySQL配置文件内容展示

配置表名大小写不敏感

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的限制,仅修改配置后重启无效,必须重建系统数据。

  1. 停止MySQL服务

    sudo systemctl stop mysqld
  2. 删除原数据目录此操作将清空所有数据!

    sudo rm -rf /var/lib/mysql
  3. 重建目录并设置权限

    sudo mkdir /var/lib/mysql
    sudo chown mysql:mysql /var/lib/mysql
    sudo chmod 750 /var/lib/mysql
  4. 重新初始化数据库(指定大小写参数)

    sudo mysqld --initialize --user=mysql --lower_case_table_names=1

    执行后会生成一个临时的root密码,需在日志中查找。

  5. 启动服务

    sudo systemctl start mysqld

第四步:验证与恢复

  1. 获取临时密码并修改

    sudo grep ‘temporary password’ /var/log/mysqld.log
    mysql -u root -p # 使用临时密码登录
    ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘你的新密码’;
  2. 验证配置

    SHOW VARIABLES LIKE ‘lower_case_table_names’;

    应返回 Value: 1

  3. 恢复备份数据

    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远程访问相关配置
修改后重启MySQL服务。

用户授权管理

核心是创建用户并授予其从远程主机(%)访问的权限,这是Linux运维/DevOps中管理数据库访问的基础。

  1. 创建用户并授权(示例:用户 user1,密码 XXXX,授予数据库 db_example 的所有权限)

    CREATE USER ‘user1’@‘%’ IDENTIFIED BY ‘XXXX’;
    GRANT ALL PRIVILEGES ON db_example.* TO ‘user1’@‘%’;
    -- 如果要授予所有数据库的权限,将 `db_example.*` 改为 `*.*`
    FLUSH PRIVILEGES;
  2. 查看用户权限

    SHOW GRANTS FOR ‘user1’@‘%’;
  3. 撤销权限

    REVOKE ALL PRIVILEGES ON db_example.* FROM ‘user1’@‘%’;
    -- 如需同时撤销授权权限
    REVOKE GRANT OPTION ON *.* FROM ‘user1’@‘%’;
    FLUSH PRIVILEGES;
  4. 直接删除用户

    DROP USER ‘user1’@‘%’;
    FLUSH PRIVILEGES;

通过以上步骤,您可以系统地解决MySQL 8在日常运维中遇到的几个典型配置与故障问题。请始终牢记,在进行任何可能影响数据的操作(尤其是修改lower_case_table_names)前,进行完整备份是必须遵守的安全准则。

装饰图标




上一篇:MCP AI Copilot安全管理:规避权限失控的7个关键实践
下一篇:Ceph RGW分段上传元数据读取机制源码解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-11 08:35 , Processed in 0.193457 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表