Gearman + MySQL による永続化操作例

Gearman + MySQL による永続化操作例

この記事では、gearman+mysql メソッドを使用して永続化操作を実装します。ご参考までに、詳細は以下の通りです。

1. なぜ粘り強さが必要なのか?

gearman のジョブ サーバーの作業キューはメモリに保存されます。未処理のタスクがある状態でサーバーが再起動またはクラッシュすると、これらのタスクは失われます。
永続ストレージ キューを使用すると、バックグラウンド タスクを追加し、それを外部の永続キュー (MySQL データベースなど) に保存できます。

2. ギアマンの永続性に関する記事については、公式ドキュメントを読むことをお勧めします。

http://gearman.org/manual/job_server/#persistent_queues

3. 永続化のためのデータベースとテーブルを作成する

データベース gearman を作成します。

テーブル `gearman_queue` を作成します (
`unique_key` varchar(64) NOT NULL,
`function_name` varchar(255) NOT NULL,
`priority` int(11) NOT NULL,
`data` longblob NULLではありません。
`when_to_run` int(11)、
主キー (`unique_key`)
)ENGINE=InnoDB デフォルト文字セット=utf8;

4. gearmanユーザーを作成する

> ユーザー 'gearman'@'%' を作成します (ID: '123456')。
> gearman.* のすべての権限を 'gearman'@'%' に付与します。
> 権限をフラッシュします。

5. gearmandを起動するときに永続パラメータを指定する

> gearmand -q libdrizzle \
--libdrizzle-ホスト=192.168.1.100 \
--libdrizzle-port=3306 \
--libdrizzle-user=gearman \
--libdrizzle-パスワード=123456 \
--libdrizzle-db=ギアマン\
--libdrizzle-table=gearman_queue \
--libdrizzle-mysql

または以下のように使用する

> ギアマンド -q mysql \
--mysql-ホスト=192.168.1.100 \
--mysql-ポート=3306 \
--mysql-user=gearman \
--mysqlパスワード=123456 \
--mysql-db=ギアマン\
--mysql-テーブル=gearman_queue

以下の問題が発生した場合、gearman をコンパイルおよびインストールするときに libdrizzle をインストールしなかったことを意味します。

gearmand: 認識されないオプション '--libdrizzle-host=192.168.1.100'

次のURLからlibdrizzleをダウンロードしてください

https://launchpad.net/libdrizzle/+ダウンロード

例: libdrizzle-5.1.4.tar.gz

libdrizzleをインストールする

> tar xf libdrizzle-5.1.4.tar.gz
> libdrizzle-5.1.4 をインストールします

ここで --prefix を指定しないことをお勧めします。他のディレクトリを指定すると、gearman は下記のコンパイル時に関連ヘッダーファイルやリンクライブラリを見つけられず、手動でソフトリンクを追加する必要があるためです。

> ./configure
> 作成 && インストール

次に、gearmanを再コンパイルしてインストールします

> tar xf gearmand-1.1.12.tar.gz 
>cd ギアマンド-1.1.12

configureのパラメータがわからない場合は、次のコマンドを使用して確認できます。

> ./configure --help

gearmanがmysqlの永続性をサポートするには、ここでmysql-develをインストールする必要があります。

> yum インストール mysql-server mysql-devel

先ほど gearman をインストールしたので --prefix を指定していなかったので、ここでは指定しませんでした。必要な場合は自分で指定してください。

> ./configure
> 作成 && インストール

設定が完了した後に表示される最後のメッセージ

* LIBS: 
* LDFLAGS フラグ: 
* アサーションが有効: いいえ
* デバッグ有効: いいえ
* 失敗時の警告: なし
* libsqlite3でビルドする
* libdrizzleでビルドする
* libmemcached を使用したビルドが見つかりません
* libpqでビルドする
※東京オフィスビル1号館が入るビルです。
* libmysql でビルドする
* SSL 有効: いいえ
* cyassl が見つかりません: いいえ
* openssl が見つかりました: はい
* -j: 2 を実行します
* VCSチェックアウト: いいえ
* スフィンクスビルド: :

最後に、libdrizzleとlibmysqlがyesと表示されているのがわかります。

インストールされているか確認する

> ギアマンド --help

次のエラーが発生した場合

gearmand: 共有ライブラリのロード中にエラーが発生しました: libdrizzle.so.9: 共有オブジェクトファイルを開けません: そのようなファイルまたはディレクトリはありません

/etc/ld.so.confを開いて変更してください

> vi /etc/ld.so.conf

次の文を追加してください

ローカル

ldconfigを実行する

>ldconfig

上記の gearmand --help を再度実行します。次のメッセージが表示されれば、インストールは成功です。

組み込み:

libdrizzle:
--libdrizzle-host arg (=localhost) サーバーのホスト。
--libdrizzle-port arg (=3306) サーバーのポート。(デフォルトでは Drizzle)
--libdrizzle-uds arg サーバーの Unix ドメイン ソケット。
--libdrizzle-user arg (=root) 認証用のユーザー名。
--libdrizzle-password arg 認証用のパスワード。
--libdrizzle-db arg (=gearman) 使用するデータベース。
--libdrizzle-table arg (=queue) 使用するテーブル。
--libdrizzle-mysql MySQL プロトコルを使用します。

マイグレーション:
--mysql-host arg (=localhost) MySQL ホスト。
--mysql-port arg (=3306) サーバーのポート。(デフォルトでは 3306)
--mysql-user arg MySQL ユーザー。
--mysql-password arg MySQL ユーザーのパスワード。
--mysql-db arg MySQL データベース。
--mysql-table arg (=gearman_queue) MySQL テーブル名。

libdrizzle経由でgearmandを起動する際に以下の問題が発生する場合

gearmand: キューの初期化中にエラーが発生しました: libdrizzle

そしてログの記録は次のようになります

エラー 2017-02-22 07:51:02.536574 [ main ] libdrizzle の初期化に失敗しました: 
初期化(QUEUE_ERROR) -> libgearman-server/queue.cc:246

MySQL のバージョンが高すぎるためか、他の理由かはわかりません。試してみてうまくいかない場合は、別の方法を試してください。私は他の方法をテストして成功しました。

バックグラウンドジョブを作成する

> ギアマン -f テスト -b 123456

次のようにデータベースを表示します。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL インデックス操作スキルの概要」、「MySQL 共通関数の概要」、「MySQL ログ操作スキルの概要」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキルの概要」、および「MySQL データベース ロック関連スキルの概要」。

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • Docker を使用した MySQL のデプロイの詳細説明 (データ永続化)
  • MySQL での Java 絵文字の永続化の詳細な説明
  • MySQL 8 の新機能: 永続的なグローバル変数を変更する方法
  • MySQL 8 の新機能: 自動増分主キーの永続性に関する詳細な説明
  • MySQL 8.0 の統計が不正確である理由
  • MySQL統計の概要
  • MySQL 永続統計の詳細な説明

<<:  Windows 10 で Ubuntu 20.04 LTS をアップデートする方法

>>:  相同性とクロスドメイン、jsonp(関数カプセル化)、CORS原則の詳細な分析

推薦する

CSS 線形グラデーション凹型長方形遷移効果の実装

この記事では、線形グラデーションの凹四角形の遷移効果の難しさやアイデアについて説明します。主に、凹四...

Linuxのlocateコマンドの使い方

01. コマンドの概要実際には、locate コマンドは find -name の別の書き方ですが、...

td セルを結合した場合の td 幅の問題

以下の例では、名前が入っている td の幅が 60px のとき、2 行目の文字数が少ない場合は正常に...

JSONデータをHTMLで表示する方法

背景:場合によっては、json データをページに直接表示する必要があります (たとえば、インターフェ...

InnoDBのインデックスページ構造、挿入バッファ、適応ハッシュインデックスについての簡単な説明

InnoDB インデックスの物理構造すべての InnoDB インデックスは Btree インデックス...

mysql 5.7.17 winx64.zip インストールと設定方法のグラフィックチュートリアル

はじめに: Windows 10 を再インストールし、同時にファイルを整理しました。しかし、MySQ...

CSSはラジオをクリックして2つの画像スタイルを切り替えますが、複数のラジオのうち1つだけをチェックできます。

クリックされたボタンには赤い画像スタイルを実装し、選択されていない他のボタンには灰色の画像スタイルを...

Linuxカーネルマクロcontainer_ofの詳細な分析

1. 前述の通り数年前、Linux ドライバーのコードを読んでいたときにこのマクロを見ました。長い間...

CSS を使用して三角形を実装する一般的な手法 (複数の方法)

面接の経験によっては、CSS に関する質問がよく見られ、CSS を使用して三角形を描画する方法につい...

Docker コンテナのマウントディレクトリ操作の表示

Dockerコンテナのマウントディレクトリ情報のみを表示する docker 検査 --format ...

フロートとBFCをクリアするCSSメソッド

イギリスBFC: ブロック書式設定コンテキストBFCレイアウトルール内箱は縦方向に次々に配置されます...

Mac で Docker を使用して Oracle をデプロイする方法

Mac で Docker を使用して Oracle をデプロイする方法まずdockerをインストール...

Idea で Docker を使用して SpringBoot プロジェクトをデプロイする詳細な手順

序文プロジェクト要件: Dockeridea に Docker プラグインをインストールし、Dock...

画像をラベルとして使用すると、IE では for 属性が機能しません。

例えば:コードをコピーコードは次のとおりです。 <input type="check...

Flutterを使用して移動可能なスタックウィジェット機能を作成する

この投稿では、キャンバスとドラッグ可能なノード インターフェースを使用するデスクトップおよび Web...