深入解析 CentOS 7 上 MySQL 8.0 的最佳实践20241112

深入解析 CentOS 7 上 MySQL 8.0 的最佳实践

随着现代数据库应用需求的快速增长,MySQL 8.0 成为许多企业和开发者的首选数据库管理系统。其性能改进、增强的安全特性以及强大的兼容性,使其在现代架构中占据重要地位。本篇博客将基于实践经验,深入解析如何在 CentOS 7 上高效地安装、配置和优化 MySQL 8.0,并附带完整的脚本化流程和常见问题的解决方案。

为什么选择 MySQL 8.0?

在开始操作之前,让我们简要了解为何选择 MySQL 8.0:

  • 性能提升:相比 MySQL 5.x,8.0 提供了更高效的查询优化器和更好的并发处理能力。
  • 增强的 JSON 支持:简化了 NoSQL 风格的数据存储。
  • 安全性改进:默认使用 caching_sha2_password 提升了安全性,内置密码策略更严格。
  • 开发者友好:支持窗口函数、CTE(公共表表达式)和事务支持的 DDL。

安装与配置:从入门到精通

1. 系统准备

首先,更新系统并安装必要的工具:

sudo yum update -y
sudo yum install -y epel-release
sudo yum groupinstall -y 'Development Tools'
  • 最佳实践提示:始终保持系统更新,并确保开发工具组安装完备以便后续依赖处理。

2. 添加 MySQL 8.0 仓库

通过官方仓库获取最新的 MySQL 版本:

sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum clean all
sudo yum makecache
常见问题:
  • 如果遇到 GPG 签名验证失败,请执行以下命令导入密钥:
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

3. 安装 MySQL 8.0

安装并启动 MySQL:

sudo yum install -y mysql-community-server
sudo systemctl start mysqld
sudo systemctl enable mysqld

获取安装时生成的临时密码:

sudo grep 'temporary password' /var/log/mysqld.log

注意:确保记录此密码,用于后续初次登录。

4. 配置 MySQL 安全性

运行 mysql_secure_installation 进行安全配置:

sudo mysql_secure_installation

安全优化建议:

  • 删除匿名用户:防止未授权访问。
  • 禁用 root 远程登录:限制高权限用户的风险。
  • 删除测试数据库:清除不必要的默认资源。

5. 创建用户与权限管理

创建新用户并授予权限:

CREATE USER 'mysqluser'@'%' IDENTIFIED BY 'StrongPassword@123';
GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

兼容性设置:为支持旧客户端,将认证插件更改为 mysql_native_password:

ALTER USER 'mysqluser'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPassword@123';

6. 配置远程访问

编辑 /etc/my.cnf,添加以下内容:

[mysqld]
port=3306
bind-address=0.0.0.0

重启服务并开放防火墙端口:

sudo systemctl restart mysqld
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --reload

SELinux 注意事项:

  • 如果 SELinux 启用,确保开放 MySQL 端口:
sudo semanage port -a -t mysqld_port_t -p tcp 3306

生产环境优化建议

1. 优化 MySQL 配置

根据服务器的资源分配,优化以下参数:

[mysqld]
max_connections = 200
innodb_buffer_pool_size = 2G
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
slow_query_log = 1

最佳实践:通过分析查询性能(EXPLAIN 和 slow query log),持续优化数据库结构。

2. 定期备份

使用 mysqldump 创建自动备份脚本:

mysqldump -u root -p --all-databases > /backup/mysql_$(date +%F).sql
  • 增强方案:在大规模部署中,推荐使用 Percona XtraBackup 提高备份效率。

3. 监控与日志分析

启用查询日志并定期分析:

SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'FILE';

结合 Prometheus 和 Grafana 实现实时监控,可快速发现性能瓶颈。

常见问题与解决方案

1. 登录失败:旧客户端不支持

修改用户认证插件:

ALTER USER 'mysqluser'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPassword@123';

2. 防火墙阻止连接

确认端口是否被正确开放:

sudo firewall-cmd --list-ports
sudo ss -tuln | grep 3306

3. 忘记 root 密码

通过跳过授权表重置密码:

sudo systemctl stop mysqld
sudo mysqld --skip-grant-tables &
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword@123';

自动化脚本:从零到完成

以下脚本可一键完成上述配置:

