MySQLデータベースの完全バックアップと増分バックアップ

データベースのバックアップ

本番環境では、データのセキュリティが最も重要であり、データの損失は深刻な結果をもたらす可能性があります

データ損失の理由

プログラムエラー
人為的エラー(ほとんどの理由)
コンピューターの障害、
ディスクの障害、
災害(火事、地震など)および盗難

物理的および論理的な観点からコピーライティングをバックアップする

物理バックアップ:データベースオペレーティングシステムの物理ファイル(データファイル、ログファイルなど)のバックアップ。
データベースは物理レベルで3つのタイプのファイルに分割されます。各ファイルの名前はテーブルの名前で始まり、拡張子はファイルタイプ
テーブル構造ファイルを示します:
。Frm ファイルストレージテーブルの定義テーブルデータファイルの拡張子は.MYD(MYData)です
。テーブルインデックスファイルの拡張子は.MYI(MYIndex)です。
物理バックアップは、オフラインバックアップ(コールドバックアップ)とオンラインバックアップ(ホットバックアップ)に分けることができます。 )
コールドバックアップ:データベースが閉じているときに実行されます。
ホットバックアップ:データベースが実行されています。このバックアップ方法は、データベースのログファイルによって異なります。
論理バックアップ:データベースの論理コンポーネント(テーブルやその他のデータベースオブジェクトなど)のバックアップ

データベースのバックアップ戦略

完全バックアップ:毎回データの完全バックアップを作成します。
差分バックアップ:最後の完全バックアップ以降に変更されたファイルをバックアップします。
増分バックアップ:最後の完全バックアップまたは増分バックアップ後に変更されファイルのみがバックアップされますバックアップ

完全バックアップ

完全バックアップは、データベース全体、データベース構造、およびファイル構造

バックアップです完全バックアップは、バックアップの完了時にデータベースを保存します。完全バックアップは、増分バックアップの基礎です。

完全バックアップの長所と短所

利点:
高いセキュリティ、
シンプルで便利なバックアップおよびリカバリ操作
短所:
大量のデータの繰り返し、
大量のバックアップスペース、低いスペース使用率、
長いバックアップおよびリカバリ時間

かかって来い!公演!

ファイルを直接バックアップ

[root@5centos mysql]# tar jcvf /beifen/bk-$(date +%F).tar.gz data
[root@5centos mysql]# ls /beifen/
bk-2020-08-20.tar.gz  bk-.tar.gz

mysqldumpを使用する

备份单个库(实际上是备份库里的所有表)
[root@5centos /]# mysqldump -u root -p LIU > /beifen/JUEJUE.sql
Enter password: 

多库备份
[root@5centos beifen]# mysqldump -u root -p --databases LIU PAN > /beifen/databases-LIU_PAN.sql
Enter password: 
[root@5centos beifen]# ls
databases-LIU_PAN.sql  JUEJUE.sql

备份所有库
[root@5centos beifen]# mysqldump -u root -p --opt --all-databases > /beifen/all_databases.sql
Enter password: 

备份指定表
[root@5centos beifen]# mysqldump -u root -p LIU SHUSHU > /beifen/LIU-SHUSHU.sql
Enter password:

データベース
を復元するデータベースを復元するには、2つの方法があります
。1つのソース
2つのmysql -u username -p <バックアップスクリプト

mysql -u root -p mysql < /beifen/JUEJUE.sql

増分バックアップ

最後の完全バックアップまたは増分バックアップ
以降に変更されたファイルのみがバックアップされます。増分バックアップは、最後のバックアップ以降に追加または変更されたファイルまたはコンテンツです。

増分バックアップの長所と短所

利点:
データの重複がない、高効率、最大のスペース使用率
、小さなバックアップボリューム、短時間。
短所:
面倒な復元:復元するには、完全バックアップ後の最後の完全バックアップとすべての増分バックアップが必要であり、すべての増分バックアップが必要1つずつリバースプッシュリカバリを行うと
安全性が低下します

かかって来い!公演!

log-bin = mysql-binなどのMySQL構成ファイルの[mysqld]アイテムにlog-bin = filepathアイテム(filepathはバイナリファイルのパス)を追加し、mysqldサービスを再起動します。

