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原則の詳細な分析

推薦する

IDEA の Docker プラグインを介して SpringBoot プロジェクトをデプロイするプロセスの詳細な説明

1. Dockerリモート接続ポートを設定するサーバー上の docker.service ファイルを...

Centos7.x での Nginx のインストール、SSL 設定、一般的なコマンドの詳細な説明

1. インストールyumを使用してインストールする ##yum nginx を自動的にインストールす...

docker公式mysqlイメージのカスタム構成の詳細な説明

インストール時間を節約するために、公式の mysql docker イメージを使用して mysql ...

一意の注文番号を生成するためのMySQLの高同時実行方法

序文このブログ記事が公開された後、何人かの友人からSQL Serverバージョンがあるかどうか尋ねら...

MySQL 文字セットの表示と変更のチュートリアル

1. 文字セットを確認する1. MYSQLデータベースサーバーとデータベースの文字セットを確認する方...

Linux での Redis の永続性、マスター スレーブ同期、Sentinel の詳細な説明

1.0 Redis の永続性Redis はメモリ内データベースです。サーバー プロセスが終了すると、...

Ubuntu 16.04 mysql5.7.17 リモートポート 3306 を開く

MySQLへのリモートアクセスを有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...

サイバーパンクスタイルのボタンを実現するためのHTML+CSS

まず効果を見てみましょう: 序文:このアイデアは、Bilibili のアップロード者 Steven ...

MySQL の日付フォーマットと複雑な日付範囲クエリ

目次序文クエリの使用シナリオ例時間間隔クエリクエリ日付と今日の時間の比較データ一般的なサイクルタイム...

HTML テーブル マークアップ チュートリアル (48): CSS で変更されたテーブル

<br />では、CSS 構文を巧みに使用してテーブルを美しくする方法を見てみましょう。...

デザイン理論: コンテンツプレゼンテーションのための 10 のヒント

<br /> テキスト、記号、リンクの3つの側面に焦点を当て、主に中国語で、個人的な執筆...

vscode dockerプラグインのdocker.socket権限問題を解決する

解決策: システム内のすべての .vscode 関連プロセスを終了します (または、remote-s...

ハンドラー PageHandlerFactory-Integrated のモジュール リストに不正なモジュール ManagedPipelineHandler が含まれています

Web プロジェクトを開発する場合、IIS をインストールする必要があります。IIS がインストール...

CSS3 フィルターを使用して PNG 画像の色を変更するサンプル コード

この方法は、CSS3のdrop-shadow filterを使用して、png画像の不透明部分に任意の...

Linux のさまざまなロックメカニズムの使用方法と違いについて詳しく説明します

序文:この知識を理解する必要がある人は、すでにプロセス間通信とスレッド間通信の基本的な理解を持ってい...