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コミットの使い方の詳しい説明

推薦する

MySQL 5.7.21 winx64 無料インストールバージョン設定方法グラフィックチュートリアル

MySQL 5.7.21 winx64無料インストールバージョンの設定方法、参考までに、具体的な内容...

Dockerfile をベースに Zabbix 監視システムのコード例を作成する

forループを使用してZabbixイメージをコンテナにインポートします。 n を `ls *.tar...

初心者向けのMySQLデータベースとテーブルDDLの作成と操作の学習

目次1. データベースを操作する1.1 データベースを作成する1.2 データベースをクエリする1.3...

javascript 入力画像のアップロードとプレビュー、FileReader プレビュー画像

FileReader は、フロントエンドのファイル処理、特に画像処理にとって重要な API です。画...

MySQL オンラインリカバリ UNDO テーブルスペース 実戦記録

1 MySQL5.6 1.1 関連パラメータMySQL 5.6 では、innodb_undo_dir...

autoconfを使用してMakefileを生成し、プロジェクトをコンパイルする手順

序文Linux では、コンパイルとリンクには Makefile を使用する必要がありますが、適切な ...

MySQLへのJava接続の基礎となるカプセル化の詳細な説明

この記事では、Java接続MySQLの基礎となるカプセル化コードを参考までに紹介します。具体的な内容...

MySQL のマスター スレーブ レプリケーション オプションをオンラインで変更する方法

序文: MySQL で最も一般的に使用されるアーキテクチャは、マスター スレーブ レプリケーションで...

JS ES6 スプレッド演算子の魔法のような使い方

目次1. 属性を追加する2. 複数のオブジェクトを結合する3. オブジェクトのプロパティを削除する4...

MySQL 5.7.17 winx64 のインストールと設定方法のグラフィックチュートリアル

Windows インストール mysql-5.7.17-winx64.zip メソッド レコード &...

MySQLデータベース移行におけるデータ文字化けの問題を解決する

リーダーの指示のもと、Java プロジェクトを引き継ぎ、リファクタリングを行う必要がありました。同時...

一般的な Dockerfile コマンドの使用方法の紹介

目次01 CM 02 エントリーポイント03 ワークディレクトリ04 環境05 ユーザー06巻07 ...

VMware Workstation のインストール Linux (Ubuntu) システム

システムをコンピューターにインストールする方法がわからない場合は、Linux を学習したい場合は、仮...

vue 動的コンポーネント

目次1. コンポーネント2. キープアライブ2.1 問題点2.2 キープアライブを使って解決する2....

Alibaba Cloud Server への Web プロジェクトのデプロイについて (5 つの手順)

1.まずAlibaba Cloudのウェブサイトにログインしてアカウントを登録し、サーバータイプを...