異なるデータベースを持つWordpressマルチサイト

どのようにしてマルチサイトに行きましたか? 問題は、複数の多様なサイトの機能を一度に含むプラグインを使用して、エンジン上でより複雑な機能を作成すると、パフォーマンスがひどくなることです。

shardbを使用した2番目の方法がより好ましく、以下に追加します

すべての場所で、必要のない場所にjs / cssを追加します。 したがって、いくつかの強力で重いプラグインと、さらに10〜15個の小さなプラグインをインストールすると、ほとんどすべてのページに、膨大な数のスクリプトとスタイルが表示されます。

このマルチサイトモードには解決策がありました。

接続は難しくなく、数分で使い始めることができます。

これを行うには、 wp-config.phpに行を追加します

/*  ,   . ! */ define('WP_ALLOW_MULTISITE', true); 

次に、[ツール]-> [ネットワークインストール]に移動します。

プラグインをオフにして実行する必要があります。

画像

wp-configと.htaccessのデータを置き換え、サイトに再度ログインするように求められます。

マルチサイトシステム


サイトには2つのモードしかありません-これらは、フォルダー/またはサブドメインです。

site.ru / site2
site2.site.ru

一般的なユーザーの1つのテーブル-いずれかのユーザーに登録すると、他のすべてのユーザーに同じ方法でログインできるため、何度も登録する必要はありません。

パネルからすべてのサイトのプラグインとテーマを管理します。 全員に必要なものを1か所に追加し、それらが個別に必要な場合にのみアクティブにすることができます。 ネットワーク全体ですぐにアクティブ化することもできます。

したがって、プラグインの消費を50%以上削減することができます。 すべてが順調であるように見え、すべてがフロントエンドで正常に動作していますが、問題は次のとおりです。

画像

マルチサイトは、すべてのサイトに対して1つのデータベースを使用します-各サイトに対して個別のテーブルを作成します。

wp_
wp_2
wp_3

これで、新しいサイトごとに1つのベースが数倍になります。

各サイトに個別のデータベースを持つマルチサイト


これには、 multi-dbプラグインを使用します。 もちろん、HyperDB、SharDBなど、他にもありますが、それらに関する情報は見つかりませんでした。 以下のリンクからmulti-dbをダウンロードできます。

cloud.mail.ru/public/KMNr/WDpoUeyUV
drive.google.com/open?id=0Bw4XcI3lCfQSUWZWLUUyUHZFVTA

彼自身が最初に、必要な塩基数(16、256、4096)を決定することを提案しています。

16から始めます。順序は重要です。 最初にマルチサイトをインストールし、データベースの分離を開始し、3つのサイトを作成します-その後の動作をテストします。

VIPデータベースの作成


このオプションを使用すると、特定のデータベースの特定のサイトをホストできます。 彼女はいらない 私は彼女に触れません。 最も重要なことは、他のいずれかであり、1つではないことです。

最初のステップは、新しい拠点を準備することです


 CREATE DATABASE `dbname_0` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_1` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_3` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_4` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_5` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_6` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_7` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_8` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_9` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_a` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_b` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_c` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_d` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_e` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_f` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `dbname_global` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 

このSQLクエリを実行すると、それらが表示されます。

画像

PhpMyAdminでのユーザーとパスワードの作成


私はLocalhosteにいるので、これは必要ありません。 ルートは適切ですが、新しい名前とパスワードを作成する必要があります。また、自分だけでなく、たとえば複数の人のためにサイトを作成する場合は、必要な特権を与える必要があります。 したがって、この点はスキップします。

ファイルの解凍


db-config.php、db.phpはwp-contentに配置する必要があります

