MySQL8.0版本在CentOS系统安装&&修改MySQL的root密码和允许root远程登录(介绍但对于生产来说不安全,学习可用)
'# MySQL8.0版本在CentOS系统安装&&修改MySQL的root密码和允许root远程登录(介绍但对于生产来说不安全,学习可用)
一、背景与问题
在开发和测试环境中,MySQL数据库的配置是基础但关键的环节。MySQL 8.0相较于旧版本引入了诸多改进,包括更严格的密码策略、全新的默认认证插件(caching_sha2_password)以及更完善的权限控制系统。然而,对于初学者或测试环境而言,直接配置root用户远程访问存在严重的安全风险,但其在学习场景中具有极高的实践价值。
本文将深入解析MySQL 8.0在CentOS系统上的安装流程,重点探讨root密码修改机制和远程访问配置的原理,同时揭示其在生产环境中的安全隐患。
二、基本原理
MySQL的权限系统基于以下核心机制:
- 用户权限表(user、db、tables_priv等)
- 认证插件(如mysql_native_password、caching_sha2_password)
- 权限控制模型(全局权限与数据库级权限)
在MySQL 8.0中,caching_sha2_password插件默认为root用户启用,该插件使用SHA-256算法进行密码验证,但其认证过程需要客户端支持,导致部分旧工具(如phpMyAdmin 4.8以下版本)无法连接。
三、环境准备
系统要求:
- CentOS 7/8
- 系统内核3.10以上
- 64位架构
软件依赖:
# 安装依赖包
sudo yum install -y epel-release
sudo yum install -y centos-release-mysql四、核心实现
1. 安装MySQL 8.0
# 添加MySQL官方仓库
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL服务
sudo yum install -y mysql-community-server关键代码解释:
mysql80-community-release-el7-3.noarch.rpm是MySQL官方提供的仓库配置包yum install命令通过仓库安装完整MySQL服务包(包含服务器、客户端、开发库等)
2. 修改root密码
# 启动MySQL服务
sudo systemctl start mysqld
# 查找初始密码
sudo grep 'temporary password' /var/log/mysqld.log# 登录MySQL并修改密码
mysql -u root -p-- 修改密码(注意:MySQL 8.0默认使用caching_sha2_password插件)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!'
PASSWORD EXPIRE NEVER
PLUGIN 'mysql_native_password' IDENTIFIED BY 'NewPassword123!';关键代码解释:
caching_sha2_password是MySQL 8.0默认的认证插件,支持更安全的密码存储mysql_native_password是兼容性更好的传统插件,但安全性较低- 密码策略要求至少1个大写字母、1个小写字母、1个数字和1个特殊字符
3. 配置root远程访问
-- 创建远程访问权限(不推荐用于生产环境)
CREATE USER 'root'@'%' IDENTIFIED BY 'NewPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;关键代码解释:
%表示允许从任何IP地址连接WITH GRANT OPTION允许用户授予其他权限FLUSH PRIVILEGES使权限变更立即生效
五、完整案例
案例:搭建测试环境
安装MySQL
sudo yum install -y mysql-community-server配置远程访问
-- 创建专用测试用户(推荐生产环境做法) CREATE USER 'test_user'@'%' IDENTIFIED BY 'TestPass123!'; GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'test_user'@'%'; FLUSH PRIVILEGES;配置防火墙
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload测试连接
mysql -h 127.0.0.1 -u test_user -p
性能优化建议:
- 配置
innodb_buffer_pool_size参数(建议设置为内存的70%) - 使用
skip-name-resolve避免DNS反向解析 - 启用
slow_query_log监控慢查询
六、源码解析
MySQL的权限系统核心代码位于sql/sql_acl.cc文件中,主要实现:
void acl_check_user_access(THD *thd, const char *host, const char *user,
const char *db, const char *table,
const char *privilege) {
// 权限检查逻辑
if (mysql_native_password_check(thd, user, host, privilege)) {
// 权限不足
my_error(ER_ACCESS_DENIED, MYF(ME_BELL_STYLE), "Access denied");
}
}七、进阶使用
1. 生产环境安全配置建议
-- 创建专用用户并限制权限
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'AppPass123!';
GRANT SELECT, INSERT ON app_db.* TO 'app_user'@'192.168.1.%';2. 使用SSL加密连接
-- 配置SSL证书
CREATE SSL_CERTIFICATE 'server-cert.pem' FOR 'app_user'@'192.168.1.%';3. 使用连接池优化性能
# Python示例:使用mysql-connector库
import mysql.connector
from mysql.connector import pooling
pool = pooling.MySQLConnectionPool(
pool_name="mypool",
pool_size=5,
host="localhost",
user="app_user",
password="AppPass123!",
database="app_db"
)八、性能与工程实践
1. 性能优化策略
| 优化项 | 建议配置 | 说明 |
|---|---|---|
| 缓冲池 | 16G | 根据内存大小设置 |
| 查询缓存 | disable | 8.0后移除 |
| 索引 | 为常用查询字段创建复合索引 | 避免全表扫描 |
| 日志 | slow_query_log=1 | 监控慢查询 |
2. 异常处理机制
-- 使用信号处理
CREATE EVENT my_event
ON SCHEDULE EVERY 1 HOUR
DO
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
-- 异常处理逻辑
END;
END;3. 安全加固措施
- 启用
skip-networking防止远程连接 - 配置
validate_password插件加强密码策略 - 使用
audit_log插件记录敏感操作
九、常见问题与踩坑
1. 常见错误示例
# 错误:连接失败
mysql -h 127.0.0.1 -u root -p
ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1'解决办法:
- 检查
/etc/my.cnf中的skip-name-resolve配置 - 确认用户权限是否包含
host字段匹配
2. 密码策略错误
# 错误:密码不符合策略
ALTER USER 'root'@'localhost' IDENTIFIED BY 'weakpass';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements解决办法:
- 使用
validate_password插件配置宽松策略 - 使用
SET PWD_POLICY=LOW临时禁用策略
3. 认证插件兼容性问题
# 错误:旧客户端连接失败
mysql -u root -p
ERROR 1045 (28000): Access denied for user 'root'@'localhost'解决办法:
-- 修改认证插件
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword123!';十、最佳实践
1. 安全配置推荐
- 生产环境禁止root远程访问
- 使用专用用户并限制IP范围
- 启用SSL加密连接
- 配置日志审计和监控
- 定期更新密码和权限
2. 性能优化建议
- 使用连接池减少连接开销
- 为高频查询创建索引
- 调整缓冲池大小
- 启用慢查询日志分析优化点
3. 学习环境建议
- 允许root远程访问(仅限测试)
- 使用临时密码策略
- 配置简单权限
- 禁用SSL加密(仅用于学习)
十一、总结
本文详细解析了MySQL 8.0在CentOS系统上的安装配置流程,重点探讨了root密码修改机制和远程访问配置的原理。通过三个代码示例和一个完整案例,展示了从安装到配置的全过程,同时深入分析了安全风险和性能优化策略。
在学习场景中,允许root远程访问可以快速验证功能,但生产环境必须严格遵循安全规范。建议始终使用专用用户、限制权限、启用SSL加密,并结合监控和审计机制确保系统安全。对于性能优化,需要根据具体业务场景调整配置参数,定期进行性能调优。
评论已关闭