#!/bin/bashsudo yum update -y
sudo yum install -y epel-release
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum install -y mysql-community-server
sudo systemctl start mysqld
sudo systemctl enable mysqldTEMP_PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
echo "Temporary MySQL root password: $TEMP_PASSWORD"sudo mysql_secure_installationsudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --reloadecho "MySQL 安装和配置完成!"

为远程用户 remote_user 开通访问权限

为了让外部应用或开发者能够远程访问 MySQL 数据库,需要配置一个远程用户,并确保其拥有访问权限和必要的网络配置支持。以下是完整的配置流程:

1. 创建远程用户

登录 MySQL 后,执行以下命令创建一个远程用户:

CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPassword@123';

说明:

  • remote_user 是远程用户的用户名,可以根据需要修改。
  • % 允许从任意 IP 地址连接。如果希望限制为特定 IP,例如 192.168.1.100,可将 % 替换为具体的 IP 地址。
  • StrongPassword@123 是远程用户的密码,建议设置为强密码,包含大小写字母、数字和特殊字符。

2. 授予远程访问权限

为用户授予所需的权限。例如,授予对所有数据库的全部权限:

GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;

说明:

  • ON . 表示授予用户对所有数据库和表的权限。如果希望限制权限范围,可以指定具体的数据库和表,例如 ON my_database.*。
  • 执行 FLUSH PRIVILEGES 以确保权限生效。

3. 验证远程用户配置

登录 MySQL,检查用户的主机字段是否正确:

SELECT Host, User FROM mysql.user WHERE User = 'remote_user';

输出示例:

+-----------+-------------+
| Host      | User        |
+-----------+-------------+
| %         | remote_user |
+-----------+-------------+

说明:

  • 如果 Host 字段不是 %,可以通过以下命令更新:
UPDATE mysql.user SET Host='%' WHERE User='remote_user';
FLUSH PRIVILEGES;

4. 配置 MySQL 服务允许远程访问

编辑 MySQL 的配置文件 /etc/my.cnf,确保以下设置:

[mysqld]
bind-address=0.0.0.0
port=3306

说明:

  • bind-address=0.0.0.0 允许 MySQL 监听所有网络接口。如果仅允许特定接口访问,可替换为具体 IP。
  • 确认端口是否正确(默认是 3306),如有需要可以自定义端口。

保存文件后,重启 MySQL 服务以应用更改:

sudo systemctl restart mysqld

5. 配置防火墙规则

为远程用户打开 MySQL 的服务端口:

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --reload

注意:

  • 如果只允许特定 IP 地址访问,可以指定来源地址:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept'
sudo firewall-cmd --reload

6. SELinux 相关配置

在启用 SELinux 的系统中,确保为 MySQL 配置正确的 SELinux 规则:

sudo semanage port -a -t mysqld_port_t -p tcp 3306

如果 semanage 未安装,可以通过以下命令安装:

sudo yum install -y policycoreutils-python

7. 测试远程连接

在远程机器上,通过 MySQL 客户端测试连接:

mysql -u remote_user -p -h <your_server_ip>

示例命令解析:

  • -u remote_user:使用创建的远程用户登录。
  • -p:提示输入用户密码。
  • -h <your_server_ip>:指定 MySQL 服务器的 IP 地址或域名。

如果 MySQL 服务使用非默认端口(例如 3307),则需要指定端口:

mysql -u remote_user -p -h <your_server_ip> -P 3307

8. 安全性注意事项

  • 限制主机访问范围:尽量避免使用 %,改为特定 IP 地址。
  • 启用 SSL 连接:为提高安全性,可配置 MySQL 使用 SSL 加密通信。
  • 最小权限原则:为用户授予尽可能少的权限,例如仅授予 SELECT 权限:
GRANT SELECT ON my_database.* TO 'remote_user'@'192.168.1.100';
FLUSH PRIVILEGES;

远程用户配置的自动化脚本

以下是将上述远程用户配置步骤自动化的脚本:

#!/bin/bashREMOTE_USER="remote_user"
REMOTE_PASSWORD="StrongPassword@123"
REMOTE_HOST="%"
MYSQL_PORT=3306echo "Configuring remote user access for MySQL..."# 登录 MySQL 并配置用户
mysql -u root -p <<EOF
CREATE USER '${REMOTE_USER}'@'${REMOTE_HOST}' IDENTIFIED BY '${REMOTE_PASSWORD}';
GRANT ALL PRIVILEGES ON *.* TO '${REMOTE_USER}'@'${REMOTE_HOST}';
FLUSH PRIVILEGES;
EOF# 配置 MySQL 监听所有地址
sudo sed -i 's/^bind-address.*/bind-address = 0.0.0.0/' /etc/my.cnf
sudo systemctl restart mysqld# 配置防火墙
sudo firewall-cmd --permanent --zone=public --add-port=${MYSQL_PORT}/tcp
sudo firewall-cmd --reloadecho "Remote user configuration complete!"

通过上述步骤,我们为远程用户 remote_user 成功开通了安全的远程访问权限,同时确保服务的安全性和性能最佳化。

结语

通过本篇博客,您将能够在 CentOS 7 上成功部署和优化 MySQL 8.0。无论是安全配置、用户管理还是性能优化,这些实践都旨在帮助您构建一个高效、稳定的数据库系统。无论是在开发环境还是生产环境,这种配置都能满足现代应用的需求。如果您对 MySQL 配置还有其他问题,欢迎留言讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/60828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AIGC】如何通过ChatGPT提示词Prompt定制个性学习计划

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | 提示词Prompt应用实例 文章目录 &#x1f4af;前言&#x1f4af;提示词&#x1f4af;配置信息使用方法 &#x1f4af;指令/language/plan/start/test/continue/config &#x1f4af;小结 &#x1f4af;前言 在这篇文章中…

深入探索React合成事件(SyntheticEvent):跨浏览器的事件处理利器

标题&#xff1a;深入探索React合成事件&#xff08;SyntheticEvent&#xff09;&#xff1a;跨浏览器的事件处理利器 引言 在React的世界里&#xff0c;事件处理是构建交互式应用的核心。React的合成事件&#xff08;SyntheticEvent&#xff09;是React事件系统的一部分&…

效益登记册效益管理计划

效益登记册 benefit Register效益管理计划效益登记册汇集并列出项目集计划的效益&#xff0c;用于在项目集的整个持续时间内测量和沟通效益的交付。在效益识别阶段&#xff0c;效益登记册根据项目集商业论证、组织战略计划和其他相关项目集自标而编制。随后&#xff0c;登记册由…

NTP放大攻击:DDoS攻击的新变种及其防御策略

近年来&#xff0c;随着网络技术的不断发展&#xff0c;网络攻击手段也层出不穷。其中&#xff0c;NTP放大攻击作为一种新型的分布式拒绝服务&#xff08;DDoS&#xff09;攻击方式&#xff0c;给许多企业和个人用户带来了严重的威胁。本文将深入探讨NTP放大攻击是否是DDoS攻击…

求10000以内n的阶乘

题目描述 求10000以内n的阶乘。 输入描述 只有一行输入&#xff0c;整数n&#xff08;0≤n≤10000&#xff09;。 输出描述 一行&#xff0c;即n!的值。 样例 输入 4 输出 24 AC: #include<bits/stdc.h> using namespace std; int a[114514]{0},c[114514]{1}…

RFID被装信息化监控:物联网解决方案深入分析

被装物联网信息化监控构成了一套复杂而高效的处理方案&#xff0c;它巧妙地将物联网技术与被装资源管理的具体需求相结合&#xff0c;实现了对被装资源实时监控、智能化调控和优化分配。以下是对被装物联网信息化监控的详细说明&#xff1a; 一、被装物联网信息化监控的定义 …

Pytest-Bdd-Playwright 系列教程(9):datatable 参数的使用

Pytest-Bdd-Playwright 系列教程&#xff08;9&#xff09;&#xff1a;datatable 参数的使用 前言一、什么是 datatable 参数&#xff1f;Gherkin 表格示例 二、datatable 参数的基本使用feature文件&#xff1a;获取用户信息并执行相关操作的使用 datatable 处理表格数据Give…

C++ 关于类与对象(中篇)一篇详解!(运算符重载)

赋值运算符重载 运算符重载 C 为了 增强代码的可读性 引入了运算符重载 &#xff0c; 运算符重载是具有特殊函数名的函数 &#xff0c;也具有其返回值类型&#xff0c;函数名字以及参数列表&#xff0c;其返回值类型与参数列表与普通的函数类似。 函数名字为&#xff1a;关键…

如何在 Ubuntu 上 部署 OceanBase

