ラベル Percona の投稿を表示しています。 すべての投稿を表示
ラベル Percona の投稿を表示しています。 すべての投稿を表示

2026年3月2日月曜日

すべての PXC ノードに XtraBackup をインストールする必要があるか?

Perconaフォーラムで定期的に浮上する質問:Percona XtraDB Cluster (PXC)のすべてのノードにXtraBackupをインストールする必要がありますか? これは混合環境を管理している場合や特定のノードのソフトウェアフットプリントを最小限に抑えようとする場合に特に妥当な質問です。実際の仕組みとテストが確認する内容を以下に示します。

簡潔な回答(ただし読み進めてください)

そのノードに何をさせたいかによります。 ここでのニュアンスがかなり重要なので、PXCにおけるState Snapshot Transfer (SST)の仕組みと、特定のノードにXtraBackupが存在する — または存在しない — ことがなぜ重要かを詳しく説明する価値があります。

PXCにおけるSSTの簡単なおさらい

新しいノードがPercona XtraDB Clusterに参加する場合、または既存のノードが十分に長時間ダウンしてIncremental State Transfer (IST)がもはや不可能になった場合、クラスタはState Snapshot Transfer (SST)を実行します。これは基本的に、ドナーノードからジョイナーノードへの完全なデータコピーです。

PXCはmy.cnfで設定される複数のSST方法をサポートしています:

[mysqld]
wsrep_sst_method = xtrabackup-v2

利用可能なSST方法には以下が含まれます:

  • xtrabackup-v2 — PXC向けの推奨方法で、Percona XtraBackupを使用;ドナーを長時間ロックせずにSSTを実行します
  • clone — PXC 8.0.22+で利用可能で、MySQLの組み込みClone Pluginを使用;SSTのためのXtraBackup依存を除去します
  • mysqldump — 転送中にドナーをロックし遅い;本番環境では推奨されません
  • rsync — 転送中にドナーを読み取り専用に要求し、書き込みをブロック;ライブクラスタでも推奨されません

xtrabackup-v2方法は歴史的にデフォルトのアプローチであり、転送中にドナーノードを書き込み可能に保つため、既存のデプロイメントで広く使用されています。他のレガシーメソッドはドナーの書き込みをブロックする可能性があり、本番クラスタでは一般的に受け入れられません。PerconaはPXC 8.0.22以降の新規インストールに対して、SST層での外部ツール依存を除去するため、clone方法をますます推奨しています。

XtraBackupはどこにインストールする必要がありますか?

xtrabackup-v2を使用したSSTがトリガーされると、ドナーとジョイナーの両方にXtraBackupがインストールされ、アクセス可能である必要があります。両方が関与する理由は以下の通りです:

``````html
  • donor(提供元)は XtraBackup を実行してスナップショットデータをアウトバウンドでストリーミングします
  • joiner(参加元)は XtraBackup — 具体的には xbstream および xbcrypt ユーティリティ — を実行して、そのストリーミングされたデータを受信し適用します

joiner ノードに XtraBackup がインストールされていない場合、xtrabackup-v2 を使用してクラスタに追加しようとすると、SST が失敗します。joiner のエラーログには通常、次のような内容が表示されます:

[ERROR] WSREP: Failed to read 'ready <addr>' from: wsrep_sst_xtrabackup-v2
...
wsrep_sst_xtrabackup-v2: line 522: xbstream: command not found
[ERROR] WSREP: SST failed: 2 (No such file or directory)

これは明確で曖昧さのない失敗モードです。xbstream が joiner に存在しない場合、SST は完了しません。

参加元になることのないノードはどうでしょうか?

技術的には、ノードが常に donor(提供元)として動作し、ゼロからクラスタに再参加する必要がない場合、donor としての機能のみで XtraBackup が必要だと主張できます。しかし実際には、クラッシュ後、計画メンテナンス後、またはネットワークパーティションからの回復後、どのノードでも joiner になる可能性があります。ノードが SST を受信する必要が決してないことを確実に保証する方法はありません。

ここでの実際的な指針はシンプルです:PXC ノードすべてに例外なく XtraBackup をインストールしてください。 インストールのオーバーヘッドは無視できるほど小さく、計画外障害時の SST 失敗のコストはそうではありません。

Clone プラグインの代替手段(PXC 8.0.22+)

PXC 8.0.22 以降、Percona は MySQL Clone Plugin を SST 方式としてサポートするようになりました。これは SST 目的での XtraBackup 依存関係を完全に排除するため、知っておく価値があります:

[mysqld]
wsrep_sst_method = clone

clone 方式を使用する場合、すべてのノードで Clone Plugin をロードする必要があります:

INSTALL PLUGIN clone SONAME 'mysql_clone.so';
SHOW PLUGINS WHERE Name = 'clone';
+-------+--------+-------+----------------+---------+
| Name  | Status | Type  | Library        | License |
+-------+--------+-------+----------------+---------+
| clone | ACTIVE | CLONE | mysql_clone.so | GPL     |
+-------+--------+-------+----------------+---------+

clone 方式は XtraBackup を SST 依存関係とせずに標準化するための堅実な選択肢です。ただし、選択する SST 方式に関わらず、XtraBackup は外部バックアップ戦略において依然として実用的な価値があります。SST はクラスタ同期メカニズムであり、バックアップではなく、決してバックアップとして扱ってはなりません。

現在の SST 設定の確認

現在の SST 方式と Galera 関連の設定を確認するには:

SHOW VARIABLES LIKE 'wsrep_sst_method';
+------------------+---------------+
| Variable_name    | Value         |
+------------------+---------------+
| wsrep_sst_method | xtrabackup-v2 |
+------------------+---------------+

クラスタ状態を確認し、どのノードが donor(提供元)として動作しているかを確認するには:

