Linuxでmysqlの定期的なコールドバックアップを実装するためにmysqldump+expect+crontabを使用するアイデアの詳細な説明

Linuxでmysqlの定期的なコールドバックアップを実装するためにmysqldump+expect+crontabを使用するアイデアの詳細な説明

1. 遭遇した問題

私たちは皆、mysqldump を使用した後、mysql パスワードを手動で入力する必要があることを知っています。そのため、定期的なバックアップを実現するために crontab で直接 mysqldump を使用することはできません。実際、expect スクリプトを使用してパスワードを自動的に入力することで、真の定期バックアップを実現できます。 expect が何なのか分からない場合は、まずこの記事を読むことをお勧めします: https://www.jb51.net/article/197865.htm

2. アイデア

  1. mysqldump、scp、その他のコマンドを含むシェルスクリプトを保存するための utils ファイルを作成します。
  2. expectスクリプトを使用して、utilsでスクリプトを実行し、パスワードを自動的に入力します。
  3. 最後に、ドライバースクリプトを使用してexpectを実行し、必要なパラメータをスクリプトに渡します。

考え方は次のとおりです。

ここに画像の説明を挿入

3. コード

3.1. 単一マシンのコールドバックアップ

(1) mysqldumpシェルスクリプト
バックアップ.sh:

#!/bin/bash

mysql_ユーザー名=$1
バックアップデータベース=$2
バックアップパス=$3

mysqldump -u ${mysql_username} -p --databases ${backup_databases} > ${backup_path}

(2)mysqldumpのexpectスクリプトを実行すると、mysqlコードを自動的に入力することができます。
シングルコールドバックアップサービス.exp:

#!/usr/bin/期待する

タイムアウト5を設定

#ローカル情報を設定する set mysql_username [lindex $argv 0] 
バックアップデータベースを設定する [lindex $argv 1] 
バックアップパスを設定する [lindex $argv 2] 

#utils パス utils_path /home/hadoop/backup_script/utils を設定します

bash ${utils_path}/backup.sh ${mysql_username} ${backup_database} ${backup_path} を起動します


