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

推薦する

.htaccess を使用して特定の IP からの Web サイトへのアクセスを禁止する方法

序文コストを考慮して、ほとんどのウェブマスターは、多数の小規模なウェブサイト用にサーバーを個別に購入...

MySQL のダウンロードとインストールの詳細グラフィックチュートリアル

1. MySQLデータベースをダウンロードするには、公式Webサイトにアクセスしてください:http...

Reactを使用して画像認識アプリを実装する方法

まずは効果の写真をお見せしましょう。 個人的には効果は問題ないと思います。アプリが写真を学習する時間...

CSS はコンテナ レベル (div...) タグを 1 つの位置 (ページの右端) に固定します。

コードは次のようになります。 。プロセス{ 境界線:1px 実線 #B7B7B8; 背景:#F8F8...

Docker 構成コンテナの場所とヒントのまとめ

Docker の使用に関するヒント1. 停止したDockerコンテナをすべてクリーンアップする停止し...

MySQL 4.1/5.0/5.1/5.5/5.6の主な違い

バージョン間でのコマンドの違い: innodb ステータスを表示\G mysql-5.1 エンジン ...

Vueはミックスインを使用してコンポーネントを最適化します

目次ミックスインの実装フック関数のマージプロジェクト実践伸ばす要約するVue は mixins AP...

flex-grow、flex-shrink、flex-basis、9グリッドレイアウトを理解する

1. flex-grow、flex-shrink、flex-basis プロパティflex-grow...

Hadoop におけるネームノードとセカンダリネームノードの動作メカニズムの説明

1) プロセス 2) FSImageと編集NodeNode は HDFS の頭脳です。ファイルシステ...

Nginx リバースプロキシの例の詳細な説明

1. リバースプロキシの例1 1. 効果を達成する(1)ブラウザを開き、www.123.comと入力...

CSS3は背景画像にマスクを設定し、マスクスタイルの継承の問題を解決します。

多くの場合、透明度の設定やぼかしなど、写真の背景を加工する必要があります。 ただし、背景画像が配置さ...

フロントエンドのパフォーマンス最適化を学ぶ準備として、HTMLページのレンダリングプロセスを理解する

現在、フロントエンドのパフォーマンス最適化について学んでいます。適切な解決策を見つけ、パフォーマンス...

JavaScript のプロトタイプとプロトタイプチェーンの詳細な説明

目次プロトタイプチェーン図プロトタイピングに必須の知識プロトタイププロパティ(プロトタイプを表示) ...

JavaScript が Taobao の虫眼鏡効果を模倣

この記事では、淘宝虫眼鏡効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...