SHOW STATUS LIKE 'wsrep_local_state_comment';
+---------------------------+--------+
| Variable_name             | Value  |
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
SHOW STATUS LIKE 'wsrep_connected';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| wsrep_connected | ON    |
+-----------------+-------+
SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

実際の観察事項

PXC 環境を直接扱った経験から注目すべきいくつかの点:

``````html
  • XtraBackup のバージョンは PXC バージョンと一致する必要があります。XtraBackup 2.x を PXC 8.0 で使用すると SST が失敗します。PXC 8.0 には Percona XtraBackup 8.0 を使用し、アップグレード後はバージョン一致を確認してください。
  • <clone SST メソッドに切り替えても、スケジュールされたバックアップのために XtraBackup をインストールしたままにしてください。バックアップ戦略と SST メソッドは別々の懸念事項であり、それぞれ独立して扱うべきです。
  • <wsrep_sst_donor 変数は、好みのドナーノードを指定でき、最も忙しいかレイテンシに敏感なメンバーに SST を向けないようにするのに便利です。
  • PXC とともに Percona Toolkit を実行している場合、特定の PXC バージョンでの DDL レプリケーションの動作に注意してください — Total Order Isolation (TOI) と Rolling Schema Upgrade (RSU) の動作が異なり、本番環境でスキーマ変更を実行する前に専用に確認する価値があります。

まとめ

質問に直接答えると:<xtrabackup-v2 を SST メソッドとして使用している場合 — これは多くの既存の PXC デプロイメントでデフォルトのままです — はい、すべてのクラスターメンバーに XtraBackup をインストールする必要があります。状況によっては任意のノードがドナーまたはジョイナーとなり、このメソッドを使用する際は両方の役割で XtraBackup が必要です。

PXC 8.0.22 以降を使用しており、SST レイヤーでの依存関係を排除したい場合、Clone Plugin メソッドは実行可能な代替手段であり、新規デプロイメントに対する Percona の推奨選択肢となっています。新規インストールの場合、PXC 8.4 LTS が現在の長期サポートリリースであり、新規インストールの推奨ターゲットです。SST に clone を使用していても、実際のバックアップジョブには XtraBackup が最適なツールです。

選択したノードで XtraBackup をスキップして数メガバイトのディスク容量を節約しようとしないでください。その決定が最終的に引き起こす SST 失敗は、犠牲にする価値のないトレードオフです。

リソース

2026年2月22日日曜日

MySQL 8.0 JSON 関数:実践的な例とインデクシング

This article was originally published in English at AnotherMySQLDBA.

この投稿では、MySQL 8.0 の JSON 関数のハンズオン解説を扱います。JSON サポートは MySQL 5.7 から存在しますが、8.0 では重要な改善が追加されました — より優れたインデックス戦略、新しい関数、マルチバリューインデックス — これにより JSON データの取り扱いが大幅に実用的になりました。以下の内容では、最も一般的に必要なパターンのいくつかを文書化し、EXPLAIN の出力と知っておくべきパフォーマンス観察を含めています。

これは「JSON vs. リレーショナル」の議論投稿ではありません。MySQL に JSON を保存している場合、すでに理由をお持ちでしょう。ここでの目標は、利用可能なツールを効果的に使用していることを確認することです。

環境

mysql> SELECT @@version, @@version_comment\G
*************************** 1. row ***************************
        @@version: 8.0.36
@@version_comment: MySQL Community Server - GPL

テストは 8GB RAM の VM で行われ、innodb_buffer_pool_size を 4G に設定しました。言及する価値のあるメンテナンス上の注意点として:query_cache_type は 8.0 では無関係です。なぜなら query cache が完全に削除されたからです。5.7 インスタンスから移行し、my.cnf にその変数が残っている場合、削除してください — MySQL 8.0 は起動エラーを投げます。

テストテーブルの設定

テストテーブルは、かなり一般的なパターンをシミュレートしています — アプリケーションがユーザー profile データとイベントメタデータを JSON blob として保存するものです:

CREATE TABLE user_events (
  id          INT UNSIGNED NOT NULL AUTO_INCREMENT,
  user_id     INT UNSIGNED NOT NULL,
  event_data  JSON NOT NULL,
  created_at  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  INDEX idx_user (user_id)
) ENGINE=InnoDB;

INSERT INTO user_events (user_id, event_data) VALUES
(1, '{"action":"login","ip":"192.168.1.10","tags":["mobile","vpn"],"score":88}'),
(1, '{"action":"purchase","ip":"192.168.1.10","tags":["desktop"],"score":72,"amount":49.99}'),
(2, '{"action":"login","ip":"10.0.0.5","tags":["mobile"],"score":91}'),
(3, '{"action":"logout","ip":"10.0.0.9","tags":["desktop","vpn"],"score":65}'),
(2, '{"action":"purchase","ip":"10.0.0.5","tags":["mobile"],"score":84,"amount":129.00}');

基本的な抽出:JSON_VALUE vs. JSON_EXTRACT

JSON_VALUE() は MySQL 8.0.21 で導入され、スカラー値を抽出するよりクリーンな方法で、組み込みの型キャストが可能です。それ以前は JSON_EXTRACT()(または -> 省略形)を使用し、手動でキャストする必要があり、動作はしますがクエリにノイズを追加します。

-- Pre-8.0.21 approach
SELECT user_id,
       JSON_EXTRACT(event_data, '$.action') AS action,
       CAST(JSON_EXTRACT(event_data, '$.score') AS UNSIGNED) AS score
FROM user_events;

-- Cleaner 8.0.21+ approach
SELECT user_id,
       JSON_VALUE(event_data, '$.action') AS action,
       JSON_VALUE(event_data, '$.score' RETURNING UNSIGNED) AS score
FROM user_events;

2 番目のクエリの出力:

+---------+----------+-------+
| user_id | action   | score |
+---------+----------+-------+
|       1 | login    |    88 |
|       1 | purchase |    72 |
|       2 | login    |    91 |
|       3 | logout   |    65 |
|       2 | purchase |    84 |
+---------+----------+-------+
5 rows in set (0.00 sec)

RETURNING 句は本当に有用です。煩わしいダブルキャストパターンを排除し、後でクエリコードを読む際に意図を明確にします。

マルチバリューインデックス:真のゲームチェンジャー

ここが 8.0 で JSON ワークロードの本当の進化点です。MySQL 8.0.17 以降利用可能なマルチバリューインデックスにより、JSON カラム内の配列要素を直接インデックス付けできます。実際の動作は以下のようになります:

ALTER TABLE user_events
  ADD INDEX idx_tags ((CAST(event_data->'$.tags' AS CHAR(64) ARRAY)));

タグ値でフィルタリングするクエリに対する、EXPLAIN の前後を示します:

-- Without the multi-valued index:
EXPLAIN SELECT * FROM user_events
WHERE JSON_CONTAINS(event_data->'$.tags', '"vpn"')\G

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: user_events
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 5
     filtered: 100.00
        Extra: Using where

-- After adding the multi-valued index:
EXPLAIN SELECT * FROM user_events
WHERE JSON_CONTAINS(event_data->'$.tags', '"vpn"')\G

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: user_events
   partitions: NULL
         type: range
possible_keys: idx_tags
          key: idx_tags
      key_len: 67
          ref: NULL
         rows: 2
     filtered: 100.00
        Extra: Using where

フルテーブルスキャンからレンジスキャンへ。5 行では些細なことですが、数百万行のテーブルで頻繁なタグベースのフィルタリングを行う場合、その差は顕著です。改善効果はテーブルサイズとクエリ頻度に比例してスケールします。

重要な注意点として:MEMBER OF()JSON_OVERLAPS() もマルチバリューインデックスから恩恵を受けますが、JSON_SEARCH() は受けません。設計時にクエリパターンを選択する際に重要です:

-- This WILL use the multi-valued index:
SELECT * FROM user_events
WHERE 'vpn' MEMBER OF (event_data->'$.tags');

-- This will NOT use it:
SELECT * FROM user_events
WHERE JSON_SEARCH(event_data->'$.tags', 'one', 'vpn') IS NOT NULL;

JSON の集計と変換

よく知っておくべきいくつかの集計関数:

``````html
-- Build a JSON array of actions per user
SELECT user_id,
       JSON_ARRAYAGG(JSON_VALUE(event_data, '$.action')) AS actions
FROM user_events
GROUP BY user_id;

+---------+----------------------+
| user_id | actions              |
+---------+----------------------+
|       1 | ["login","purchase"] |
|       2 | ["login","purchase"] |
|       3 | ["logout"]           |
+---------+----------------------+
3 rows in set (0.01 sec)

-- Summarize into a JSON object keyed by action
SELECT user_id,
       JSON_OBJECTAGG(
         JSON_VALUE(event_data, '$.action'),
         JSON_VALUE(event_data, '$.score' RETURNING UNSIGNED)
       ) AS score_by_action
FROM user_events
GROUP BY user_id;

+---------+--------------------------------+
| user_id | score_by_action                |
+---------+--------------------------------+
|       1 | {"login": 88, "purchase": 72}  |
|       2 | {"login": 91, "purchase": 84}  |
|       3 | {"logout": 65}                 |
+---------+--------------------------------+
3 rows in set (0.00 sec)

JSON_OBJECTAGG() は、グループ内に重複するキーが存在する場合にエラーをスローします。これは、本番の ETL パイプラインで遭遇する前に知っておく価値があります。その場合、上流で重複を除去するか、データがこの集計ステップに到達する前にアプリケーション logic で処理する必要があります。

JSON を多用したクエリ実行後の SHOW STATUS の確認

クエリパターンを評価する際、ハンドラーメトリクスの確認は有用な習慣です:

FLUSH STATUS;

SELECT * FROM user_events
WHERE JSON_VALUE(event_data, '$.score' RETURNING UNSIGNED) > 80;

SHOW STATUS LIKE 'Handler_read%';

+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Handler_read_first         | 1     |
| Handler_read_key           | 0     |
| Handler_read_last          | 0     |
| Handler_read_next          | 4     |
| Handler_read_prev          | 0     |
| Handler_read_rnd           | 0     |
| Handler_read_rnd_next      | 6     |
+----------------------------+-------+
7 rows in set (0.00 sec)

Handler_read_rnd_next の値はフルスキャンを確認しています — score 値に機能的インデックスがないため驚くことではありません。スケールでの score ベースのフィルタリングには、インデックス付きの生成カラムが正しい解決策です:

ALTER TABLE user_events
  ADD COLUMN score_val TINYINT UNSIGNED
    GENERATED ALWAYS AS (JSON_VALUE(event_data, '$.score' RETURNING UNSIGNED)) VIRTUAL,
  ADD INDEX idx_score (score_val);

これを追加した後、同じクエリは適切なインデックス範囲スキャンに低下します。JSON フィールド上の生成カラムは MySQL 8.0 と Percona Server 8.0 の両方で利用可能であり、いかなる意味のあるスケールでもスカラー JSON フィールドのフィルタリングに対して最も信頼性の高い方法です。

Percona Server を使用している場合、Percona Toolkitpt-query-digest が、本番環境で実際に問題を引き起こしている JSON を多用したクエリを特定するための最も実践的な方法であり、推測的にインデックスを追加する前に使用することをお勧めします。

