如何在CentOS上安装和配置MySQL数据库?快速构建稳定数据库环境的指南

答案:在CentOS上部署MySQL需添加官方仓库、安装服务、初始化安全配置并优化性能参数。首先下载MySQL 8.0的Yum仓库RPM包并安装,确保获取最新版本;接着通过yum安装mysql-community-server,若存在MariaDB冲突则先卸载mariadb-libs等包;安装后启动mysqld服务并设置开机自启,执行mysql_secure_installation进行安全加固,包括设置root密码、删除匿名用户、禁止root远程登录等;最后调整/etc/my.cnf配置文件,优化bind-address、字符集、innodb_buffer_pool_size和max_connections等关键参数以提升性能与安全性。整个过程需注意版本选择、依赖处理及防火墙配置,确保数据库稳定、安全、高效运行。

如何在centos上安装和配置mysql数据库?快速构建稳定数据库环境的指南

要在CentOS系统上部署一个稳定运行的MySQL数据库环境,核心步骤其实就那么几项:首先是添加官方的软件仓库以获取最新或特定版本的MySQL,接着是安装数据库服务本身,然后进行一系列关键的初始化安全配置,最后根据实际需求调整性能参数。这个过程,在我看来,不仅仅是敲几行命令那么简单,它更像是在为你的数据安全和系统性能打地基,每一步都值得我们深思熟虑。

解决方案

在我实际操作中,构建CentOS上的MySQL环境,通常我会遵循以下步骤,这不仅能保证安装的顺利,也能为后续的维护打下良好基础。

1. 添加MySQL官方Yum仓库

CentOS自带的Yum仓库可能提供的MySQL版本较旧,或者实际上是MariaDB。为了获取最新的MySQL Community Server,我们需要先添加官方的Yum仓库。

# 下载MySQL Yum仓库RPM包wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm# 安装RPM包,这将添加MySQL仓库到你的系统sudo rpm -ivh mysql80-community-release-el7-1.noarch.rpm# 刷新Yum缓存,确保新仓库生效sudo yum clean allsudo yum repolist

这里我选择了MySQL 8.0的仓库,因为它是目前主流且功能更强大的版本。如果你有特定需求,比如需要MySQL 5.7,可以去官方下载对应的RPM包。

2. 安装MySQL服务器

仓库添加完成后,安装就变得简单了。

sudo yum install mysql-community-server -y

这一步可能会提示一些依赖包的安装,或者与系统中已有的MariaDB包冲突。如果遇到冲突,通常需要先卸载MariaDB相关的包,例如

sudo yum remove mariadb-libs -y

,然后再尝试安装MySQL。这是我个人经验中常遇到的一个小“坑”。

3. 启动并启用MySQL服务

安装完成后,MySQL服务并不会自动启动,我们需要手动启动它,并设置开机自启。

sudo systemctl start mysqldsudo systemctl enable mysqldsudo systemctl status mysqld

systemctl status mysqld

命令能让你看到服务是否正常运行,这在排查问题时非常有用。

4. 执行初始安全配置

这是至关重要的一步,它会引导你设置root用户密码、删除匿名用户、禁止root远程登录等,大大增强数据库的安全性。

sudo mysql_secure_installation

执行时,系统会提示你设置root密码。MySQL 8.0会生成一个临时密码,你需要从日志中获取:

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

用这个临时密码登录后,

mysql_secure_installation

会要求你设置新的root密码,并引导你完成后续的安全选项。我通常会选择“是”来执行所有推荐的安全设置。

5. 基础配置调整(可选但推荐)

虽然MySQL默认配置在很多情况下能跑起来,但为了更好的性能和适应性,通常我会对

/etc/my.cnf

文件进行一些基础调整。

sudo vi /etc/my.cnf

一些我常会关注的配置项:

bind-address = 0.0.0.0

:如果你需要允许远程连接,这个是必须的。但请注意安全,通常我会绑定到特定的内网IP。

character_set_server = utf8mb4

:为了支持更广泛的字符集,尤其是表情符号,

utf8mb4

是更好的选择。

innodb_buffer_pool_size = 1G

(或更多):这个参数对InnoDB存储引擎的性能影响巨大,通常我会根据服务器的内存大小,将其设置为总内存的50%-70%。

max_connections = 200

:根据应用需求调整最大连接数。

修改配置后,记得重启MySQL服务:

sudo systemctl restart mysqld

