WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化

今天明月给大家分享一下 WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化,无论你的站点采用是 WordPress 还是 Typecho,都要用到 MySQL/MariaDB 数据库,我们以 MySQL 为主(MariaDB 其实跟 MySQL 基本没啥大的区别,所以同样都适用。)给大家讲解一下数据库的优化。

WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化

在【WordPress 到底能不能承受百万级内容?】一文里,明月给大家讲过 WordPress 网站系统能处理的内容数量其实是取决于 MySQL 的部署的,可见 MySQL 数据库对于 WordPress 站点的重要性,加上目前大部分的 WordPress 站点数据库都是以本地部署(localhost,也就是数据库和网站在同一个服务区上)的形式使用的,所以优化 MySQL 就更加的必不可少了,结合明月多年代维的经验总结出如下几条 MySQL 数据库优化的建议:

一、关闭 MySQL 的日志

MySQL 中的 binlog 日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是 binlog 也会日渐增大,占用很大的磁盘空间,同时还会带来一定的 I/O 压力,理论上来说只要我们不使用 MySQL 的主从复制基本很少用到 binglog 日志,所以一般明月都会建议关闭 MySQL 的日志,只需要把 /etc/my.cnf 文件里:

log-bin=mysql-bin
binlog_format=mixed

这两行给注释掉即可,如下图所示:

#log-bin=mysql-bin
#binlog_format=mixed

然后保存退出,重启 MySQL 进程就行了。

注意,当你要使用 MySQL 的主从复制的时候一定要记得开启 MySQL 日志哦

二、开启 MySQL 的查询缓存

MySQL 和 MariaDB 都是支持“查询缓存”功能,并且启用 MySQL 查询缓存可以极大地减低数据库服务器的 CPU 使用率,实际使用情况是:开启前 CPU 使用率 120%左右,开启后降到了 10%。具体开启方法可以参考【启用 MySQL 和 MariaDB 查询缓存】一文,需要注意的是这个方法适合没有使用 Memcached、Redis 缓存数据库查询的时候使用,否则就重复了,一定要注意哦,跟下面讲的第四条冲突了,比较适合熟悉 MySQL 命令的运维人员使用,配合下面第三条效果更加,安全性也更好。建议大家根据自己服务器部署和使用情况灵活的选择和使用。

三、调整数据库 InnoDB 存储引擎的关键参数

一般我们的 MySQL 数据库在编译安装部署的时候都会让选择数据库存储引擎,比较多的选择是 InnoDB 存储引擎,这时候我们就可以在/etc/my.cnf 文件里调整 innodb_buffer_pool_size 和 innodb_buffer_pool_instances 参数来优化 MySQL 的性能。

Innodb_buffer_pool_size

innodb_buffer_pool_size 是 InnoDB 存储引擎的关键参数,用于配置 InnoDB 缓冲池的大小。

默认大小为 128M,但您应该根据服务器的物理内存进行调整。

专用数据库服务器上,可以将缓冲池大小设置为服务器物理内存的 80%。

可以动态设置,允许在不重新启动服务器的情况下调整缓冲池的大小。

Innodb_buffer_pool_instances

innodb_buffer_pool_instances 是用于配置多个缓冲池实例的参数。

默认情况下,它设置为 1,表示只有一个缓冲池实例。

当缓冲池大小大于 1G 时,将innodb_buffer_pool_instances设置为大于 1 的值可以提高服务器的可扩展性。

大的缓冲池可以减小多次磁盘 I/O 访问相同的表数据。

配置示例

假设您的服务器物理内存足够,您可以设置innodb_buffer_pool_size为 1G,并将innodb_buffer_pool_instances设置为 1。

请注意,innodb_buffer_pool_size必须是innodb_buffer_pool_instances的倍数。

在线调整

您可以使用以下语句在线调整 InnoDB 缓冲池大小:

SET GLOBAL innodb_buffer_pool_size=3221225472;--设置为 3G

监控在线缓冲池调整进度:

SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';

性能验证

您可以通过分析 InnoDB 缓冲池的性能来验证配置是否合适。

计算 InnoDB 缓冲池命中率:

Performance=innodb_buffer_pool_reads/innodb_buffer_pool_read_requests*100

如果命中率低于 99%,可以考虑增加innodb_buffer_pool_size

可见 innodb_buffer_pool_size 和 innodb_buffer_pool_instances 参数的调整是要根据实际调试来选择的,比较适合专业运维人员选择使用,新手可以根据服务器物理内存大小适当的加大 innodb_buffer_pool_size 参数即可,