実践的な観察

  • マルチバリューインデックス (8.0.17+) は長らく待ち望まれた改善であり、クエリパターンが JSON_CONTAINS() または MEMBER OF() と一致する場合にうまく機能します
  • JSON_VALUE() with RETURNING (8.0.21+) は、古い抽出後のキャストパターンよりもクリーンで、一貫して採用する価値があります
  • 生成カラムとインデックスは、スケールでのスカラー JSON フィールドフィルタリングに対して最も信頼性の高い方法です
  • グループ化されたデータでの JSON_OBJECTAGG() の重複キーエラーを監視してください — ETL パイプラインでハードエラーとして表面化し、サンプルデータがたまたまクリーンであればテストで簡単に逃すことがあります
  • 常に EXPLAIN でインデックスの使用を確認してください — オプティマイザは複雑な WHERE 句でマルチバリューインデックスを常に選択するわけではなく、仮定するよりも確認する価値があります

まとめ

MySQL 8.0 の JSON 改善は本当有用であり、特にマルチバリューインデックスと型キャスト付きの JSON_VALUE() がそうです。これらは良好なスキーマ設計に代わるものではありませんが、JSON ストレージが適切または継承された場合、オプティマイザが勝手に解決してくれることを願うのではなく、本物のツールが利用可能になりました。特に、特定の JSON フィールドが WHERE 句で頻繁に使用されることがわかっている場合は、生成カラムパターンを早い段階で評価する価値があります。

有用な参考資料:

2018年5月24日木曜日

プロキシMySQL :: HAproxy || ProxySQLとKeepAlived


だからあなたのMySQLトラフィックをルーティングする場合、いくつかのオプションが存在します。 

今私はHAproxyがクライアントとより頻繁に使用されるのを見てきましたが、設定するのはかなり簡単です。 Perconaには興味のある人の例があります:

個人的に私はProxySQLが好きです。 Perconaにもこれに関するブログはほとんどありません
PerconaにもProxySQLバージョンがあります

私はいくつかの例を書いてみることを考えていましたが、ペルコナ全体がそれをとてもうまく説明しました。 私はそれらの投稿から何かを取り除きたくない、代わりにそれらのURLを介して多くの良い情報が利用可能であることを指摘する。 だからすでに書かれたものを書き換えるのではなく、私は興味のある人のための情報のコレクションを作成します。

最初に自分が必要と望むものを比較して決定します。 以下のリンクはもちろん、ProxySQLに偏っていますが、全体的な検討範囲が与えられます。
クラスタやマスターをマスタリングしていて、どのサーバーに接続していても、書き込みと読み取りがどちらになるかは気にしません。 HAproxyはシンプルな設定が可能です。

ProxySQLの特典は、トラフィックを簡単に重み付けして並べ替えることができます。 したがって、書き込みをノード1に行って、ノード2とノード3からプルを選択することができます。これに関するドキュメントは、次の場所にあります。
はい、HAproxyで実行できますが、それに応じてアプリケーションに指示する必要があります。
これは、クエリルールに基づいてProxySQLで処理されます。

今ここで明らかな質問:はい、どのようにProxySQLを単一障害点にしないようにしますか?

あなたは堅牢なロードバランサやetcなどを投資することができます。ハードウェアを投げてください....または自分で簡単にしてオープンソースをサポートし、 KeepAliveを使用してください。 これは設定が非常に簡単で、そのすべてがここでもうまく文書化されています:
あなたがluaとmysql-proxyを扱ったことがあるならば、ProxySQLとKeepalivedは非常に簡単です。 それでも何らかの理由でそれが必要な場合: https : //launchpad.net/mysql-proxy

HAproxy、ProxySQL、または別のソリューションを選択した場合でも、単一障害点を別の障害点に置き換えないようにする必要があります。 あなたがプロキシを使用している場合、これをしない理由はほとんどありません。

ProxySQLについてもう少し詳しく説明します。

http://anothermysqldba.blogspot.com/2018/05/proxy-mysql-haproxy-proxysql-keepalived.html

2014年6月15日日曜日

Percona XtraDBクラスタをインストール

Original post: http://anothermysqldba.blogspot.com/2014/06/installing-percona-xtradb-cluster.html

だからもちろんPerconaは、プロセスを説明する資料を持っています。 このブログの目的は、誰かを助けることができる期待して、もう少し詳しく説明しに行くことです。 

レビューのためのハイパーリンク: 
前提条件 
  • ファイアウォールは、ポート3306、4444、4567および4568に接続できるようにセットアップされている
  • 内部ローカルネットワーク用のiptablesを停止するか、iptableのルールを調整します。
/etc/init.d/iptables stop 

  • SELinuxは無効になっています
echo 0 >/selinux/enforce 
vi /etc/selinux/config 

  • 最大のSSHキーを設定し、すべてのid_rsa.pubファイルの値はすべてのサーバのauthorized_keysにあるようにauthorized_keysにに入れる。
# ssh-keygen -t rsa 
# cd /root/.ssh/ 
# cp id_rsa.pub authorized_keys 
# chmod 600 /root/.ssh/authorized_keys 
# chmod 700 /root/.ssh/ 


だから私は、基本的なサーバのCentOS 6.5のインストールを始めています。 
# yum -y install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm 
# yum -y install http://mirror.pnl.gov/epel/6/x86_64/epel-release-6-8.noarch.rpm 
# wget http://www.percona.com/downloads/RPM-GPG-KEY-percona /etc/pki/rpm-gpg/RPM-GPG-KEY-percona 
# wget http://www.percona.com/downloads/RPM-GPG-KEY-percona /etc/pki/rpm-gpg/RPM-GPG-KEY-percona 
# yum -y install socat 


私は、MySQL-LIBSおよび関連の依存関係を削除、衝突を避けるために 
# rpm -e mysql-libs postfix cronie redhat-lsb-core redhat-lsb-printing redhat-lsb-graphics libcgroup numad redhat-lsb sysstat crontabs cronie-anacron redhat-lsb-compat 