本文作者&#xff1a;杨涛涛&#xff0c;爱可生资深数据库专家&#xff0c;专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。 OceanBase 的官方文档中列出支持的 OS 系统有 CENTOS、UBUNTU、DEBIAN等&…

有效对接礼顿销售单:从数据获取到金蝶云存储

礼顿销售单对接项目&#xff1a;轻松实现数据集成 礼顿销售单对接&#xff08;91-零售业务/5-代销售(供货商发货)&#xff09; 在礼顿销售单对接项目中&#xff0c;我们面临的主要任务是将吉客云奇门的数据集成到金蝶云星空平台。这个过程不仅需要确保数据的准确性和完整性&am…

【C++学习(37)】并发性模式:如生产者-消费者、读写锁等。 架构模式:如MVC、MVVM等。属于23 种设计模式吗? RAII 的关系?

并发性模式(如生产者-消费者、读写锁等)和架构模式(如 MVC、MVVM 等)并不属于 Gang of Four(GoF) 提出的 23 种经典设计模式 中。这些模式是其他领域中的设计模式,虽然它们和 GoF 的设计模式有交集,尤其是在程序架构和资源管理方面,但并不直接包含在 GoF 的 23 种设计…

241114.学习日志——[CSDIY] [CS]数据结构与算法 [00]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

Oracle 11g rac 集群节点的修复过程

Oracle 11g rac 集群节点的修复过程 目录 Oracle 11g rac 集群节点的修复过程一、问题的产生二、修复过程1、执行 roothas.pl 命令2、执行 root.sh 命令3、查看集群信息4、查看节点2的IP地址5、查看节点2的监听信息 一、问题的产生 用户的双节点 Oracle 11g rac 集群&#xff…

Python进程间通讯大揭秘:原理深度剖析与实战案例分享

在Python编程中,进程间通讯(Inter-Process Communication,简称IPC)是一个不可或缺的概念。它允许多个进程在操作系统中相互协作,共享信息或执行特定的任务。本文将深入剖析Python进程间通讯的原理,并通过实例展示其实现方法,帮助读者更好地理解和应用这一技术。 一、进程…

【C++】—— map 与 set 深入浅出:设计原理与应用对比

不要只因一次失败&#xff0c;就放弃你原来决心想达到的目的。 —— 莎士比亚 目录 1、序列式容器与关联式容器的概述与比较 2、set 与 multiset 2.1 性质分析&#xff1a;唯一性与多重性的差异 2.2 接口解析&#xff1a;功能与操作的全面解读 3、map 与 multimap 3.1 性…

基于微信小程序的平安驾校预约平台的设计与实现(源码+LW++远程调试+代码讲解等)

摘 要 互联网发展至今&#xff0c;广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#xff0c;劳动强度大&#xff0c;费时费力…

SpringBoot+Vue3开发会议管理系统

1 项目介绍 会议管理系统&#xff0c;简化公司内会议方面的流程&#xff0c;提供便捷。实现对会议室的管理、会议的管理、会议预约的管理&#xff0c;三大主流程模块。 系统分为三种角色&#xff0c;分别是员工、管理员和超级管理员。 员工角色功能&#xff1a;查看会议室占…

HTTP常见的状态码有哪些,都代表什么意思

HTTP 协议定义了一系列的状态码&#xff0c;用于描述服务器对客户端请求的处理结果。这些状态码分为五个类别&#xff0c;每个类别都有特定的用途。 常见状态码 1开头 信息性状态码 这些状态码表示请求已被接收&#xff0c;继续处理。 100 Continue&#xff1a;客户端应继续…

Docker环境搭建Cloudreve网盘服务(附shell脚本一键搭建)

Docker搭建Cloudreve Cloudreve介绍&#xff1a; Cloudreve 是一个基于 ThinkPHP 框架构建的开源网盘系统&#xff0c;旨在帮助用户以较低的成本快速搭建起既能满足个人也能满足企业需求的网盘服务。Cloudreve 支持多种存储介质&#xff0c;包括但不限于本地存储、阿里云OSS、…

Cadence安装

记录一下安装过程&#xff0c;方便以后安装使用Cadence。 去吴川斌的博客下载安装包&#xff0c;吴川斌博客&#xff1a; https://www.mr-wu.cn/cadence-orcad-allegro-resource-downloads/ 下载阿狸狗破戒大师 我这边下载的是版本V3.2.6&#xff0c;同样在吴川斌的博客下载安装…