web-dev-qa-db-ja.com

WordPressインストールのwp_optionsテーブルで一時的なものを削除できますか?

最近、私のwp_optionsテーブルは少し大きいようです。これには1161行が含まれ、サイズは約2.1MBです。

Clean Options をインストールしました。 2010年にプラグインの開発が停止したように見えますが、それでも仕事をしました。

現在、孤立している可能性のあるエントリの長いリストがあります。これらを並べ替え、削除するものと保持するものを把握する簡単な方法はありますか?また、これはウェブサイトでパフォーマンスの問題を引き起こす原因となりますか?

読んでくれてありがとう、どんなアイデアも歓迎します!

Update:Clean Optionsプラグインは、リストにいくつかの一時ファイルを返しました。そのため、wp_optionsテーブル。次のような全体の束があります。

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

等々。私が言ったように、このように見える数百の行があります。それらをダンプするだけで安全ですか?

ありがとう

55
Ryan

安全にダンプできます。 Wordpressおよび一部のプラグインは、必要に応じてトランジェントを再作成します。トランジェントは、複雑なクエリからの保存値に多少なります。結果は、システムにないようにトランジェントとして保存されます一般的なクエリを繰り返し実行する代わりに、一時的なものが存在し、有効期限が切れていない場合に検索します。もちろん、変更を加える前にデータベースのバックアップを作成して、問題が発生しないようにしてください。

すべてをバックアップした後、次のようなmysqlステートメントを実行できます。

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

[EDIT:コメントの提案後、エスケープ文字で修正されたステートメント]

132
Lane

再作成されるトランジェントを削除できます。障害状況または一部のプラグインの設計上の問題により、期限切れの一時的なものが蓄積する可能性があります。これに対処する1つの方法は、現在のトランジェントがその機能を実行できるようにする一方で、期限切れのトランジェントを削除することです。数日間有効期限が切れたトランジェントのみをパージすると、どのプラグインが古いトランジェントになるかを監視し、問題を修正したり問題を報告したりするアクションを実行できます。

以下は、データベース内のwp * optionテーブルを見つけて、1週間以上古い5つの最大の一時オプションを削除します。これにより、プラグインが削除するオプションを削除するのに十分な時間が与えられます。

#!/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}
2
ClearCrescendo

プラグインをインストールします 期限切れトランジェントを削除 データベースを毎日自動的にクリーンアップします。

0
Jonas Berlin