web-dev-qa-db-ja.com

更新またはアップグレードからデータベースに加えられた変更のSQLを取得する方法

プラグイン、テーマ、さらにはWordPressの中核を更新/アップグレードすると、データベースに影響があり、多くのことが変わります。どうやってそれを追跡するのですか?

問題は、リポジトリがあり、ファイルに加えられたすべての変更がすべて正しく追跡されることですが、データベースの変更(変更、挿入、更新、削除、作成)を格納するためのSQLファイルの作成方法がわかりません。など)。

私はFlywayというツールを使用しています。これは、リポジトリにあるSQLファイルのリストを選択し、各ファイルのクエリをデータベースに適用するため、すべての変更のSQLクエリを作成または取得する方法です。 WordPressの更新/アップグレードの未来によって作られた?このようにして、すべてのチームがレポから引き出すことができるようになり、行った変更が伝達されます。

ありがとう。

1
Marco Florian

ログクエリ:

コア/プラグイン/テーマのアップグレード中にすべてのクエリを収集して、何が起こるかを確認できます。次の2つの手順に従ってください。

1)追加する必要があります。

define( 'SAVEQUERIES', TRUE );

wp-config.phpファイルに追加して、ページロード中のすべてのクエリを$wpdb->queries配列に収集します。あとで削除するのを忘れないでください。

2)それからsql.logファイルにそれをログインできます。これは簡単な例です:

/**
 * Dump all database queries to the /wp-content/sql.log file.
 */
add_action( 'shutdown', function(){

    $file =  WP_CONTENT_DIR . '/sql.log'; // Edit this filepath to your needs.

    if( current_user_can( 'manage_options' ) 
         && file_exists( $file )
         && is_writeable( $file )
         && isset( $GLOBALS['wpdb']->queries )
     )
         file_put_contents( 
                $file, 
                date( 'c' ) . PHP_EOL .  print_r( $GLOBALS['wpdb']->queries, TRUE ), 
                FILE_APPEND 
         );

});

またはqueryクラスのwpdbフィルタを使用して、INSERTUPDATE、およびDELETEクエリのみをログに記録します。

/**
 * Log the INSERT, UPDATE, DELETE database queries to the /wp-content/sql.log file.
 */
add_filter( 'query', function( $query ){
    if( FALSE !== stripos( $query, 'UPDATE ' )
        || FALSE !== stripos( $query, 'INSERT ' )
        || FALSE !== stripos( $query, 'DELETE ' )
     ) {
            $file =  WP_CONTENT_DIR . '/sql.log'; // Edit this filepath to your needs.  
            if( file_exists( $file ) && is_writeable( $file ) ) 
                file_put_contents( 
                    $file, 
                    date( 'c' ) . ' - ' . $query . PHP_EOL, 
                    FILE_APPEND | LOCK_EX 
                );            
    }
    return $query;
}, PHP_INT_MAX );

コアアップグレードファイル:

コアアップグレードのためにこれらのファイルはあなたにとって興味があるかもしれません

  • /wp-includes/version.php
  • /wp-admin/includes/upgrade.php
  • /wp-admin/includes/schema.php

ファイル/wp-admin/includes/upgrade.phpには、アップグレード関数、wp_upgrade()関数を呼び出すupgrade_all()があります。それはupgrade_xxx()のような機能に関して各バージョンのためのデータベースアップグレードを含みます

例えば:

    ...truncated...

    if ( $wp_current_db_version < 22422 )
            upgrade_350();

    if ( $wp_current_db_version < 25824 )
            upgrade_370();

    if ( $wp_current_db_version < 26148 )
            upgrade_372();

    if ( $wp_current_db_version < 26691 )
            upgrade_380();

    maybe_disable_link_manager();

    maybe_disable_automattic_widgets();

    update_option( 'db_version', $wp_db_version );
    update_option( 'db_upgraded', true );

これが役に立つことを願っています。

1
birgire