それから私は、Percona Clusterパッケージをインストールしました。 
# yum -y install Percona-XtraDB-Cluster-full-56 
[root@node1 ~]# /etc/init.d/mysql start 
Starting MySQL (Percona XtraDB Cluster)......... SUCCESS! 
mysql -e "CREATE FUNCTION fnv1a_64 RETURNS INTEGER SONAME 'libfnv1a_udf.so'" 
mysql -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'" 
mysql -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'" 


だから我々は、我々は、ノードごとに削除された項目を置き換えることができます.. 
yum -y install postfix cronie redhat-lsb-core redhat-lsb-printing redhat-lsb-graphics libcgroup numad redhat-lsb sysstat crontabs cronie-anacron redhat-lsb-compat 


我々は次のクラスタを設定できるようにので、上記の手順を繰り返してパッケージをインストールします。 

[root@node2 ~]# /etc/init.d/mysql start 
Starting MySQL (Percona XtraDB Cluster)......... SUCCESS! 
[root@node3 ~]# /etc/init.d/mysql start 
Starting MySQL (Percona XtraDB Cluster)........ SUCCESS! 

私たちが実行してMySQLのの3つのインスタンスがありますが、それはまだ、クラスタではありません。 

ノードの構成

ノード1の/ etc / my.cnfに 
[mysqld] 

datadir=/var/lib/mysql 
user=mysql 

# Path to Galera library 
wsrep_provider=/usr/lib64/libgalera_smm.so 

# Cluster connection URL contains the IPs of node#1, node#2 and node#3 
# node 1 192.168.0.33 
# nod3 2 192.168.0.34 
# nod3 3 192.168.0.35 
wsrep_cluster_address=gcomm://192.168.0.33,192.168.0.34,192.168.0.35 

# In order for Galera to work correctly binlog format should be ROW 
binlog_format=ROW 

# MyISAM storage engine has only experimental support 
default_storage_engine=InnoDB 

# This changes how InnoDB auto increment locks are managed and is a requirement for Galera 
innodb_autoinc_lock_mode=2 

# Node #1 address 
wsrep_node_address=192.168.0.33 

# SST method 
#wsrep_sst_method=xtrabackup 
wsrep_sst_method=rsync # 
# wsrep_sst_method=rsync_wan # 
# wsrep_sst_method=mysqldump # SLOW 

# Cluster name 
wsrep_cluster_name=percona_cluster 

# Authentication for SST method 
wsrep_sst_auth="root:<password_here>" 

# server_id 
server_id=3232235553 #SELECT INET_ATON('192.168.0.33') 

#[client] 
socket=/var/lib/mysql/mysql.sock 


第一クラスタノードを起動する 
/etc/init.d/mysql start --wsrep-cluster-address="gcomm://" 
Starting MySQL (Percona XtraDB Cluster)...................................... SUCCESS! 

[root@node1 mysql]# cat grastate.dat 
# GALERA saved state 
version: 2.1 
uuid: 97c457f8-f3d2-11e3-9b4e-374ebb7427e6 
seqno: -1 
cert_index: 


クラスタは、現時点で唯一のノードです。 
mysql> select @@hostname\G show global status like 'wsrep_cluster_size' \G 
*************************** 1. row *************************** 
@@hostname: node1.localdomain 
1 row in set (0.01 sec) 

*************************** 1. row *************************** 
Variable_name: wsrep_cluster_size 
Value: 1 


[OK]を今すぐ1が起動し、動作している我々は、ノード2を起動することができます 
ノード2の/ etc / my.cnfに 
[mysqld] 

datadir=/var/lib/mysql 
user=mysql 

# Path to Galera library 
wsrep_provider=/usr/lib64/libgalera_smm.so 

# Cluster connection URL contains the IPs of node#1, node#2 and node#3 
# node 1 192.168.0.33 
# nod3 2 192.168.0.34 
# nod3 3 192.168.0.35 
wsrep_cluster_address=gcomm://192.168.0.33,192.168.0.34,192.168.0.35 

# In order for Galera to work correctly binlog format should be ROW 
binlog_format=ROW 

# MyISAM storage engine has only experimental support 
default_storage_engine=InnoDB 

# This changes how InnoDB auto increment locks are managed and is a requirement for Galera 
innodb_autoinc_lock_mode=2 

# Node #1 address 
wsrep_node_address=192.168.0.34 

# SST method 
#wsrep_sst_method=xtrabackup 
wsrep_sst_method=rsync # 
# wsrep_sst_method=rsync_wan # 
# wsrep_sst_method=mysqldump # SLOW 


# Cluster name 
wsrep_cluster_name=percona_cluster 

# Authentication for SST method 
wsrep_sst_auth="root:" 

# to enable debug level logging, set this to 1 
wsrep_debug=1 

# server_id 
server_id=3232235554 # SELECT INET_ATON('192.168.0.34') 

#[client] 
socket=/var/lib/mysql/mysql.sock 

[root@node2 mysql]#/etc/init.d/mysql start 
Starting MySQL (Percona XtraDB Cluster)........................... SUCCESS! 


今、各ノード上で私たちの値を比較します。 
mysql> select @@hostname\G show global status like 'wsrep_cluster_size' \G 
*************************** 1. row *************************** 
@@hostname: node1.localdomain 
1 row in set (0.01 sec) 

*************************** 1. row *************************** 
Variable_name: wsrep_cluster_size 
Value: 2 

mysql> select @@hostname\G show global status like 'wsrep_cluster_size' \G 
*************************** 1. row *************************** 
@@hostname: node2.localdomain 
1 row in set (0.00 sec) 

*************************** 1. row *************************** 
Variable_name: wsrep_cluster_size 
Value: 2 
1 row in set (0.18 sec) 


今、私たちは、ミックスにノード3を追加。 