四、使用 Memcached 把数据库查询放到内存中

Memcached 其实是非常适合 LNMP 环境的站点服务器使用的,主要原因就是其简单高效的内存利用率了,这正是我们需要的,也是 Memcached 加速原理的主要表现了。Memcached 就是把需要 CPU 计算的重复性的东西都有序的保存在物理内存里以实现可以被最快的速度重复调用,让 CPU 能有更多空闲时间处理其他的运算请求,所谓的加速其实就是体现在这里而已,说白了 Memcached 是变相的给 CPU 加速了,知道 Memcached 这个原理其实就足够了。

同时,明月要再次强调一下,像我们这种站点服务器使用 Memcached 就足够了,真心没有必要选择 Redis 的,因为 Redis 更多的时候比较适用于独立数据库服务器或者集群数据库服务器上使用,具体可以参考【理智冷静的使用 Memcached 或者 Redis】一文,有专门详细的论述。

五、搭建数据库专用服务器或者云数据库

如果你的 WordPress 站点需要处理十万、百万级的内容量就要像【WordPress 到底能不能承受百万级内容?】一文里说的,必须搭建一个或者 N 个独立的数据库服务器,每个独立的数据库服务器都充分的利用物理内存缓存查询记录再通过内网跟网站服务器通信实现数据库主从复制和负载均衡来缓解数据库的实时查询压力,基本上这种部署都属于是企业级的了,成本和维护压力也是很大的,比较适合拥有专业的运维技术团队了,就不属于是咱们个人网站的范畴了。

其实 MySQL 数据库的优化无非就是缓存数据库查询记录到 Linux 物理内存里,减少 MySQL 实时查询的频率,对于我们很多个人博客站点来说,512MB 物理内存基本就可以缓存 99%以上的 MySQL 实时查询记录了,更多的时候往往都是用不完,除非你用的插件、主题里有频繁的数据库读写操作才会造成 MySQL 负载飙升的现象,所以慎用来历不明和不负责任的插件和主题也是优化数据库性能要考虑的。

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

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

相关文章

JUC下的Java java.util.concurrent.Locks详解

java.util.concurrent.locks 包介绍 java.util.concurrent.locks 包是Java并发编程中非常重要的一个部分,它提供了比内置synchronized关键字更为灵活的锁机制,用于多线程环境下的同步控制。这个包中最核心的是Lock接口,以及一系列实现类&…

如何通过香港站群服务器高效实现网站内容的快速更新?

如何通过香港站群服务器高效实现网站内容的快速更新? 在当今激烈的数字市场竞争中,网站内容的快速更新对于吸引用户和保持竞争优势至关重要。而利用香港站群服务器实现这一目标,则具备诸多优势。下面将详细探讨如何通过香港站群服务器高效实现网站内容…

thinkphp6使用layui分页组件做分页效果

博主用的是layui2.9.8的版本,但这个版本的分页组件是动态效果的,但我需要的是静态分页,所以我自己封装了一个生成layui的分页代码生成代码。代码如下: 1、先创建文件,路径是extent/layui/LayuiPage.php,加…

基于MetaGPT的LLM Agent学习实战(一)

前言 我最近一直在做基于AI Agent 的个人项目, 因为工作加班较多,设计思考时间不足,这里借着Datawhale的开源学习课程《MetaGPT智能体理论与实战》课程,来完善自己的思路,抛砖引玉,和各位开发者一起学习&am…

Run ‘conda init‘ before ‘conda activate‘

使用conda activate 虚拟环境名称的时候提示:Run conda init before conda activate 解决办法: 首先需要确保是管理员身份运行这个cmd窗口。 然后,现在执行一下:conda init 命令,最后再执行:conda activate…

纯血鸿蒙APP实战开发——首页下拉进入二楼效果案例

介绍 本示例主要介绍了利用position和onTouch来实现首页下拉进入二楼、二楼上划进入首页的效果场景,利用translate和opacity实现动效的移动和缩放,并将界面沉浸式(全屏)显示。 效果图预览 使用说明 向下滑动首页页面超过触发距…

冯喜运:5.13黄金原油震荡整理是涨还是跌?今日走势分析

【黄金消息面分析】;自5月初以来,黄金和白银一直在享受需求的回归,买家在过去几天加大了力度,一度推动金价重返2370美元上方,白银重返28.5美元上方。不过,经过几天的盘整后,黄金白银价格双双下跌。然而&…