期待する {
	"*assword*" {send "nimabidecao1\r"} #パスワードを入力}
EOFを期待する

(3)スクリプトを駆動し、expectを実行します。必要なパラメータを渡すことができます。
single_cold_backup_service_driver.sh:

#!/bin/bash

#ここでのデータはmysql_username=rootと記述できます
バックアップデータベース=学校
バックアップパス=$HOME/backup_data/${backup_databases}.sql

#expect スクリプトを実行します。expect $HOME/backup_script/single_cold_backup/single_cold_backup_service.exp ${mysql_username} ${backup_databases} ${backup_path}

ここではパスに細心の注意を払わなければなりません。絶対パスを使用して実行することを強くお勧めします。

(4)crontabを使用して定期的にドライバースクリプトを実行し、crontabエディターに入ります: crontab -e
以下を入力してください:

0 9 * * 1 bash /home/hadoop/backup_script/single_cold_backup/single_cold_backup_driver.sh

これは、毎週月曜日の午前 9 時にバックアップを実行することを意味します。希望する時間を確認したい場合は、この Web サイト (https://crontab-generator.org/) にアクセスして、希望する時間を選択できます。


3.2. デュアルマシンコールドバックアップ

(1)リモートファイルをコピーして、MySQLバックアップファイルをローカルマシンにコピーする
scp.sh:

#!/bin/bash

ローカルバックアップパス=$1
別のユーザー=$2
別のIP=$3
別のバックアップパス=$4

scp ${local_backup_path} ${another_user}@${another_ip}:${another_backup_path}

(2)mysqldumpのexpectスクリプトを実行すると、mysqlコードを自動的に入力することができます。
ダブルコールドバックアップサービス.exp:

#!/usr/bin/期待する

タイムアウト5を設定

#ホスト情報セット mysql_username [lindex $argv 0] 
バックアップデータベースを設定する [lindex $argv 1] 
バックアップパスを設定する [lindex $argv 2] 

#スレーブ情報セットslave_user [lindex $argv 3]
slave_ip を設定する [lindex $argv 4]
slave_backup_path を設定する [lindex $argv 5]

#utils パス utils_path /home/hadoop/backup_script/utils を設定します


bash ${utils_path}/backup.sh ${mysql_username} ${backup_database} ${backup_path} を起動します

期待する {
	"*assword*" {send "nimabidecao1\r"} #パスワードを入力}

bash ${utils_path}/scp.sh ${backup_path} ${slave_user} ${slave_ip} ${slave_backup_path} を起動します

期待する {
  "*assword*" {send "nimabidecao1\r"} #パスワードを入力}

EOFを期待する

(3)スクリプトを駆動し、expectを実行します。必要なパラメータを渡すことができます。
double_cold_backup_service_driver.sh:

#!/bin/bash

#ローカルマシン情報 mysql_username=root
バックアップデータベース=学校
バックアップパス=$HOME/backup_data/${backup_databases}.sql

#スレーブ情報 slave_user=meizhaowei
スレーブIP=172.20.10.14
スレーブバックアップパス=バックアップデータ/doule_cold_backup_data/${バックアップデータベース}.sql


# 絶対パスの書き込みを実行します。期待値は $HOME/backup_script/double_cold_backup/double_cold_backup_service.exp ${mysql_username} ${backup_databases} ${backup_path} ${slave_user} ${slave_ip} ${slave_backup_path} です。

(4)crontabを使用してドライバースクリプトを定期的に実行する

0 9 * * 1 bash /home/hadoop/backup_script/double_cold_backup/double_cold_backup_driver.sh

これは、毎週午前9時にバックアップを実行することを意味します

Linux で mysqldump+expect+crontab を使用して MySQL の定期コールド バックアップを実装する方法についての説明はこれで終わりです。MySQL の定期コールド バックアップの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL スケジュール バックアップ ソリューション (Linux crontab を使用)
  • Linux 6.7 に付属する mysql-libs* crontab コマンドがアンインストール後に使用できなくなる理由の分析
  • Linux での crontab スケジュール バックアップの例を使用した MySQL スケジュール バックアップ
  • Linux システムで crontab を使用して MySQL データベースを定期的にバックアップする方法

<<:  Vueプロジェクトはログインと登録の効果を実現します

>>:  Dockerコミットの使い方の詳しい説明

ブログ    

推薦する

25 個の CSS フレームワーク、ツール、ソフトウェア、テンプレートを共有

スプライトカウダウンロード CSS リントダウンロード プレフィックスダウンロード 1140px C...

最小限のルートファイルシステムを構築するためにbusyboxを移植するための詳細な手順

Busybox: 小さなコマンドが詰まったスイスアーミーナイフ。ステップ1: ディレクトリ構造を作成...

MySQL の on と where における左結合設定条件の使用法の違いの分析

この記事では、MySQL の左結合における on 条件と where 条件の使用法の違いを例を使って...

ウェブページの読み込み速度を上げる25の方法とヒント

はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...

React Hooksコンポーネント間で値を渡す方法の詳細な説明(tsを使用)

目次父から息子へ息子から父へクロスレベルコンポーネント(親から子孫)父から息子へpropsを通じて値...

MySQL でデータベースを作成した後、ユーザー 'root'@'%' によるデータベース 'xxx' へのアクセスが拒否される問題を解決する

序文最近、仕事で問題が発生しました。データベースを作成した後、データベースに接続するときにエラーが発...

ホバープロンプトにはvue2+elementuiを使用する

Vue2+elementui のホバー プロンプトは、外部と内部に分かれています。内部のものは el...

MySQL 全文あいまい検索 MATCH AGAINST メソッドの例

MySQL 4.x 以降では、全文検索 MATCH ... AGAINST モード (大文字と小文字...

Centos7 での mysql 8.0.15 のインストールと設定

この記事では、参考までにMySQL 8.0.15のインストールと設定のグラフィックチュートリアルを紹...

MySQLの基本の共通機能

目次1. 共通機能分類1.1 単一行関数: 1.2 グループ化機能: 2. 単一行関数3. 数学関数...

Win10 での MySQL 8.0.15 のインストールと設定のグラフィック チュートリアル

この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...

ウェブデザイン経験

<br />著者はかつてWebデザインの初心者でしたが、継続的な探求と実践を通じて、今で...

Vue で v-for を更新する方法

ヒント:配列変更メソッドによりv-forが更新され、ページが更新されます。配列を変更しないメソッド:...

Linuxカーネルのアクセス制御セキュリティを強化する方法

背景以前、当社のプロジェクト チームは、Windows、Linux、macOS の 3 つの主要なオ...

シンプルなドラッグ効果を実現するjs

この記事では、簡単なドラッグ効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...