ノード3は、/ etc / my.cnfに 
[mysqld] 

datadir=/var/lib/mysql 
user=mysql 

# Path to Galera library 
wsrep_provider=/usr/lib64/libgalera_smm.so 

# Cluster connection URL contains the IPs of node#1, node#2 and node#3 
# node 1 192.168.0.33 
# nod3 2 192.168.0.34 
# nod3 3 192.168.0.35 
wsrep_cluster_address=gcomm://192.168.0.33,192.168.0.34,192.168.0.35 

# In order for Galera to work correctly binlog format should be ROW 
binlog_format=ROW 

# MyISAM storage engine has only experimental support 
default_storage_engine=InnoDB 

# This changes how InnoDB auto increment locks are managed and is a requirement for Galera 
innodb_autoinc_lock_mode=2 

# Node #1 address 
wsrep_node_address=192.168.0.35 

# SST method 
# wsrep_sst_method=xtrabackup 
wsrep_sst_method=rsync # 
# wsrep_sst_method=rsync_wan # 
# wsrep_sst_method=mysqldump # SLOW 


# Cluster name 
wsrep_cluster_name=percona_cluster 

# Authentication for SST method 
wsrep_sst_auth="root:" 

# to enable debug level logging, set this to 1 
wsrep_debug=1 

# server_id 
server_id=3232235555 # SELECT INET_ATON('192.168.0.35') 

#[client] 
socket=/var/lib/mysql/mysql.sock 

[root@node3 mysql]#/etc/init.d/mysql start 
Starting MySQL (Percona XtraDB Cluster)........................... SUCCESS! 

[root@node3 mysql]# cat grastate.dat 
# GALERA saved state 
version: 2.1 
uuid: 97c457f8-f3d2-11e3-9b4e-374ebb7427e6 
seqno: -1 
cert_index: 


それでは、どのよう私たちのすべてのノードは、次のようになります。 
mysql> select @@hostname\G show global status like 'wsrep_cluster_size' \G 
*************************** 1. row *************************** 
@@hostname: node1.localdomain 
1 row in set (0.01 sec) 

*************************** 1. row *************************** 
Variable_name: wsrep_cluster_size 
Value: 3 

mysql> select @@hostname\G show global status like 'wsrep_cluster_size' \G 
*************************** 1. row *************************** 
@@hostname: node2.localdomain 
1 row in set (0.00 sec) 

*************************** 1. row *************************** 
Variable_name: wsrep_cluster_size 
Value: 3 

mysql> select @@hostname\G show global status like 'wsrep_cluster_size' \G 
*************************** 1. row *************************** 
@@hostname: node3.localdomain 
1 row in set (0.00 sec) 

*************************** 1. row *************************** 
Variable_name: wsrep_cluster_size 
Value: 3 

ノードをテスト 
だから今我々はいくつかのデータをロードし、それをテストすることができます.. 
[root@node2 ~]# wget http://downloads.mysql.com/docs/world_innodb.sql.gz 
[root@node2 ~]# gzip -d world_innodb.sql.gz 
[root@node2 ~]# mysql -e "create database world" 
[root@node2 ~]# mysql world < world_innodb.sql 


だから今すべてがロードされていること...それは、クラスタ全体のすべてのですか? 
@@hostname: node1.localdomain 
DATABASE_SCHEMA: world 
ENGINE: InnoDB 
count_tables: 3 
TOTAL_DB_GB: 0.001 

@@hostname: node2.localdomain 
DATABASE_SCHEMA: world 
ENGINE: InnoDB 
count_tables: 3 
TOTAL_DB_GB: 0.001 

@@hostname: node3.localdomain 
DATABASE_SCHEMA: world 
ENGINE: InnoDB 
count_tables: 3 
TOTAL_DB_GB: 0.001 

それが機能しているように見えます。

2014年3月27日木曜日

Perconaクラウドツール

Original post: http://anothermysqldba.blogspot.com/2014/03/percona-cloud-tools.html

だから私は本当にPerconaは手を差し伸べるとしてMySQLの懸念や問題を分析するためのソリューションを提供しているという事実のようなcloud.percona.com

これは、インストールが非常に簡単です。 最速の方法は、私が持っている、Percona YUMレポがインストールされていることです別のブログ 、必要に応じてそのことについては、だから、PT-エージェントがインストールされています。

私はそうしないと、ユーザー名とパスワード情報を設定する必要が、rootユーザー用に設定。my.cnfファイルを持っていたので、これは簡単に行われていた。

にログインcloud.percona.comまず移動してエージェントをインストールする。

# pt-agent --install
Step 1 of 12: Verify the user is root: OK
Step 2 of 12: Check Perl module dependencies: OK
Step 3 of 12: Check for crontab: OK
Step 4 of 12: Verify pt-agent is not installed: OK
Step 5 of 12: Verify the API key:
Enter your API key: <API KEY HERE provided on the percona website>
Step 5 of 12: Verify the API key: OK
Step 6 of 12: Connect to MySQL: OK
Step 7 of 12: Check if MySQL is a slave: NO
Step 8 of 12: Create a MySQL user for the agent: OK
Step 9 of 12: Initialize /etc/percona/agent/my.cnf: OK
Step 10 of 12: Initialize /root/.pt-agent.conf: OK
Step 11 of 12: Create the agent: OK
Step 12 of 12: Run the agent: pt-agent has daemonized and is running as PID 16333:

--lib /var/lib/pt-agent
--log /var/log/pt-agent.log
--pid /var/run/pt-agent.pid

These values can change if a different configuration is received.
OK
INSTALLATION COMPLETE
そのような単純な..それからちょうどPerconaのウェブサイトに再度ログインhttps://cloud.percona.comシステムあたりのエージェントの設定を有効にして調整します。

