mysql 我可以删除我的WordPress安装的wp_options表中的瞬变吗?

70gysomp  于 2023-01-12  发布在  Mysql
关注(0)|答案(4)|浏览(208)

我最近注意到我的wp_options表似乎有点大,它包含1161行,大约2.1mb大小。
我已经安装了Clean Options。看起来这个插件的开发早在2010年就停止了,但它仍然完成了这项工作。
我现在有一个很长的潜在孤立条目列表。有没有一个简单的方法来对这些条目进行排序,并找出哪些要删除,哪些要保留?还有,这是否会导致网站的性能问题?
感谢您的阅读,任何想法都欢迎!

更新:Clean Options插件在列表中返回了一些transient文件,这让我发现wp_options表中有几百个transient文件。

  • _site_transient_browser_5728a0f1503de54634b3716638...
  • _site_transient_timeout_browser_03df11ec4fda7630a5...
  • _transient_feed_83dcaee0f69f63186d51bf9a4...
  • _transient_plugin_slugs
  • _transient_timeout_feed_83dcaee0f69f63186d51bf9a4b...

等等。就像我说的,有几百行像这样。直接把它们扔掉安全吗?
谢谢

brjng4g3

brjng4g31#

你可以安全地转储它们。WordPress和一些插件会根据需要重新创建transient。transient或多或少是复杂查询的存储值。结果被保存为transient,这样系统就不必一遍又一遍地执行常见的查询,相反,它只会寻找transient,如果它存在并且没有过期的话。当然,在更改数据库之前,请先备份数据库,以免出错!
备份完所有内容后,您可以运行如下MySQL语句:

DELETE FROM `wp_options` WHERE `option_name` LIKE ('%\_transient\_%')

[**EDIT:**在注解建议之后,使用转义符修复了语句]

j2cgzkjk

j2cgzkjk2#

您可以删除瞬变,因为它们将被重新创建。由于某些插件的故障情况或设计问题,可能会累积过期的瞬变。处理此问题的一种方法是删除过期的瞬变,同时允许当前的瞬变执行其功能。仅清除过期几天的瞬变可以让您有机会监视哪些插件导致过期的瞬变。并采取任何措施来解决问题或报告问题。
下面的代码将在数据库中找到所有的wp* 选项表,并删除五个最大的过期一周以上的临时选项。这给了任何插件足够的时间来删除它们将要自己清除的选项。

#!/bin/bash

DBNAME="mydatabase"
DBUSER="${USER}"
DBPASSWD="secret"
MYSQLBIN=/usr/bin/mysql # OR MYSQLBIN=/usr/local/mysql/bin/mysql
MYSQL="${MYSQLBIN} -s -D ${DBNAME} -u ${DBUSER} -p${DBPASSWD}"
TMP=/var/tmp/
ENTRIES_FILE="${TMP}entries.$$"

# Find option tables
for OPTION_TABLE in $( echo 'show tables like "%wp%options";' | ${MYSQL} )
do
    # Find up to five large long expired transients
    ${MYSQL} > ${ENTRIES_FILE} <<EOF
    select option_name from ${OPTION_TABLE} where option_name in
        (select concat("_transient",substr(option_name,19))
            FROM ${OPTION_TABLE} WHERE option_name LIKE '_transient_timeout%' AND
            option_value < UTC_TIMESTAMP() - INTERVAL 1 WEEK order by option_value)
    order by length(option_value) desc limit 5;
EOF
    for OPTION in $( < ${ENTRIES_FILE} )
    do
        echo Deleting ${OPTION} from ${OPTION_TABLE}
        echo delete from ${OPTION_TABLE} where option_name = \"${OPTION}\"\; | ${MYSQL}
        if [[ $? -eq 0 ]]; then
            echo delete from ${OPTION_TABLE} where option_name = \"_transient_timeout${OPTION:10}\"\; | ${MYSQL}
        fi
    done
done
rm -f ${ENTRIES_FILE}
wfsdck30

wfsdck303#

安装Delete Expired Transients插件,每天自动清理数据库。

v8wbuo2f

v8wbuo2f4#

您可以使用WP CLI轻松移除瞬变。
这可以通过wp transient命令完成,例如:

# Delete transient.
$ wp transient delete sample_key
Success: Transient deleted.

# Delete expired transients.
$ wp transient delete --expired
Success: 12 expired transients deleted from the database.

# Delete all transients.
$ wp transient delete --all
Success: 14 transients deleted from the database.

查看documentation中的更多信息

相关问题