CentOS上安装MySQL时,如何选择合适的版本并处理潜在的依赖冲突?

选择MySQL版本,这事儿真不是拍脑袋就能定的。我的经验是,首先要看你的应用对MySQL版本的具体要求,比如有些老旧的应用可能只兼容MySQL 5.6或5.7。但如果没有任何历史包袱,我个人倾向于选择最新的稳定版,比如MySQL 8.0。它在性能、安全和功能上都有显著提升,比如更好的JSON支持、更强大的SQL功能以及性能优化。

在CentOS上,版本选择主要通过Yum仓库来实现。当你安装了

mysql-community-release-el7-*.noarch.rpm

后,默认可能会启用最新版本。但如果你想安装特定版本,比如5.7,你需要手动禁用8.0的仓库,并启用5.7的仓库。这可以通过编辑

/etc/yum.repos.d/mysql-community.repo

文件来实现。找到对应的

[mysql80-community]

[mysql57-community]

部分,将

enabled=1

改为

enabled=0

或反之。

至于依赖冲突,这几乎是CentOS上安装MySQL的“家常便饭”。最常见的就是与MariaDB的冲突,因为CentOS 7及更高版本默认用MariaDB替换了MySQL。当你尝试安装MySQL时,Yum会发现

mariadb-libs

这个包与

mysql-community-server

的某些组件冲突。解决办法通常是先彻底移除MariaDB相关的包:

即构数智人 即构数智人

即构数智人是由即构科技推出的AI虚拟数字人视频创作平台,支持数字人形象定制、短视频创作、数字人直播等。

即构数智人 36 查看详情 即构数智人

sudo yum remove mariadb-libs mariadb-server -y

移除时,Yum可能会提示其他依赖于MariaDB的包也会被移除,你需要仔细确认这些包是否是你的系统所必需的。如果它们是无关紧要的,那就大胆移除。移除后,再重新执行

sudo yum install mysql-community-server -y

,通常就能顺利安装了。有时,还会遇到一些GPG密钥的问题,这通常通过导入MySQL的GPG密钥来解决:

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql

。处理这些小问题,需要一点耐心和对Yum包管理机制的理解。

MySQL安装后,有哪些关键的安全配置步骤可以强化数据库安全性?

数据库安全,这真是个老生常谈但又不得不重视的话题。安装完MySQL,跑起来了,并不意味着万事大吉。在我看来,除了

mysql_secure_installation

这个基础动作之外,还有一些进阶的安全配置是必不可少的。

首先,

mysql_secure_installation

确实是第一道防线。它会帮你:

设置root用户密码: 这是最基本的,确保没有人能轻易以最高权限登录。删除匿名用户: 这些用户没有密码,是潜在的漏洞。禁止root远程登录: 除非你真的有强烈的理由,否则不要让root用户从非本地主机登录。一旦root的远程登录权限被滥用,后果不堪设想。删除test数据库及其权限: test数据库通常是空的,但它可能被攻击者利用来测试攻击向量。

其次,创建专用用户并赋予最小权限原则 是我一直强调的。永远不要让你的应用程序直接使用root用户连接数据库。你应该为每个应用程序或服务创建独立的数据库用户,并只赋予他们完成其工作所需的最小权限。

-- 示例:创建一个新用户并赋予特定数据库的读写权限CREATE USER 'your_app_user'@'localhost' IDENTIFIED BY 'YourStrongPassword!';GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'your_app_user'@'localhost';FLUSH PRIVILEGES;

这里的

'localhost'

限制了用户只能从本机登录。如果你需要从其他服务器连接,可以替换为具体的IP地址或IP段,但务必谨慎。

再次,防火墙配置 是服务器层面的安全屏障。默认情况下,MySQL监听3306端口。你需要确保只有授权的IP地址才能访问这个端口。在CentOS上,通常使用

firewalld

# 允许特定IP访问3306端口 (例如:192.168.1.100)sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=3306 protocol=tcp accept'# 或者,如果你需要允许整个子网访问 (例如:192.168.1.0/24)# sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port=3306 protocol=tcp accept'# 重新加载防火墙规则sudo firewall-cmd --reload

如果你的服务器只允许本地应用访问MySQL,那么最好完全阻止外部访问3306端口,或者将

bind-address

设置为

127.0.0.1