move-blogs.php(wp-contentの後の任意のフォルダー、たとえば、新しい/ wp-content / scripts /

プラグインを構成する


DB-config.php

 define ('DB_SCALING', '16'); //------------------------------------------------------------------------// //---DC IPs---------------------------------------------------------------// //------------------------------------------------------------------------// // Usage: add_dc_ip(IP, DC) // EX: add_dc_ip('123.123.123.', 'dc1'); add_dc_ip('127.0.0.', 'dc1'); 

ここでは、データベースの数、この場合は16 、IPサーバーを指定する必要があります。 最後に、最後の数字の代わりに、ポイント127.0.0が付けられます。

次に、最初に、グローバルテーブルadd_global_table( 'dbname_global')を追加します。

 //------------------------------------------------------------------------// //---Global Tables--------------------------------------------------------// //------------------------------------------------------------------------// // Do not include default global tables // Leave off base prefix (eg: wp_) // You don't really have to register these, they will work fine without. // However registering at least your busiest ones might shave a few milliseconds off by avoiding some regexes. // // Usage: add_global_table(TABLE_NAME) // EX: add_global_table('something'); add_global_table('dbname_global'); add_global_table('affiliatedata'); add_global_table('affiliatereferrers'); add_global_table('am_actions'); add_global_table('am_queue'); add_global_table('am_schedule'); add_global_table('autoblog'); add_global_table('bp_activity'); add_global_table('bp_activity_meta'); add_global_table('bp_friends'); add_global_table('bp_groups'); add_global_table('bp_groups_groupmeta'); add_global_table('bp_groups_members'); add_global_table('bp_messages_messages'); add_global_table('bp_messages_notices'); add_global_table('bp_messages_recipients'); add_global_table('bp_notifications'); add_global_table('bp_user_blogs'); add_global_table('bp_user_blogs_blogmeta'); add_global_table('bp_xprofile_data'); add_global_table('bp_xprofile_fields'); add_global_table('bp_xprofile_groups'); add_global_table('domain_mapping'); 

その後、以下のmysqlを入力するためのログインとパスワードを設定するために残ります。

 //------------------------------------------------------------------------// //---DB Servers-----------------------------------------------------------// //------------------------------------------------------------------------// // Database servers grouped by dataset. // R can be 0 (no reads) or a positive integer indicating the order // in which to attempt communication (all locals, then all remotes) // // Usage: add_db_server(DS, DC, READ, WRITE, HOST, LAN_HOST, NAME, USER, PASS) // EX: add_db_server('global', 'dc1', 1, 1,'global.mysql.example.com:3509','global.mysql.example.lan:3509', 'global-db', 'globaluser', 'globalpassword'); // // Note: you can also place this section in a file called db-list.php in wp-content // EX: add_db_server('global', 'dc1', 1, 1,'global.mysql.example.com:3509','global.mysql.example.lan:3509', 'global-db', 'globaluser', 'globalpassword'); add_db_server('global', 'dc1', 1, 1,'localhost','localhost', 'dbname_global', 'root', '1'); add_db_server('0', 'dc1', 1, 1,'localhost','localhost', 'dbname_0', 'root', '1'); add_db_server('1', 'dc1', 1, 1,'localhost','localhost', 'dbname_1', 'root', '1'); add_db_server('2', 'dc1', 1, 1,'localhost','localhost', 'dbname_2', 'root', '1'); add_db_server('3', 'dc1', 1, 1,'localhost','localhost', 'dbname_3', 'root', '1'); add_db_server('4', 'dc1', 1, 1,'localhost','localhost', 'dbname_4', 'root', '1'); add_db_server('5', 'dc1', 1, 1,'localhost','localhost', 'dbname_5', 'root', '1'); add_db_server('6', 'dc1', 1, 1,'localhost','localhost', 'dbname_6', 'root', '1'); add_db_server('7', 'dc1', 1, 1,'localhost','localhost', 'dbname_7', 'root', '1'); add_db_server('8', 'dc1', 1, 1,'localhost','localhost', 'dbname_8', 'root', '1'); add_db_server('9', 'dc1', 1, 1,'localhost','localhost', 'dbname_9', 'root', '1'); add_db_server('a', 'dc1', 1, 1,'localhost','localhost', 'dbname_a', 'root', '1'); add_db_server('b', 'dc1', 1, 1,'localhost','localhost', 'dbname_b', 'root', '1'); add_db_server('c', 'dc1', 1, 1,'localhost','localhost', 'dbname_c', 'root', '1'); add_db_server('d', 'dc1', 1, 1,'localhost','localhost', 'dbname_d', 'root', '1'); add_db_server('e', 'dc1', 1, 1,'localhost','localhost', 'dbname_e', 'root', '1'); add_db_server('f', 'dc1', 1, 1,'localhost','localhost', 'dbname_f', 'root', '1'); 

ログインルート、パスワード1。また、ここで、最初に登録したこれらの名前を指定する必要があります:dbname_0、dbname_1 ...

move-blogs.phpを構成する


これが最も重要な部分です。 さまざまなエラーの出力もここで形成されます。

 $dbname = "multi"; //This is your current database $blog_table_prefix = 'wp_'; //Prefix of your wpmu blog tables, most likely this won't need to be changed $newdb_prefix = 'dbname_'; //This is the prefix of the db's you're moving your tables into - we assume they are all the same, if not, you're in trouble //We need info to connect to the databases $dbhost = 'localhost'; $dbuname = 'root'; $dbpass = '1'; //How many db's are you moving into (16, 256, or 4096)? $db_scaling = '16'; 

$ dbname = "multi"; // multiは、分割したい共有データベースの名前です。プレフィックスなしで記述する必要があります

$ blog_table_prefix = 'wp_'; //これは共通データベースのプレフィックスです

$ newdb_prefix = 'dbname_'; //新しい名前

ログイン、サーバー、パスワード、およびデータベースの数。

$ dbhost = 'localhost';
$ dbuname = 'root';
$ dbpass = '1';
$ db_scaling = '16';

次に移動してください: localhost / wp-content / scripts / move-blogs.php

画像

こちらをクリックしてください

プロセスが終了するのを待っています。アドレスバーのリンクが変更されます。 その後、 ここをクリックしてページを更新します。 ステータスが更新されました。

画像

これで、wp_usersなどを含む1つのグローバルベースが作成されたことは明らかです。

画像

メインサイトに加えて、残りの2つのサイトはランダムな順序で他のベースに散らばっていました。たとえば、2番目のサイトはdbname_cで、3番目のサイトはdbname_eでした。

画像
画像

次に、何が起こったかを確認する必要があります。 たとえば、複数のサイトで投稿を記録し、それらが表示される場所を確認することができます。 確かに、記録は新しいものやグローバルなものに現れています。

画像
画像

古い「マルチ」には何も追加されません。 その後、おそらく、それですべてです。 これまでのところ、これらはこのシステムに関する最初の意見に過ぎず、結論を出すには時期尚早です。

マルチサイトのニュアンス


1つは、新しく登録されたメンバーにロールを設定できないことです。 しかし、 これにはプラグインがあります 。 さらに、サイト1(メイン)とサイト2の2つのサイトがある状況を想像してください。サイト2に登録されているユーザーは、サイト1にログインして表示できますが、事実にもかかわらず、サイト1のコンソールからは表示できません彼は何ですか。 あなたは彼が登録したパブリックネットワークまたはサイト2でそれを見ることができます。

登録リダイレクト

wp-login、wp-admin、wp-registerを使用してサイト2から登録する場合、サイト1に転送されます。マルチサイトの開発者が言うように、アカウントはネットワーク全体に対して作成されるため、論理的です。 しかし、それは不便であり、必要なものではありません。 WooCommerceの[マイアカウント]ページとショートコード[woocommerce_my_account]は通常の登録に役立ちますが、Login With Ajaxも使用できます。

トピックの詳細


追伸:スタイル/スクリプトをプラグインと簡単に組み合わせて、特定のページにのみそれらを含めることができます。 Multi-dbはgithubに配置されていますが、すぐには表示されませんでした。

premium.wpmudev.org/forums/topic/multi-db-plugin-conlict-with-woocomerce
premium.wpmudev.org/forums/topic/db-error-could-not-list-tables-1
github.com/wpmudev/multi-db
premium.wpmudev.org/forums/topic/re-multi-db-plugin

maxtop.org/wordpress-otklyuchenie-skriptov
maxtop.org/wordpress-obedinenie-css-fajlov-stilej-otklyuchenie-zagruzki-lishnix-css-fajlov

bavatuesdays.com/wpmu-multi-db-tutorial
www.inmotionhosting.com/support/website/wordpress/heartbeat-ajax-php-usage

質問への回答


たぶん他の誰かが同じ質問をするでしょう。
消費はスペースの消費を意味しますか? なぜ50%しかありませんか?

文字通りの意味で、プラグインの消費。 20〜30個のプラグインを使用するサイトが1つあるとします。

マルチサイトでは、2つの部分に分割します。 したがって、その各部分は個別に10〜15個のプラグインを使用します。 例:

site.ruはメッセージボードまたはカタログです
site.ru / shop /またはshop.site.ru-これはsite.ru内のストアです

site.ruはいくつかの10-15プラグインを使用します
site.ru / shop /他の10-15プラグインを使用

この場合、ユーザーと管理パネルについて心配する必要はありません。これらのサイトは同じ管理パネルで管理し、ユーザーも共通しているためです。
(16、256、4096)でたらめ。

これは、プラグインで許可されているデータベースの数です。 マルチサイトネットワークに100万のサイトがある場合、これらのベースで均等にいっぱいになるため、もちろん4096を選択する方が良いでしょう。これについては、wp-フォーラムを読んでください。 私は百万サイトをテストしていません。

しかし、このプラグインがなければ、これらの100万サイトすべてが1つのデータベースに含まれます。
define( 'DB_SCALING'、 '16'); -そして、もしそれから32個のベースがあるならば、それからすべては行きますか? :)