バイナリログファイルのデフォルトのパスは/ usr / local / mysql / dataです

バックアップにおけるMySQLバイナリログの重要性

バイナリログは、データベースを更新する可能性のあるすべての更新または操作を保存します
。MySQLサーバーの起動後にバイナリログが記録を開始し、ファイルがmax_binlog_sizeで設定されたサイズに達するか、フラッシュログコマンドを受信すると、新しいログファイルを再作成します。
フラッシュログを定期的に実行するだけで済みますこのメソッドは、新しいログを再作成し、一連のバイナリファイルを生成し、これらのログを安全な場所に保存して、増分バックアップの期間を完了します

バックアップデータファイル

[root@5centos data]# systemctl stop mysqld
tar zcvf /beifen/mysql-$(date +%F).tar.gz /usr/local/mysql/data/
[root@5centos data]# systemctl start mysqld

バイナリファイルを開く

[root@5centos data]# vim /etc/my.cnf
[mysqld]
……省略部分……
log-bin=mysql-bin

[root@5centos data]# systemctl restart mysqld
[root@5centos data]# ll
总用量 122928
……省略部分……发现已生成二进制文件
-rw-r-----. 1 mysql mysql      154 8月  22 22:47 mysql-bin.000001

デモライブラリとテーブルを作成する

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| JUEJUE             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use JUEJUE;
Database changed
mysql> show tables;
+------------------+
| Tables_in_JUEJUE |
+------------------+
| LIULIU           |
+------------------+
1 row in set (0.00 sec)
mysql> select * from LIULIU;
+----+------+-------+
| ID | NAME | HIGHT |
+----+------+-------+
|  1 | JIAN | 175.0 |
|  2 | HAO  | 174.0 |
+----+------+-------+
2 rows in set (0.00 sec)

完全バックアップを取る

[root@5centos data]# mysqldump -u root -p JUEJUE > /beifen/JUEJUE.sql
Enter password: 

增量备份
[root@5centos data]# mysqladmin -u root -p flush-logs;
Enter password: 

查看增量日志文件
[root@5centos data]# ls
mysql-bin.000001  mysql-bin.000002

誤操作をシミュレートする

mysql> insert into LIULIU values (4,'GU',190);
Query OK, 1 row affected (0.01 sec)

mysql> insert into LIULIU values (5,'cai',180);
Query OK, 1 row affected (0.00 sec)

mysql> insert into LIULIU values (3,'SHA',180);
Query OK, 1 row affected (0.00 sec)

[root@5centos data]# mysqladmin -u root -p flush-logs;
Enter password: 

ビューファイル

[root@5centos data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000003 > /beifen/bk03.txt

[root@5centos data]# vim /beifen/bk03.txt 
##最后一条执行
# at 625
#200822 23:54:34 server id 1  end_log_pos 673 CRC32 0xd27d03dd  Write_rows: table id 108 flags: STMT_END_F
### INSERT INTO `JUEJUE`.`LIULIU`
### SET
###   @1=5
###   @2='cai'
###   @3=180.0

シミュレートされた回復

mysql> drop table LIULIU;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
Empty set (0.00 sec)


基于时间
[root@5centos data]# mysqlbinlog --no-defaults --stop-datetime='2020-8-22  23;54:34' /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p
Enter password: 

+----+------+-------+
| ID | NAME | HIGHT |
+----+------+-------+
|  1 | JIAN | 175.0 |
|  2 | HAO  | 174.0 |
|  4 | GU   | 190.0 |
|  5 | cai  | 180.0 |
+----+------+-------+
如果想恢复特定的,恢复时开始和结束时间分开写就行

基于位置
我这又删了,不掩饰了
[root@5centos data]# mysqlbinlog --no-defaults --stop-position='625' /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p123123


+----+------+-------+
| ID | NAME | HIGHT |
+----+------+-------+
|  1 | JIAN | 175.0 |
|  2 | HAO  | 174.0 |
|  4 | GU   | 190.0 |
|  5 | cai  | 180.0 |
+----+------+-------+

おすすめ

転載: blog.csdn.net/Ora_G/article/details/108123009