最后,日志审计 也很重要。启用MySQL的通用查询日志(

general_log

)和错误日志(

log_error

),虽然通用查询日志会带来性能开销,但在排查安全问题时,它能提供宝贵的线索。定期审查这些日志,可以帮助你发现异常活动。当然,还有二进制日志(

log_bin

),它主要用于数据恢复和主从复制,但也是审计数据变更的重要依据。

如何优化CentOS上MySQL的性能配置,以满足不同应用场景的需求?

优化MySQL性能,这可以说是一门艺术,也是一门科学。它不像安装那样有明确的步骤,更多的是根据你的硬件资源、数据量、查询模式和业务需求来做权衡和调整。在我看来,核心在于理解

my.cnf

中的关键参数,并结合实际监控数据进行迭代优化。

1. 内存配置是王道:

innodb_buffer_pool_size

对于绝大多数现代应用,MySQL主要使用InnoDB存储引擎。

innodb_buffer_pool_size

是InnoDB最重要的配置参数,它决定了InnoDB用于缓存表数据和索引的内存大小。如果你的服务器有足够的RAM,我会毫不犹豫地将它设置为服务器总内存的50%到70%。例如,一台8GB内存的服务器,我会考虑设置为

4G

5G

。这个值越大,MySQL从磁盘读取数据的频率就越低,性能自然就越好。

[mysqld]innodb_buffer_pool_size = 4G

2. 连接管理:

max_connections

这个参数决定了MySQL服务器允许的最大并发连接数。设置过低会导致应用程序连接失败,设置过高则可能耗尽服务器资源。我的建议是,先根据应用的实际峰值连接数来设置一个合理的值,然后通过监控

Max_used_connections

状态变量来观察是否需要调整。通常,我会给它留一些余量,比如应用峰值是100,我可能设为150或200。

[mysqld]max_connections = 200

3. 事务日志与写入性能:

innodb_log_file_size

innodb_flush_log_at_trx_commit

innodb_log_file_size

:InnoDB重做日志文件的大小。较大的日志文件可以减少刷盘次数,提高写入性能,但也会增加恢复时间。我通常会选择一个折中的值,比如256M或512M。

innodb_flush_log_at_trx_commit

:这个参数对数据安全性和写入性能有直接影响。

1

(默认):每次事务提交时,日志都写入并刷新到磁盘。最安全,但写入性能最差。

0

:每秒将日志写入并刷新到磁盘一次。性能最好,但可能丢失1秒的数据。

2

:每次事务提交时,日志写入OS缓存,每秒刷新到磁盘一次。折中方案,通常在对数据丢失容忍度稍高的场景下使用。

在对数据一致性要求极高的场景,我会坚持使用

1

。但在一些对性能要求更高、对少量数据丢失有一定容忍度的场景,可能会考虑

0

2

[mysqld]innodb_log_file_size = 256Minnodb_flush_log_at_trx_commit = 1

4. 查询缓存(旧版本):

query_cache_size

(MySQL 8.0已移除)

在MySQL 5.7及更早版本中,查询缓存曾经是一个优化手段。但由于其锁机制的效率问题,在并发高的场景下反而可能成为瓶颈,并且在MySQL 8.0中已被移除。所以,如果你还在使用旧版本,并且有高并发需求,我通常建议禁用它 (

query_cache_size = 0

),转而依赖更好的索引、SQL优化和应用层缓存。

5. 其他辅助参数

tmp_table_size

max_heap_table_size

:这两个参数限制了内存中临时表的大小。如果你的查询经常需要创建大的临时表(例如复杂的JOIN或GROUP BY操作),适当增大它们可以避免MySQL将临时表写入磁盘,从而提升性能。

sort_buffer_size

:用于排序操作的缓冲区大小。

join_buffer_size

:用于连接操作的缓冲区大小。

这些参数的调整,不能凭空想象,需要结合

SHOW STATUS

SHOW VARIABLES

的输出,以及

EXPLAIN

分析慢查询日志来逐步优化。例如,如果

Created_tmp_disk_tables

很高,可能就需要考虑调整

tmp_table_size

总之,MySQL的性能优化是一个持续的过程,没有一劳永逸的配置。它需要你深入理解你的应用、你的数据,以及MySQL的内部机制,然后不断地测试、监控和调整。

以上就是如何在CentOS上安装和配置MySQL数据库?快速构建稳定数据库环境的指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/398554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 18:32:49
下一篇 2025年11月6日 18:33:43

