プロジェクトのアドレスと手順: https://gitee.com/noovertime/mysqlmail 1. 背景:当初の目的は、サーバーの使用率が高いプロセスを監視し、それを電子メールで送信するスクリプトを作成することでした。その後、突然、この方法を使用してデータベースをバックアップできることに気付き、作業を開始しました。 2. デザインのアイデア:シェル スクリプトを作成し、Linux メール ツールを呼び出し、mysqldump を使用してデータベースの sql ファイルを保存し、メール ツールを通じて添付ファイルに追加し、最後にメールボックスに送信します。 3. 起動スクリプトを書くまず、起動スクリプトを記述します。将来のパーソナライズされた構成を容易にするために、スクリプト内のすべての変数を application.yml ファイルに抽出します。ファイルは次のとおりです。 RUNTIME: 084900 ##起動時間。コンテナのタイムゾーンの問題により、現在の時刻から8時間を引いた値が必要です。HOST: 172.17.0.3 ##データベースのIPアドレス USER: root ##データベースのユーザー PASSWORD: 123456 ##データベースのパスワード DATABASE: solo ##データベース名 TARGETMAIL: [email protected] ##送信先のメールアドレス 次に、シェルスクリプトを書いてみます。ロジックも非常にシンプルです。現在時刻が起動時刻と同じになったら、sendmail関数を呼び出してメールを送信します。 #!/bin/bash #著者: チェンテン RUNTIME=$(cat ./application.yml | grep RUNTIME| awk '{print $2}') HOST=$(cat ./application.yml | grep HOST| awk '{print $2}') USER=$(cat ./application.yml | grep USER| awk '{print $2}') PASSWORD=$(cat ./application.yml | grep PASSWORD| awk '{print $2}') DATABASE=$(cat ./application.yml | grep DATABASE| awk '{print $2}') TARGETMAIL=$(cat ./application.yml | grep TARGETMAIL| awk '{print $2}') 関数sendmail(){ mysqldump -h$HOST -u$USER -p$PASSWORD --complete-insert --skip-add-drop-table --hex-blob $DATABASE > $DATABASE.sql echo -e "mysqlbak_$CURRENT_TIME" |mail -s "mysqlbak_$CURRENT_TIME" -a $DATABASE.sql $TARGETMAIL 睡眠1 } 真実である する CURRENT_TIME=$(日付 +%H%M%S) [ $CURRENT_TIME = $RUNTIME ]の場合; echo "bak mysql データベースを開始しています" 送信メール 続く それ以外 $CURRENT_TIME をエコーする 睡眠1 フィ 終わり 4. イメージを構築する最終的にはk8sプラットフォームに配置するため、イメージを構築する必要があります。イメージを構築する前に、application.yml demo.sh Dockerfileを同じディレクトリに置いてください。 Centosより mkdir /app && yum install -y mysql.x86_64 sendmail mailx libreport-plugin-mailx を実行します。 ワークディレクトリ /app demo.sh をコピーします。 application.yml をコピーします。 コマンド ["/bin/sh","demo.sh"] docker buildコマンドを使用してイメージをビルドします。最後のドットを忘れずに付けてください。 ビルドは -t mysqlmail-bak:1.0.1 です。 5. サイドカーコンテナの追加サイドカー コンテナ: サイドカー コンテナは、メイン コンテナと同じポッドで実行され、ビジネス コンテナを強化し、ネットワーク スペースを共有するコンテナであるため、127.0.0.1:3306 を使用してメイン コンテナのデータベースに接続できます。 5.1 設定ファイルを作成するデバッグを容易にするために、シェル スクリプトも内部にマウントしました。 APIバージョン: v1 種類: ConfigMap メタデータ: 名前: mysqlmail-conf 名前空間: ソロ データ: アプリケーション.yml: | 実行時間: 105800 ホスト: 127.0.0.1 ユーザー: ルート パスワード: 123456 データベース: ソロ ターゲットメール: [email protected] --- APIバージョン: v1 種類: ConfigMap メタデータ: 名前: mysqlmail-shell 名前空間: ソロ データ: デモ: | #!/bin/bash #著者: チェンテン RUNTIME=$(cat ./application.yml | grep RUNTIME| awk '{print $2}') HOST=$(cat ./application.yml | grep HOST| awk '{print $2}') USER=$(cat ./application.yml | grep USER| awk '{print $2}') PASSWORD=$(cat ./application.yml | grep PASSWORD| awk '{print $2}') DATABASE=$(cat ./application.yml | grep DATABASE| awk '{print $2}') TARGETMAIL=$(cat ./application.yml | grep TARGETMAIL| awk '{print $2}') 関数sendmail(){ mysqldump -h$HOST -u$USER -p$PASSWORD --complete-insert --skip-add-drop-table --column-statistics=0 --hex-blob $DATABASE > $DATABASE.sql echo -e "mysqlbak_$CURRENT_TIME" |mail -s "mysqlbak_$CURRENT_TIME" -a $DATABASE.sql $TARGETMAIL 睡眠1 } 真実である する CURRENT_TIME=$(日付 +%H%M%S) [ $CURRENT_TIME = $RUNTIME ]の場合; echo "bak mysql データベースを開始しています" 送信メール 続く それ以外 $CURRENT_TIME をエコーする 睡眠1 フィ 終わり 5.2 ステートフルサービスデプロイメントファイルを作成するデプロイファイルは、前回の記事で作成した mysql ステートフル サービスの yaml ファイルを使用します。興味があれば、前回の移行記事をお読みください。 APIバージョン: アプリ/v1 種類: ステートフルセット メタデータ: 名前: mysql 名前空間: ソロ 仕様: サービス名: mysql-service セレクタ: 一致ラベル: アプリ:mysql レプリカ: 1 テンプレート: メタデータ: ラベル: アプリ:mysql 仕様: コンテナ: - 名前: mysqlmail-bak イメージプルポリシー: IfNotPresent イメージ: mysqlmail-bak:1.0.1 ボリュームマウント: - 名前: mysqlmail-conf マウントパス: /app/application.yml サブパス: application.yml - 名前: mysqlmail-shell マウントパス: /app/demo.sh サブパス: demo.sh - 名前: mysql-pod イメージプルポリシー: IfNotPresent イメージ:mysql:5.7 環境: - 名前: MYSQL_ROOT_PASSWORD 値: "123456" ポート: - コンテナポート: 3306 名前: msyql-listin ボリュームマウント: - 名前: mysql-data マウントパス: /var/lib/mysql サブパス: mysql-data - 名前: mysql-conf マウントパス: /etc/mysql/conf.d/my.cnf サブパス: my.cnf ボリューム: - 名前: mysql-data ホストパス: パス: /data/mysql - 名前: mysql-conf 構成マップ: 名前: mysql-conf - 名前: mysqlmail-conf 構成マップ: 名前: mysqlmail-conf - 名前: mysqlmail-shell 構成マップ: 名前: mysqlmail-shell --- APIバージョン: v1 種類: サービス メタデータ: 名前: mysql-service 名前空間: ソロ ラベル: アプリ:mysql 仕様: ポート: - ターゲットポート: 3306 ポート: 3306 クラスターIP: なし セレクタ: アプリ:mysql 6. テスト上記で設定した時間は RUNTIME: 105800 で、上海タイムゾーンでは 18:58 です。効果を確認してログを確認してみましょう。 [root@VM-24-15-centos solo]# kubectl logs -n solo mysql-0 -c mysqlmail-bak | grep mysql -C 5 105755 105756 105757 105758 105759 MySQLデータベースの再起動 mysqldump: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。 105801 105802 ログから、メールが正常に送信されたことがわかります。メールボックスを確認すると、メールも成功していました。これで私たちの実験は完璧に完了しました! Docker コンテナでデータベースのバックアップをスケジュールし、指定したメールボックスに送信する方法については、これで終わりです。Docker でのデータベースのスケジュール バックアップの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: HTML ページで JSON データを表示およびフォーマットする方法
>>: JavaScript におけるブラウザ互換性の問題について簡単に説明します
1. シャドウソックスをインストールするsudo apt-get install python-pi...
Nginx ログは、ユーザーの住所の場所や行動プロファイルなどを分析するために使用できます。Elas...
この記事では、CSS ワープ シャドウの実装コードを紹介し、皆さんと共有します。詳細は以下の通りです...
解決:リンクのターゲット属性値をターゲット フレームワーク名と同じに設定するだけです。具体的な手順:...
この記事の例では、WeChatアプレットのビデオプレーヤーコンポーネントの具体的なコードを参考までに...
Docker-ComposeとはCompose プロジェクトは、以前の fig プロジェクトから派生...
最近、練習プロジェクトをしていたときにスライダーを使う必要があったので、調べてみました。まず、水平ス...
目次1. JS オブジェクトDOM –1、機能–2、テスト3. jQuery –1. 概要–2、使用...
NginxのGeoモジュールの紹介geo ディレクティブは、ngx_http_geo_module ...
順序なしリストでは、順序なしリストのシンボルは各リストの前に表示されるドットです。順序付きリスト o...
ドライバーモジュールに渡すパラメータ名、タイプ、権限を宣言します。 module_param(変数名...
この記事では、MySQL 8.0.11 MSIバージョンのインストールと設定のチュートリアルを参考ま...
1. MySQL の権限の概要MySQL には、権限を制御する 4 つのテーブルがあります。user...
多くの場合、Web ページ開発を学ぶときに最初に印象に残るのは、html または htm サフィック...
ご存知のとおり、私たちが毎日閲覧する Web ページ、Web サイト、または Web ページには独自...