データの最初の量を収集するために、それを約15分を与え、その後、すべてのあなたの指先でデータに設定されている。 あなただけのウェブサイト上で提供される「クエリ分析」ボタンをクリックします。

のMySQLブランチによっては、別の分析を取得し、明らかにPerconaは彼らのツールを使用してPerconaサーバー5.5.34以降を使用することを好むだろうが、それはすべてのMySQLで動作します。

あなたのエージェントいったん戻っPerconaにデータを送信された、クエリのプロファイルを介して提供クエリーカウントあたりのサーバーの概要のグラフ、照会時間、ロック時間、送信された行、調べ行、クエリの長​​さだけでなく、情報を表示することができます。

「ファイルソートはファイルソートがディスクにフル参加フルスキャンクエリキャッシュのヒット一時テーブルディスク上の一時テーブルのみ使用できますPerconaサーバー。 " - cloud.percona.com

2014年1月4日土曜日

見過ごされて行くハードワーク....

Originally posted: http://anothermysqldba.blogspot.com/2014/01/hard-work-that-goes-unnoticed.html

今日は瞬間を取り、私のLinuxディストリビューションのいずれかを更新した。 この分布では、私はPercona 5.6は、MySQLデータベースとしてインストールされているために起こる。 私はあなたのお好みに設定できますか前に言及しているのYumリポジトリを経由してMySQLを

ここに私のポイントは、しかしである、どのように我々は、これまで彼らが行うすべての作業のためにこれらの人々に感謝しますか?

これらのリポジトリの多くは、企業が実行され、これらの人々は、彼らが何のために支払いを受ける。 それは彼らのディストリビューションに利用可能になるまで、まだ、地域社会(のDebian / Ubuntuのを含む)は、Linuxの調査の一般的な観察/質問を通じて、人々の大半はアップグレードされません。 私はセキュリティとバグ修正の上に滞在したい方に起こるので、私はyumを持つリポジトリできるだけ頻繁に元からアップデートを。

私のポイントは、多くの作業を配布するため、これらのファイルのパッケージングになり、ほとんどの部分は、それはかなり報われない仕事のように見え、ある。 あなた自身を掘ると依存関係を見つけなければならなかったとき、私は、tarとgzipの古い(古いが、古いではない)日々を思い出す。 - 。/ configureを.. いや、ダウンロードを行って、それをインストールして何か他のものを必要とし、再試行してください.....

私は前にいくつかの時間がかかったでしょうしばらくすると25種類のパッケージを、アップグレードした。 ヤ ムやapt取得が遠く新品であり、私はここで、古いタイマーのような音が、私はちょうどそれが私たちのLinuxの経験のすべてを作るために舞台裏で働く すべての人々のおかげで、と言う、おろかはいいかもしれないと思った関連MySQLは、簡単かつスムーズにインストールされます。

私はOracleが利用可能になりました5.6のパッケージを持っていることを指摘します。


私は私のことを思い出して、以前の投稿は、それがされていなかったか述べた。

2013年9月25日水曜日

MySQLをYUMレポ(Oracleの、MariaDBとPercona)

Original post: http://anothermysqldba.blogspot.com/2013/09/mysql-yum-repo-oracles-mariadb-and.html

例えばMySQLの最新のRPMをダウンロードの上、関連するソフトウェアをインストールする際に多くの人々は、今日のyumパッケージマネージャに固執することを好む。

あなたがベンダーからRPMSをダウンロードして、yumを(yumをインストール*。rpmの)を使ってインストールできますが、あなたはまた、MySQLのパッケージベンダーから直接引っ張ってあなたのyumのリポジトリを更新することができます。 この記事の時点では、あなただけのMySQL 5.6 GAがリリースされたにもかかわらず、MySQLを5.5.13にあなたを取得します2013年2月5 Oracleのレポを介して。 今、MariaDBはMariaDB-5.5.33をリリースしたことを、私はOracleが上の動きを取得し、それらの公共レポを更新します望んでいるだろう。

かかわらず、あなたは何を選ぶかの。 ここでは、あなたが好む何にアクセスできるようにベンダーのレポを設定する方法である。

すべてのインスタンスは、フォローして設定するのは簡単です、私が記載しているページがあります。 私が先に行くと同様の例を与える。

私は、これらの例については、CentOSの6 64bit版を使用します。

すべてのケースでは、rootとしてyum.repos.dディレクトリから働くことになります。
CDの/ etc / yum.repos.d


http://public-yum.oracle.com
wgetのhttps://public-yum.oracle.com/public-yum-ol6.repo
#viの公開YUM-ol6.repo
次を見つけて、0から1に有効に編集し、ファイルを保存します。




[ol6_MySQL]
オラクルのLinux 6の名前= MySQLの($ basearch)
BASEURL = http://public-yum.oracle.com/repo/OracleLinux/OL6/MySQL/ $ basearch /
gpgkey =ファイル:/ /の/ etc / PKI / RPM-GPG / RPM-GPG-KEY-オラクル
gpgcheck = 1
有効= 1

yum list | grep MySQL
mysql.x86_64 5.5.34-1.el6 ol6_MySQL
mysql-devel.x86_64 5.5.34-1.el6 ol6_MySQL
mysql-embedded.x86_64 5.5.34-1.el6 ol6_MySQL
mysql-embedded-devel.x86_64 5.5.34-1.el6 ol6_MySQL
mysql-libs.x86_64 5.5.34-1.el6 ol6_MySQL
mysql-libs-compat.x86_64 5.5.34-1.el6 ol6_MySQL
mysql-server.x86_64 5.5.34-1.el6 ol6_MySQL
mysql-test.x86_64 5.5.34-1.el6 ol6_MySQL


https://downloads.mariadb.org/mariadb/repositories/
viのMariaDB.repo






MariaDBはあなたに5.5 OR 10を選択するための選択肢を提供していません、私は、この例では5.5を使用していました。