答えは上記です。 サイトの数に応じて、最初に必要な量を把握する必要があります。 multi-dbを使用することは、すでにマルチサイトモードで多くのサイトを持っている人のためにデータベースを最適化するためのステップです。
css / jsで保存し、カットベースを取得しました。 ロジックが表示されません。 :)

ベースをカットするためにjs / cssを保存するために-ロジックはありません。 データベースセクションは、js / cssを最適化した後の第2段階です。 彼は彼らとは何の関係もありません。

サイトに多くのプラグインがある場合(サイト自体に他に何があるかを考えると、テンプレートがたくさんあります)、サイトのさまざまな部分でこれをすべて区別する方法の問題が生じます。 それらの多くは、管理パネルに悪影響を及ぼし、速度が低下し始めます。

マルチサイトでベースを切断せずにプラグイン自体の問題を解決するため、各サイトまたはサイトの一部にプラグインが少なくなります。

より良い方法


multi-dbプラグイン自体は廃止され、サポートされていないため、さらに別のソリューションがあり、最適なソリューションはSharDBです

マルチDBよりも作業がはるかに簡単です。 そして、より徹底的なチェックの後、multi-dbにはいくつかのプラグインでバグがあり、このshar-dbはそれらの問題を引き起こさないことがわかりました。

最初に、 db-settings.phpファイルをサイトのルートに解凍して、wp-config.phpがそれと同じレベルになり、それに接続する必要があります

 /*  ,   . ! */ ... ... ... ... ... ... require_once('db-settings.php'); 


