Mysqlデータベースの完全バックアップとリカバリアプリケーションshellスクリプトmysql完全バックアップを実現


1.1データベースバックアップの重要性
本番環境では、データのセキュリティが重要であり、どのデータの損失も深刻な結果をもたらす可能性があります.十数枚のバックアップの重要性は主に以下の通りです.
(1):システムの高可用性とディザスタリカバリ性を向上させ、データベースシステムがクラッシュした場合、データベースバックアップがなければデータを見つけることができません.
(2)データベースバックアップを使用してデータベースをリストアすることは、データベースのクラッシュ時にデータリカバリの最小コストを提供する最良の方法であり、ユーザーにデータを再追加させるには、コストが大きすぎる.
(3)時間がなければ何もない.データベースバックアップは災害を防ぐ強力な手段である.データベースを使用している間に、データが失われる原因はいくつかあります.(1)プログラムエラー(2)ヒューマンエラー(3)コンピュータ障害(4)ディスク障害(5)ディザスタ
1.2データベースバックアップの分類.
バックアップには、物理的および論理的な観点から、次のような種類があります.
(1)物理バックアップ;データ・オペレーティング・システムの物理ファイル(データ・ファイル、ログ・ファイルなど)のバックアップを指します.物理バックアップは、オフラインバックアップ(コールドバックアップ)とオンラインバックアップ(ホットバックアップ)に分けられます.コールドバックアップ:データベースを閉じた状態で操作すると、データベースの整合性が良好に保証されます.≪ホット・バックアップ|Hot Backup|emdw≫:データベースのログ・ファイルに依存するデータベースの実行状態で操作します.
(2)論理バックアップ:値対データベース論理コンポーネント(テーブルなどのデータベースオブジェクト)のバックアップ.
データベースのバックアップポリシーの観点から、バックアップは完全バックアップと差分バックアップとインクリメンタルバックアップに分けられます.
(1)フル・バックアップ:データをフル・バックアップするたびに、ユーザー・テーブル、システム・テーブル、インデックス、ビュー、ストレージ・プロシージャなどのすべてのデータベース・オブジェクトを含むデータベース全体をバックアップできますが、より多くの時間とスペースがかかるため、フル・バックアップを行うサイクルが長くなり、バックアップとリカバリの操作が簡単で便利であるという利点があります.欠点は、データの重複が多く、バックアップスペースが多く、バックアップ時間が長いことです.
(2)差分バックアップ:前回の完全バックアップ以降に変更されたファイルをバックアップし、データベースの一部のみをバックアップします.最初の完全バックアップよりも小さく、前回の完全バックアップ以降に変更されたデータベースのみを含むため、ストレージとリカバリの速度が速いという利点があります.
(3)インクリメンタル・バックアップ:前回のフル・バックアップまたはインクリメンタル・バックアップ後に変更されたファイルのみがバックアップされます.
1.3 mysqlバックアップツール付きmysqldump
Mysqlデータベースのバックアップは、データベースが実際にファイルであるため、データベースフォルダを直接パッケージ化したり、専用のバックアップツールmysqldumpを使用してバックアップ作業を行うことができます.(1)tarパッケージングフォルダを使用してMysqlをバックアップするデータベースファイルは、デフォルトではインストールディレクトリのdataフォルダの下に保存され、dataフォルダを直接保存することができますが、スペースが大きく、tarパッケージング圧縮を使用して保存できます.(1.1 xz圧縮フォーマットツールのインストール)
[root@kgc1 ~]# yum install -y xz

(1.2)データベースフォルダ/usr/src/data(カスタムインストールパス下のdataファイル)のパッケージング
[root@kgc1 ~]# tar Jcvf /opt/mysql-$(date +%F).tar.xz /data/

lsコマンドを使用して、正常に実行されたかどうかを確認します.
[root@kgc1 ~]# ls /opt/
mysql-2020-06-27.tar.xz  mysql-.tar.xz  rh

(1.3)パッケージ前後のファイルサイズを比較すると、圧縮されたバックアップファイルの占有スペースが小さいことがわかります.
[root@kgc1 ~]# du -sh /opt/mysql-2020-06-27.tar.xz 
37M	/opt/mysql-2020-06-27.tar.xz
[root@kgc1 ~]# du -sh /data/
385M	/data/

