Verticaのこれらのこと(12)-verticaのバックアップとリカバリ

18481 ワード

最近verticaを使って、インターネットを利用して多くの资料を探してすべてなくて、自分で公式のドキュメントを见て手を出してやっただけで、今日verticaのバックアップと回复をしました以下は整理の过程で、みんなに分かち合って、もし问题があればみんなを歓迎します


1、verticaバックアップ


1.1 verticaバックアップ構成:

[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py  --setupconfig
Snapshot name (backup_snapshot): full_backup20160505
Number of restore points (1): 1
Specify objects (no default): 
Object restore mode (coexist, createOrReplace or create) (createOrReplace): 
Vertica user name (dbadmin): dbadmin
Save password to avoid runtime prompt? (n) [y/n]: y
Database user password to save in vbr password config file (no default):
Node v_windy1990_node0001
Backup host name (no default): 192.168.231.110
Backup directory (no default): /home/dbadmin/backup
Change advanced settings? (n) [y/n]: y
Temp directory (/tmp/vbr): 
Number of times to retry (2): 
Seconds between retry attempts (1): 
Encrypt data during transmission? (n) [y/n]: 
Use checksum for data integrity (not file data and size)? (n) [y/n]: 
Port number for rsync daemon (50000): 
User name to access rsync daemon (no default): 
Password of the user who accesses rsync daemon:
Backup transfer bandwidth limit in KBps or 0 for unlimited (0): 
Number of concurrency for backup (1): 
Restore transfer bandwidth limit in KBps or 0 for unlimited (0): 
Number of concurrency for restore (1): 
Password file name (no default): password
Saved vbr password to password.
Config file name (full_backup20160505.ini): 
Saved vbr config to full_backup20160505.ini.

バックアップが成功したら、バックアップのファイル内容を以下のように表示します。

[dbadmin@localhost ~]$ more full_backup20160505.ini 
[Misc]
snapshotName = full_backup20160505
restorePointLimit = 1
objectRestoreMode = createOrReplace
tempDir = /tmp/vbr
retryCount = 2
retryDelay = 1
passwordFile = password

[Database]
dbName = Windy1990
dbUser = dbadmin

[Transmission]
encrypt = False
checksum = False
port_rsync = 50000
serviceAccessUser = None
total_bwlimit_backup = 0
concurrency_backup = 1
total_bwlimit_restore = 0
concurrency_restore = 1

[Mapping]
v_windy1990_node0001 = 192.168.231.110:/home/dbadmin/backup

バックアップでパスワードを保存するファイルを選択しました。

/home/dbadmin/password

データ・ロードのパスワードが格納されています。

[dbadmin@localhost ~]$ more password 
[Passwords]
dbPassword = dbadmin
1.2 vertica  
 :
A full backup is a complete copy of the database catalog, its schemas, tables, and other objects. It is a consistent image of the database at the time the backup occurred. You can use a full backup for disaster recovery to restore a damaged or incomplete database. 

バックアップコマンドを実行するには、次の手順に従います。

[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task backup --config-file full_backup20160505.ini
Error: Manifest not found at rsync://[192.168.231.110]:50000/home/dbadmin/backup/ -- is the backup location initialized? Hint: Execute '--task init' first.
Backup FAILED.

エラーが検出されました。プロンプトに従って、パスを初期化する必要があります(個人的に理解しているのは、パスを宣言することです)。

[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task init --config-file full_backup20160505.ini
Initializing backup locations.
Backup locations initialized.

パス宣言成功!バックアップパスの下に複数のファイルがあることを確認します。

[dbadmin@localhost backup]$ ls -l
total 4
-rw-r--r--. 1 dbadmin verticadba 22 May  5 13:47 backup_manifest

次に、バックアップコマンドを再度実行します。

/opt/vertica/bin/vbr.py --task backup --config-file full_backup20160505.ini

バックアップが成功したことがわかります。

[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task backup --config-file full_backup20160505.ini
Starting backup of database Windy1990.
Participating nodes: v_windy1990_node0001.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 60269241 of 60269241 total.
[==================================================] 100%
Copying backup metadata.
Finalizing backup.
Backup complete!

verticaデータベースが完全にバックアップされていることがわかります。バックアップされたデータは、宣言したパス/home/dbamin/backupの下にあると推測できます。

[dbadmin@localhost backup]$ ll
total 12
-rw-r--r--. 1 dbadmin verticadba 1044 May  5 14:08 backup_manifest
drwxr-xr-x. 8 dbadmin verticadba 4096 May  5 14:07 Objects
drwxr-xr-x. 3 dbadmin verticadba 4096 May  5 14:08 Snapshots

2つ以上のフォルダ/Objects/Snapshotsが表示されます。Objectsフォルダを開くと、verticaデータベースファイルがディレクトリの下に表示されます。/home/dbadmin/backup/Snapshots/full_backup20160505_20160505_060600/v_windy1990_Node 0001ディレクトリには、バックアップした元verticaデータベースの情報が格納されています。


各ノードのデータ・フローを確認します。

select node_name,sum(used_bytes) as size_in_bytes from v_monitor.storage_containers group by node_name;

 

1.3 verticaのインクリメンタルバックアップ公式ドキュメントでは全量とインクリメンタルを一緒に紹介しています。Full and Incremental Backupsと呼ばれています。ここではインクリメンタルを個別に列挙しました。restorePointLimitはインクリメンタルバックアップセットの数を制御しています。私は1つのノードしかありません。バックアップファイルを構成するときにrestorePointLimit=1を設定して1.2のフルバックアップコマンドを再度実行するとインクリメンタルバックアップを実現できます。

[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task backup --config-file full_backup20160505.ini
Starting backup of database Windy1990.
Participating nodes: v_windy1990_node0001.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 0 of 60269241 total.
[==================================================] 100%
Copying backup metadata.
Finalizing backup.
Backup complete!

全量バックアップではなくインクリメンタルバックアップだとどうやって知ったのでしょうか?この問題はとても良くて、私はバックアップする時も考えて、バックアップが完成した後、私は再びbackupフォルダを開けて、見ました:

[dbadmin@localhost ~]$ cd backup/
[dbadmin@localhost backup]$ ll
total 12
-rw-r--r--. 1 dbadmin verticadba 1103 May  5 14:36 backup_manifest
drwxr-xr-x. 8 dbadmin verticadba 4096 May  5 14:07 Objects
drwxr-xr-x. 4 dbadmin verticadba 4096 May  5 14:36 Snapshots

Objectsディレクトリの時間を見てください。この過程でverticaデータベースを操作しなかったので、verticaデータベースファイルは元のまま更新されませんでした。だから、上記の操作がインクリメンタルであることを知りたいのは簡単です。verticaデータベースのいずれかのテーブルにデータを挿入し、上記のバックアップスクリプトを実行します。携帯番号を挿入します。

dbadmin=> insert into tb_serv_num values('13488888888','qin**');
 OUTPUT 
--------
      1
(1 row)

dbadmin=> commit;
COMMIT
dbadmin=> \q

次に、バックアップ文を再実行し、実行後にbackupファイルの下の内容を表示します。

[dbadmin@localhost ~]$ cd backup/
[dbadmin@localhost backup]$ ll
total 12
-rw-r--r--. 1 dbadmin verticadba 1171 May  5 14:46 backup_manifest
drwxr-xr-x. 9 dbadmin verticadba 4096 May  5 14:46 Objects
drwxr-xr-x. 4 dbadmin verticadba 4096 May  5 14:46 Snapshots

ファイルの時間を見て、私たちの上の推理が正しいことを説明しているのではないでしょうか~~~だから、疑わないでください。私たちのインクリメンタルバックアップは問題ありません。1.4 verticaオブジェクトレベルバックアップ公式サイトドキュメント:The database administrator user can create object-level backups consisting of one or more schemas and tables.Object-level backups are especially useful for multi-tenanted database sites. 実際には、オブジェクトレベルのバックアップとフルバックアップの差は多くありません。知識は、バックアッププロファイルを生成する際に異なります(異なる点に注意してください):

[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --setupconfigSnapshot name (backup_snapshot): backup_object_tb_serv
Number of restore points (1): 
Specify objects (no default): tb_serv_num
Object restore mode (coexist, createOrReplace or create) (createOrReplace): 
Vertica user name (dbadmin): 
Save password to avoid runtime prompt? (n) [y/n]: y
Database user password to save in vbr password config file (no default):
Node v_windy1990_node0001
Backup host name (no default): 192.168.231.110
Backup directory (no default): /home/dbadmin/backup
Change advanced settings? (n) [y/n]: 
Password file name (no default): password
Saved vbr password to password.
Config file name (backup_object_tb_serv.ini): 
Saved vbr config to backup_object_tb_serv.ini.

次に、バックアップコマンドを実行します。

[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task backup --config-file backup_object_tb_serv.ini 
Starting backup of database Windy1990.
Objects: ['tb_serv_num']
Participating nodes: v_windy1990_node0001.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 0 of 244 total.
[==================================================] 100%
Copying backup metadata.
Finalizing backup.
Backup complete!

[Transmission]
encrypt = False
checksum = False
port_rsync = 50000
serviceAccessUser = None
total_bwlimit_backup = 0
concurrency_backup = 1
total_bwlimit_restore = 0
concurrency_restore = 1
hardLinkLocal = True

次に、バックアップコマンドを実行します。

/opt/vertica/bin/vbr.py --task backup --config-file HardLinkLocal_backup20160505.ini
[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task backup --config-file HardLinkLocal_backup20160505.ini 
Starting backup of database Windy1990.
Participating nodes: v_windy1990_node0001.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 0 of 60269355 total.
[==================================================] 100%
Copying backup metadata.
Finalizing backup.
Backup complete!

1.6バックアップの表示バックアップの内容を表示する:

/opt/vertica/bin/vbr.py --task listbackup --config-file HardLinkLocal_backup20160505.ini
[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task listbackup --config-file HardLinkLocal_backup20160505.ini 
backup                                epoch   objects   hosts(nodes)                            file_system_type  
full_backup20160505_20160505_074850   16                v_windy1990_node0001(192.168.231.110)   [Linux]           
full_backup20160505_20160505_064640   16                v_windy1990_node0001(192.168.231.110)   [Linux]   

verticaデータベースでバックアップの情報をクエリーできます。

dbadmin=> select * from database_backups;
       backup_timestamp        |      node_name       |     snapshot_name     | backup_epoch | node_count | file_system_type |   objects   
-------------------------------+----------------------+-----------------------+--------------+------------+------------------+-------------
 2016-05-05 14:08:03.369797+08 | v_windy1990_node0001 | full_backup20160505   |           15 |          1 | [Linux]          | 
 2016-05-05 14:36:39.496688+08 | v_windy1990_node0001 | full_backup20160505   |           15 |          1 | [Linux]          | 
 2016-05-05 14:42:35.517465+08 | v_windy1990_node0001 | full_backup20160505   |           15 |          1 | [Linux]          | 
 2016-05-05 14:44:43.043536+08 | v_windy1990_node0001 | full_backup20160505   |           15 |          1 | [Linux]          | 
 2016-05-05 14:46:57.958863+08 | v_windy1990_node0001 | full_backup20160505   |           16 |          1 | [Linux]          | 
 2016-05-05 15:03:19.580159+08 | v_windy1990_node0001 | backup_object_tb_serv |           16 |          1 | [Linux]          | tb_serv_num
 2016-05-05 15:50:53.143446+08 | v_windy1990_node0001 | full_backup20160505   |           16 |          1 | [Linux]          | 
(7 rows)

2、vertica回復


2.1 verticaリカバリ


リカバリが役に立つことを見るために、もう一度データを破壊して、dropの1つのテーブル、1つのデータを削除します

dbadmin=> select * from tb_rp_st_user_day ;
 serv_number | user_name 
-------------+-----------
(0 rows)

dbadmin=> drop table tb_rp_st_user_day;
DROP TABLE

dbadmin=> select * from tb_serv_num where name='ss';
  serv_num   | name 
-------------+------
 186371***** | ss
(1 row)

dbadmin=> delete from tb_serv_num where name='ss';
 OUTPUT 
--------
      1
(1 row)

dbadmin=> commit;
COMMIT

リカバリコマンドの実行を開始するには、次の手順に従います。

/opt/vertica/bin/vbr.py --task restore --config-file full_backup20160505.ini
[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task restore --config-file full_backup20160505.ini Error: Full database restore requires the nodes be DOWN.
Restore FAILED.

エラーを報告しました~verticaデータベースdownの状態でしかリカバリできません...


公式ドキュメントを表示するには、次の手順に従います。

To restore a full database backup, you must ensure that:
•	The database is down. You cannot restore a full backup when the database is running.
•	All of the backup hosts are up and available.
•	The backup directory exists and contains the backups from which to restore.
•	The cluster to which you are restoring the backup has the same number of hosts as the one used to create the backup. The node names and the IP addresses must also be identical.
•	The database you are restoring must already exist on the cluster to which you are restoring data. The database can be completely empty without any data or schema. As long as the database name matches the name in the backup, and all of the node names match the names of the nodes in the configuration file, you can restore to it.
•	The user performing the restore is the database administrator.

ここでは、tb_を同時に復元したばかりの2つ目のリカバリ方法(オブジェクトレベルのリカバリ)を試してみましょう。serv_numテーブルはオブジェクトレベルのバックアップを行いました:


オブジェクトレベルのリカバリを実行するには、次の手順に従います。

/opt/vertica/bin/vbr.py --task restore --config-file backup_object_tb_serv.ini
[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task restore --config-file backup_object_tb_serv.ini 
Starting object restore of database Windy1990.
Participating nodes: v_windy1990_node0001.
Objects to restore: tb_serv_num.
Restoring from restore point: backup_object_tb_serv_20160505_070249
Loading snapshot catalog from backup.
Syncing data from backup to cluster nodes.
[==================================================] 100%
Finalizing restore.
Restore complete!

OK~上記のリカバリに成功したのを見たら、verticaデータベースに登ってデータがリカバリされたかどうかを検証します。

dbadmin=> select * from tb_serv_num ;
  serv_num   | name  
-------------+-------
 138***** | windy
 186***** | ss
 134***** | qin**
(3 rows)

データが復元されたのが見えますが、待って、さっきdropにテーブルを返しましたが、このテーブルは復元されたのではないでしょうか。

dbadmin=> \d tb_rp_st_user_day;
Did not find any relation.

/opt/vertica/bin/vbr.py --task restore --config-file HardLinkLocal_backup20160505.ini
[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task restore --config-file HardLinkLocal_backup20160505.ini 
Error: Full database restore requires the nodes be DOWN.
Restore FAILED.

同様にverticaデータベースがDOWNである必要がある


verticaデータベースを停止するようですね~(データベースを停止します.ここでは略)verticaデータベースを停止した後、フルリカバリを試します.
[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task restore --config-file full_backup20160505.ini 
Starting full restore of database Windy1990.
Participating nodes: v_windy1990_node0001.
Restoring from restore point: full_backup20160505_20160505_074850
Computing the size of data to be synced from backup to cluster nodes.
Syncing data from backup to cluster nodes.
[==================================================] 100%
Restoring catalog.
Restore complete!

回復したのは悪くないことがわかります.verticaを再起動し、verticaに登って表tbを表示します.rp_st_user_dayが回復したかどうか:
dbadmin=> \d tb_rp_st_user_day;
                                            List of Fields by Tables
 Schema |       Table       |   Column    |    Type     | Size | Default | Not Null | Primary Key | Foreign Key 
--------+-------------------+-------------+-------------+------+---------+----------+-------------+-------------
 public | tb_rp_st_user_day | serv_number | varchar(13) |   13 |         | f        | f           | 
 public | tb_rp_st_user_day | user_name   | varchar(50) |   50 |         | f        | f           | 
(2 rows)

回復に成功したことがわかります.
以上、verticaバックアップと簡単なリカバリです.

今回のverticaリカバリでは、多くの問題が公式ドキュメントで解決策を見つけることができ、verticaを停止したり起動したりする際に、いくつかの問題に遭遇したが、エラーのヒントによって解決方法が明らかになった。