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

推薦する

MySQLサーバーは--read-onlyオプションで実行されているため、このステートメントを実行できません

会議中に同僚から開発ライブラリを書き込めないとの報告を受けました。エラー メッセージは次のとおりでし...

HTMLウェブページの基本概念の簡単な分析

ウェブページとは何ですか? HTML ドキュメントがブラウザカーネルによってレンダリングされた後に表...

MySQL ルートパスワードエラー番号 1045 の解決方法

MySQLサービスを停止するWindowsでは、マイコンピュータを右クリック--管理--サービスと...

Linux での MySQL のインストールに関する詳細なチュートリアル

1. MySQLサービスをシャットダウンする# service mysqld stop 2. rpm...

React Nativeのカスタムルーティング管理に関する深い理解

目次1. カスタムルーティング2. タブナビゲーション3. データの返却要約する1. カスタムルーテ...

インターネットウェブデザインにおけるバイオニックデザインの簡単な紹介

バイオニックデザインといえば、飛行機の発明、ドバイのブルジュ・アル・アラブ、平泳ぎなどを思い浮かべる...

webpackが静的リソースキャッシュを実装する方法

目次導入複数の異なるハッシュを区別するハッシュチャンクハッシュコンテンツハッシュjs キャッシュの実...

Telnet は Alpine イメージの busybox-extras に移動されました

Alpine イメージの telnet はバージョン 3.7 以降、busybox-extras パ...

CentOS7 デプロイメント Flask (Apache、mod_wsgi、Python36、venv)

1. Apacheをインストールする # yum インストール -y httpd httpd-de...

HTMLファイル内の中国語の文字化けとブラウザでの表示の問題

今日も私のページが文字化けしていたので、インターネットで関連する問題を検索しました。この方法はかなり...

Vue ベースの Excel 解析とエクスポートの詳細な説明

目次序文基本的な紹介コードの実装基本構造アップロード分析Excel にエクスポート基本構造Excel...

Vue バックグラウンドでステータス ラベルをエレガントに記述する例

目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...

...

Docker コマンドラインの完全ガイド (知っておくべき 18 のこと)

序文Docker イメージは Dockerfile といくつかの必要な依存関係で構成され、Docke...

Vueフォームバインディングとコンポーネントの詳細な説明

目次1. 双方向データバインディングとは1. データの双方向バインディングを実装する必要があるのはな...