(1.4)データベースファイルが破損してデータが失われた場合、バックアップファイルを解凍することができ、データ復旧の仕事をしたことに相当する.
[root@kgc1 ~]# tar Jxvf /opt/mysql-2020-06-27.tar.xz  data/

(2)mysqldumpツールを使用してdb 1というライブラリをバックアップ//バックアップする
[root@kgc1 opt]# mysqldump -uroot -p -B db1 > /opt/mysql3.sql

(3)cat mysql 3を使用する.sqlはバックアップ情報を表示する.
[root@kgc1 opt]# cat mysql3.sql 
-- MySQL dump 10.13  Distrib 5.7.30, for linux-glibc2.12 (x86_64)
--
-- Host: localhost    Database: db1
-- ------------------------------------------------------
-- Server version	5.7.30-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `db1`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `db1` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `db1`;

--
-- Table structure for table `idtest`
--

DROP TABLE IF EXISTS `idtest`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `idtest` (
  `id` int(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `idtest`
--

LOCK TABLES `idtest` WRITE;
/*!40000 ALTER TABLE `idtest` DISABLE KEYS */;
/*!40000 ALTER TABLE `idtest` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2020-06-28 10:20:40

(4)mysqlデータベースにログインしないmysqlコマンドを使用してライブラリidtestを復元し、コマンドフォーマットは以下の通りです.
[root@kgc1 opt]# mysql -uroot -p </opt/mysql3.sql 

拡張バックアップパラメータ:(1)mysqldumpコマンドを使用して、いくつかのテーブルを完全にバックアップします.コマンドは以下のとおりです.
Mysqldump -u    -p   【  】【    】【    】> /      /      

例えば、mysqldumo-uroot-p 123456 imployee-salary(ライブラリ名)IT_salary IT_desc >/opt/salary.sql
(2):コマンドmysldumpコマンドを使用して、単一ライブラリを完全にバックアップします.
Mysqldump -u    -p   【  】 【    】 > /      /      /

注:パラメータ-Bが追加されていないmysqldumpバックアップリカバリでは、ライブラリ名またはテーブル名を手動で作成する必要があります.
(3)myslqdumpコマンドを使用して複数のライブラリを完全バックアップするコマンドフォーマット:
Mysqldump -u    -p   【  】--databases     1        2 > /      /      /

(4)mysqldumpコマンドを使用して、すべてのライブラリを完全にバックアップします.
Mysqldump -u    -p   -B --all-databases  > /      /      /

例えば、mysqldump-uroot-p-B--all-databases>/opt/mysql 4.sql
(5)mysqldumpコマンドを使用してテーブル構造を直接バックアップすることもでき、コマンドは以下の通りである.
Mysqldump -u    -p   -B -d          > /      /      /

1.4 mysql完全復旧
(1)sourceコマンドによるライブラリ全体のリカバリ
Source      
mysql> source /opt/mysql4.sql;

(2)mysqlコマンドライブラリ全体のリカバリ、コマンドフォーマット:
Mysql -uroot(   ) -p(  ) < /opt/mysql4.sql(      )

次のようになります.[root@kgc1 opt]# mysql -uroot -p Enter password:
1.5 shenllスクリプトによる自動バックアップ
[root@kgc1 mysqlbak]# vim mysqlbak.sh 

#!/bin/bash
#mysqlbak
id="root"
pwd="123456"
dbname="--all-databases"
mysqlbak="/opt/mysqlbak"
db="mysqldump"
[ ! -d $mysqlbak ] && mkdir -p $mysqlbak
cd $mysqlbak

mysqlbakdate=mysql_$(date +%Y-%m-%d)

"$db" -u"$id" -p"$pwd" -B "$dbname" > /opt/mysqlbak/"$mysqlbakdate".sql

if [ $? -eq 0 ]
   then
   echo "mysql       "
   else
   echo "mysql             " | mail -s "mysql       " **********@qq.com
Fi

計画タスクへのスクリプトの追加//毎日23時59分データベースのバックアップ
[root@kgc1 ~]# crontab -e

59 23 * * * /mysqlbak/mysqlbak.sh

crontab-lを使用して計画タスクを表示する
[root@kgc1 ~]# crontab -l
59 23 * * * /mysqlbak/mysqlbak.sh