# MariaDB 5.5 CentOS repository list - created 2013-09-24 21:59 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1



MariaDB-Galera-server.x86_64 5.5.32-1 mariadb
MariaDB-client.x86_64 5.5.33a-1 mariadb
MariaDB-common.x86_64 5.5.33a-1 mariadb
MariaDB-compat.x86_64 5.5.33a-1 mariadb
MariaDB-devel.x86_64 5.5.33a-1 mariadb
MariaDB-server.x86_64 5.5.33a-1 mariadb
MariaDB-shared.x86_64 5.5.33a-1 mariadb
MariaDB-test.x86_64 5.5.33a-1 mariadb
galera.x86_64 23.2.6-1.rhel6 mariadb



http://www.percona.com/doc/percona-server/5.5/installation/yum_repo.html
viのPercona.repo

[percona]
name = CentOS $releasever - Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
gpgcheck = 1


percona-toolkit.noarch 2.2.4-1 @/percona-toolkit-2.2.4-1.noarch
percona-xtrabackup.x86_64 2.1.3-608.rhel6 @/percona-xtrabackup-2.1.3-608.rhel6.x86_64
Percona-SQL-50-debuginfo.x86_64 5.0.92-b23.89.rhel6 percona
Percona-SQL-client-50.x86_64 5.0.92-b23.89.rhel6 percona
Percona-SQL-devel-50.x86_64 5.0.92-b23.89.rhel6 percona
Percona-SQL-server-50.x86_64 5.0.92-b23.89.rhel6 percona
Percona-SQL-shared-50.x86_64 5.0.92-b23.89.rhel6 percona
Percona-SQL-shared-compat.x86_64 5.0.92-b23.89.rhel6 percona
Percona-SQL-test-50.x86_64 5.0.92-b23.89.rhel6 percona
Percona-Server-51-debuginfo.x86_64 5.1.71-rel14.9.589.rhel6 percona
Percona-Server-55-debuginfo.x86_64 5.5.33-rel31.1.566.rhel6 percona
Percona-Server-56-debuginfo.x86_64 5.6.13-rc60.6.427.rhel6 percona
Percona-Server-client-51.x86_64 5.1.71-rel14.9.589.rhel6 percona
Percona-Server-client-55.x86_64 5.5.33-rel31.1.566.rhel6 percona
Percona-Server-client-56.x86_64 5.6.13-rc60.6.427.rhel6 percona
Percona-Server-devel-51.x86_64 5.1.71-rel14.9.589.rhel6 percona
Percona-Server-devel-55.x86_64 5.5.33-rel31.1.566.rhel6 percona
Percona-Server-devel-56.x86_64 5.6.13-rc60.6.427.rhel6 percona
Percona-Server-server-51.x86_64 5.1.71-rel14.9.589.rhel6 percona
Percona-Server-server-55.x86_64 5.5.33-rel31.1.566.rhel6 percona
Percona-Server-server-56.x86_64 5.6.13-rc60.6.427.rhel6 percona
Percona-Server-shared-51.x86_64 5.1.71-rel14.9.589.rhel6 percona
Percona-Server-shared-55.x86_64 5.5.33-rel31.1.566.rhel6 percona
Percona-Server-shared-56.x86_64 5.6.13-rc60.6.427.rhel6 percona
Percona-Server-shared-compat.x86_64 5.5.33-rel31.1.566.rhel6 percona
Percona-Server-shared-compat-51.x86_64 5.1.71-rel14.9.589.rhel6 percona
Percona-Server-test-51.x86_64 5.1.71-rel14.9.589.rhel6 percona
Percona-Server-test-55.x86_64 5.5.33-rel31.1.566.rhel6 percona
Percona-Server-test-56.x86_64 5.6.13-rc60.6.427.rhel6 percona
Percona-XtraDB-Cluster-client.x86_64 1:5.5.33-23.7.6.495.rhel6 percona
Percona-XtraDB-Cluster-debuginfo.x86_64 1:5.5.33-23.7.6.495.rhel6 percona
Percona-XtraDB-Cluster-devel.x86_64 1:5.5.33-23.7.6.495.rhel6 percona
Percona-XtraDB-Cluster-galera.x86_64 2.7-1.157.rhel6 percona
2.7-1.157.rhel6 percona
Percona-XtraDB-Cluster-server.x86_64 1:5.5.33-23.7.6.495.rhel6 percona
Percona-XtraDB-Cluster-shared.x86_64 1:5.5.33-23.7.6.495.rhel6 percona
Percona-XtraDB-Cluster-test.x86_64 1:5.5.33-23.7.6.495.rhel6 percona
jemalloc.x86_64 3.3.1-1.el6 percona
jemalloc-devel.x86_64 3.3.1-1.el6 percona
percona-cacti-templates.noarch 1.0.4-1 percona
percona-nagios-plugins.noarch 1.0.4-1 percona
percona-playback.x86_64 0.6-2.el6 percona
percona-playback-debuginfo.x86_64 0.6-2.el6 percona
percona-playback-devel.x86_64 0.6-2.el6 percona
percona-xtrabackup.x86_64 2.1.5-680.rhel6 percona
percona-xtrabackup-20.x86_64 2.0.8-587.rhel6 percona
percona-xtrabackup-20-debuginfo.x86_64 2.0.8-587.rhel6 percona
percona-xtrabackup-20-test.x86_64 2.0.8-587.rhel6 percona
percona-xtrabackup-test.x86_64 2.1.5-680.rhel6 percona
qpress.x86_64 11-1.el6 percona
qpress-debuginfo.x86_64 11-1.el6 percona

 
うまくいけば、これは、すべての瞬間にあなたの標準リポジトリにあるかもしれないものを超えて更新され得ることができるようにするのに役立ちます。