相关推荐

  • Uniapp 中如何不拉伸不裁剪地展示图片?

    灵活展示图片:如何不拉伸不裁剪 在界面设计中,常常需要以原尺寸展示用户上传的图片。本文将介绍一种在 uniapp 框架中实现该功能的简单方法。 对于不同尺寸的图片,可以采用以下处理方式: 极端宽高比:撑满屏幕宽度或高度,再等比缩放居中。非极端宽高比:居中显示,若能撑满则撑满。 然而,如果需要不拉伸不…

    2025年12月24日
    400
  • 如何让小说网站控制台显示乱码,同时网页内容正常显示?

    如何在不影响用户界面的情况下实现控制台乱码? 当在小说网站上下载小说时,大家可能会遇到一个问题:网站上的文本在网页内正常显示,但是在控制台中却是乱码。如何实现此类操作,从而在不影响用户界面(UI)的情况下保持控制台乱码呢? 答案在于使用自定义字体。网站可以通过在服务器端配置自定义字体,并通过在客户端…

    2025年12月24日
    800
  • 如何在地图上轻松创建气泡信息框?

    地图上气泡信息框的巧妙生成 地图上气泡信息框是一种常用的交互功能,它简便易用,能够为用户提供额外信息。本文将探讨如何借助地图库的功能轻松创建这一功能。 利用地图库的原生功能 大多数地图库,如高德地图,都提供了现成的信息窗体和右键菜单功能。这些功能可以通过以下途径实现: 高德地图 JS API 参考文…

    2025年12月24日
    400
  • 如何使用 scroll-behavior 属性实现元素scrollLeft变化时的平滑动画?

    如何实现元素scrollleft变化时的平滑动画效果? 在许多网页应用中,滚动容器的水平滚动条(scrollleft)需要频繁使用。为了让滚动动作更加自然,你希望给scrollleft的变化添加动画效果。 解决方案:scroll-behavior 属性 要实现scrollleft变化时的平滑动画效果…

    2025年12月24日
    000
  • 如何为滚动元素添加平滑过渡,使滚动条滑动时更自然流畅?

    给滚动元素平滑过渡 如何在滚动条属性(scrollleft)发生改变时为元素添加平滑的过渡效果? 解决方案:scroll-behavior 属性 为滚动容器设置 scroll-behavior 属性可以实现平滑滚动。 html 代码: click the button to slide right!…

    2025年12月24日
    500
  • 如何选择元素个数不固定的指定类名子元素?

    灵活选择元素个数不固定的指定类名子元素 在网页布局中,有时需要选择特定类名的子元素,但这些元素的数量并不固定。例如,下面这段 html 代码中,activebar 和 item 元素的数量均不固定: *n *n 如果需要选择第一个 item元素,可以使用 css 选择器 :nth-child()。该…

    2025年12月24日
    200
  • 使用 SVG 如何实现自定义宽度、间距和半径的虚线边框?

    使用 svg 实现自定义虚线边框 如何实现一个具有自定义宽度、间距和半径的虚线边框是一个常见的前端开发问题。传统的解决方案通常涉及使用 border-image 引入切片图片,但是这种方法存在引入外部资源、性能低下的缺点。 为了避免上述问题,可以使用 svg(可缩放矢量图形)来创建纯代码实现。一种方…

    2025年12月24日
    100
  • 如何让“元素跟随文本高度,而不是撑高父容器?

    如何让 元素跟随文本高度,而不是撑高父容器 在页面布局中,经常遇到父容器高度被子元素撑开的问题。在图例所示的案例中,父容器被较高的图片撑开,而文本的高度没有被考虑。本问答将提供纯css解决方案,让图片跟随文本高度,确保父容器的高度不会被图片影响。 解决方法 为了解决这个问题,需要将图片从文档流中脱离…

    2025年12月24日
    000
  • 为什么 CSS mask 属性未请求指定图片?

    解决 css mask 属性未请求图片的问题 在使用 css mask 属性时,指定了图片地址,但网络面板显示未请求获取该图片,这可能是由于浏览器兼容性问题造成的。 问题 如下代码所示: 立即学习“前端免费学习笔记(深入)”; icon [data-icon=”cloud”] { –icon-cl…

    2025年12月24日
    200
  • 如何利用 CSS 选中激活标签并影响相邻元素的样式?

    如何利用 css 选中激活标签并影响相邻元素? 为了实现激活标签影响相邻元素的样式需求,可以通过 :has 选择器来实现。以下是如何具体操作: 对于激活标签相邻后的元素,可以在 css 中使用以下代码进行设置: li:has(+li.active) { border-radius: 0 0 10px…

    2025年12月24日
    100
  • 如何模拟Windows 10 设置界面中的鼠标悬浮放大效果?

    win10设置界面的鼠标移动显示周边的样式(探照灯效果)的实现方式 在windows设置界面的鼠标悬浮效果中,光标周围会显示一个放大区域。在前端开发中,可以通过多种方式实现类似的效果。 使用css 使用css的transform和box-shadow属性。通过将transform: scale(1.…

    2025年12月24日
    200
  • 为什么我的 Safari 自定义样式表在百度页面上失效了?

    为什么在 Safari 中自定义样式表未能正常工作? 在 Safari 的偏好设置中设置自定义样式表后,您对其进行测试却发现效果不同。在您自己的网页中,样式有效,而在百度页面中却失效。 造成这种情况的原因是,第一个访问的项目使用了文件协议,可以访问本地目录中的图片文件。而第二个访问的百度使用了 ht…

    2025年12月24日
    000
  • 如何用前端实现 Windows 10 设置界面的鼠标移动探照灯效果?

    如何在前端实现 Windows 10 设置界面中的鼠标移动探照灯效果 想要在前端开发中实现 Windows 10 设置界面中类似的鼠标移动探照灯效果,可以通过以下途径: CSS 解决方案 DEMO 1: Windows 10 网格悬停效果:https://codepen.io/tr4553r7/pe…

    2025年12月24日
    000
  • 使用CSS mask属性指定图片URL时,为什么浏览器无法加载图片?

    css mask属性未能加载图片的解决方法 使用css mask属性指定图片url时,如示例中所示: mask: url(“https://api.iconify.design/mdi:apple-icloud.svg”) center / contain no-repeat; 但是,在网络面板中却…

    2025年12月24日
    000
  • 如何用CSS Paint API为网页元素添加时尚的斑马线边框?

    为元素添加时尚的斑马线边框 在网页设计中,有时我们需要添加时尚的边框来提升元素的视觉效果。其中,斑马线边框是一种既醒目又别致的设计元素。 实现斜向斑马线边框 要实现斜向斑马线间隔圆环,我们可以使用css paint api。该api提供了强大的功能,可以让我们在元素上绘制复杂的图形。 立即学习“前端…

    2025年12月24日
    000
  • 图片如何不撑高父容器?

    如何让图片不撑高父容器? 当父容器包含不同高度的子元素时,父容器的高度通常会被最高元素撑开。如果你希望父容器的高度由文本内容撑开,避免图片对其产生影响,可以通过以下 css 解决方法: 绝对定位元素: .child-image { position: absolute; top: 0; left: …

    2025年12月24日
    000
  • CSS 帮助

    我正在尝试将文本附加到棕色框的左侧。我不能。我不知道代码有什么问题。请帮助我。 css .hero { position: relative; bottom: 80px; display: flex; justify-content: left; align-items: start; color:…

    2025年12月24日 好文分享
    200
  • 前端代码辅助工具:如何选择最可靠的AI工具?

    前端代码辅助工具:可靠性探讨 对于前端工程师来说,在HTML、CSS和JavaScript开发中借助AI工具是司空见惯的事情。然而,并非所有工具都能提供同等的可靠性。 个性化需求 关于哪个AI工具最可靠,这个问题没有一刀切的答案。每个人的使用习惯和项目需求各不相同。以下是一些影响选择的重要因素: 立…

    2025年12月24日
    000
  • 如何用 CSS Paint API 实现倾斜的斑马线间隔圆环?

    实现斑马线边框样式:探究 css paint api 本文将探究如何使用 css paint api 实现倾斜的斑马线间隔圆环。 问题: 给定一个有多个圆圈组成的斑马线图案,如何使用 css 实现倾斜的斑马线间隔圆环? 答案: 立即学习“前端免费学习笔记(深入)”; 使用 css paint api…

    2025年12月24日
    000
  • 如何使用CSS Paint API实现倾斜斑马线间隔圆环边框?

    css实现斑马线边框样式 想定制一个带有倾斜斑马线间隔圆环的边框?现在使用css paint api,定制任何样式都轻而易举。 css paint api 这是一个新的css特性,允许开发人员创建自定义形状和图案,其中包括斑马线样式。 立即学习“前端免费学习笔记(深入)”; 实现倾斜斑马线间隔圆环 …

    2025年12月24日
    100

发表回复

登录后才能评论
关注微信