その設定

 // If you have multiple datacenters you can come up with your own datacenter // detection logic (php_uname?). This helps ensure the web servers try to // connect to the nearest database servers first, then distant ones. define( 'DATACENTER', '' ); function add_slave($read, $host, $lhost = '', $user = DB_USER, $password = DB_PASSWORD) { global $slaves; $slaves[] = compact('read', 'host', 'lhost', 'user', 'password'); } /* Add your configuration here */ // how many characters of hexidecimal hash $shardb_hash_length = 2; // what is the prefix of your blog database shards (everything before the hexidecimal hash) //    $shardb_prefix = 'set'; // set a string to be used as an internal identifier for the dataset $shardb_dataset = 'abc'; // do you want to put your primary blog (blog_id 1) in its own 'home' database? $enable_home_db = true; // how many, if any, VIP databases do you have? $num_vipdbs = 5; // add this to set the write master read priority (default 1) $shardb_master_read = 99; // add this if all of your databases are on a local server //  ,         $shardb_local_db = true; // use this function to add a read slave host add_slave($read_priority, $hostname, $local_hostname, $user, $password); // instructions for adding vip blogs at the bottom of this confg filei /* That's all, stop editing! Happy blogging. */ 

setは、すべてのサイトを含むデータベースの名前です。

次に、shardb-admin.phpファイルをプラグインフォルダーにコピーします。通常どおり、このプラグインをネットワーク用にアクティブ化します。

次に、管理パネルでプラグイン設定に移動します。 ネットワーク管理--->設定---> SharDB移行。
画像

そして、ここでの最初のステップは、グローバルテーブルの移行です。 彼はそれを別のテーブルに書くことを提案します-setglobal

画像

次は最初のサイトです

画像

ベースが「セット」と呼ばれた場合、彼はそれをセットホームに移動することを提案します

画像

すべてが正常にコピーされます。すべてのサイトをさらにコピーして、「サイトを移行」できます

画像

など...採番サイトとそのテーブルが画面に表示されます。 プラグインが書き込みたいテーブルの名前も表示されます。

画像

すべての準備が整ったら、 db.phpファイルをwp-contentフォルダーに解凍する必要があります

これで、管理パネルで、たとえばコピーしなかったサイトのステータスを確認できます。各サイトの新しい名前を持つ目的のテーブルも表示されます。

画像

接続に失敗しました-このメッセージはdb.phpを表示します。 wp-contentにこのファイルがある場合、デフォルトでは、1つの一般的なデータベースではなく、異なるデータベースに個別に接続しようとします。 同じ原則で他のすべてのサイトを転送すると、それらも機能します。

データベースをコピーするには、db.phpファイルを使用しないでください。コピーしないと、管理パネル(SharDB移行)の設定項目が使用できなくなります。コピー後、最後にダウンロードする必要があります。 これは単にリンクとして機能します。

新しいサブサイトを作成する場合、今回はdb.phpファイルを削除するか名前を変更し、必要に応じて同じ方法で別のデータベースに分離する必要があります。

サイトがほとんどない場合、この方法は重要ではありません。 しかし、エンジン自体のベースには、時間の経過とともに詰まり、サイトからの応答を遅くする機能があります。 これが1つのサイトと1つのベースで発生した場合、マルチサイトモードでは、これらすべてのサイトテーブルが1か所にあるため、10倍+サイズになります。

これは、場合によっては使用できるエンジンの別の機能です。

Source: https://habr.com/ru/post/J306992/


All Articles