Redis-详解(基础)

文章目录 什么是Redis?用Redis的特点?用Redis可以实现哪些功能?Redis的常用数据类型有哪些?Redis的常用框架有哪些?本篇小结 更多相关内容可查看 什么是Redis? Redis(Remote DictionaryServer)是一个开源…

下载文件名称乱码或变成了随机码

如图 后端是有正常返回附件名称的,浏览器开发工具中也正常显示了这个数据,但是下载下来的文件名称确实一堆随机码. 其实这个问题的原因是因为跨域 查看console: Refused to get unsafe header "content-disposition" 现象,后端传递到前端的fileName不能被识别,下载…

大模型与AIGC应用相关问题 模型大型

最近经常被问,你看“万亿的模型都出来了,你们训练的千亿模型是不是落伍了?”我想说:“虽然都叫超大模型,但是类型是不一样的,虽说每一类模型训出来都不容易,不过澄清一下概念还是必要的”。 大…

编写Ansible角色实现分布式LNMP安装

前言 本文将介绍如何使用 Ansible 编写角色,在分布式环境下完成 LNMP(Linux、Nginx、MySQL、PHP)的自动化(编译)安装和配置,并验证 PHP 与 MySQL 数据联通性,实现博客和论坛页面的展示。 常规…

Qt---信号和槽

一、信号和槽机制 所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号…

二叉树的四种遍历代码实现

二叉树的遍历大致能分为以下几种 1.前序:根 左 右 2.中序:左 根 右 3.后序:左 右 根 4.层序:从根开始一层一层的向下 如上图访问顺序: 前序:1 2 3 N N N 4 5 N N 6 N N 中序:N 3 N 2 N 1 N 5 N 4 N …

docker-compose安装emqx集群(最新)(host模式)

机器: 10.60.0.20 10.60.0.21 10.60.0.22 一、三台机子都配置域名(/etc/hosts) 10.60.0.20 node1.emqx.io 10.60.0.22 node3.emqx.io 10.60.0.21 node2.emqx.io 二、docker-compose.yml(10.60.0.21) 其他两台机子自…

接搭建仿美团、代付系统源码搭建教程

最近很多粉丝催更、分享一下地球号:xiaobao0214520(WX) 现在大家都很流行搞网恋,我们搭建一个跟美团相似的系统 然后开发一个好友代付,我们在点单的时候转发链接让网恋对象付钱 若只是单点外卖的话,能榨出的油水还是太少。 所以…

Golang — map的使用心得和底层原理

map作为一种基础的数据结构,在算法和项目中有着非常广泛的应用,以下是自己总结的map使用心得、实现原理、扩容机制和增删改查过程。 1.使用心得: 1.1 当map为nil和map为空时,增删改查操作时会出现的不同情况 我们可以发现&#…

【全开源】废品回收微信小程序基于FastAdmin+ThinkPHP+UniApp

介绍 一款基于FastAdminThinkPHPUniApp开发的废品回收系统,适用废品回收站、再生资源回收公司上门回收使用的小程序 功能特性 1、会员注册 支持小程序授权注册和手机号注册 2、回收品类 可设置回收品类,废纸、废金属、废玻璃、旧衣服等 3、今日指导价…

面试高频知识点:Java互联网大厂高频面试题(持续收录)

文章目录 前言一、Java基础题1、Java语言的三大特性2、JDK 和 JRE 有什么区别3、Java基本数据类型及其封装类4、说明一下public static void main(String args[])这段声明里关键字的作用5、java的数据结构有哪些?6、抽象类和接口的区别?7、 与 equals 的区别8、Str…

WordPress插件Show IDs by Echo,后台显示文章、页面、分类、标签、媒体库、评论、用户的ID

WordPress的这款Show IDs by Echo插件,可以让我们设置是增加一列ID还是直接在“编辑 |快速编辑 |查看”操作后面增加ID,而且支持展示以下内容的ID: 文章页面类别标签评论自定义帖子类型自定义分类法用户媒体 Show IDs by Echo插件的安装及启…

企业级OV SSL证书:强化在线信任与安全的权威之选

在数字经济浪潮下,企业网站的安全性直接影响着用户信任度和业务的可持续发展。其中,企业级组织验证(Organization Validation,简称OV)SSL证书作为安全解决方案的重要一环,以其独有的优势,在众多…