您好,登錄后才能下訂單哦!
基于percona xtrabackup的innobackupex如何實現基于時間點數據庫恢復,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
數據庫在運行期間,可能是因為人為原因誤操作或者出現存儲故障,導致某些表不能正常訪問,此時,可以使用基于時間點的恢復,采用數據庫備份及二進制日志,把誤操作或出現故障的數據還原回來,建議不要在生產系統中進行基于時間點的恢復,可以在一個臨時的環境把數據恢復出來,然后讓業務及開發確認,然后再把數據導回到生產數據庫,這樣也不影響數據庫中其它業務的運行。
1,數據庫的當前數據庫
mysql> select * from zxydb.t_go;
+----+------+
| a | b |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 5 | 5 |
| 8 | 8 |
| 10 | 10 |
| 11 | 11 |
| 12 | 12 |
+----+------+
8 rows in set (0.00 sec)
2,構建數據庫的基準備份
--構建存儲數據庫基準備份的目錄
[root@standbygtid mysql]# mkdir -p /database_base_dir
[root@standbygtid mysql]# innobackupex -uroot -psystem /database_base_dir --no-timestamp
[root@standbygtid mysql]# cd /database_base_dir/
[root@standbygtid database_base_dir]# ll
總用量 77868
-rw-r----- 1 root root 418 11月 5 00:56 backup-my.cnf
drwxr-x--- 2 root root 4096 11月 5 00:56 completedb
-rw-r----- 1 root root 79691776 11月 5 00:56 ibdata1
drwxr-x--- 2 root root 4096 11月 5 00:56 mysql
drwxr-x--- 2 root root 4096 11月 5 00:56 performance_schema
drwxr-x--- 2 root root 4096 11月 5 00:56 test
-rw-r----- 1 root root 18 11月 5 00:56 xtrabackup_binlog_info
-rw-r----- 1 root root 115 11月 5 00:56 xtrabackup_checkpoints
-rw-r----- 1 root root 507 11月 5 00:56 xtrabackup_info
-rw-r----- 1 root root 2560 11月 5 00:56 xtrabackup_logfile
drwxr-x--- 2 root root 4096 11月 5 00:56 zxydb
3,準備用于恢復上述的基準備份
(注:其實就是用在線日志應用到基準備份,確保數據一致性)
[root@standbygtid database_base_dir]# innobackupex -uroot -psystem --apply-log /database_base_dir
[root@standbygtid database_base_dir]# ll
總用量 196652
-rw-r----- 1 root root 418 11月 5 00:56 backup-my.cnf
drwxr-x--- 2 root root 4096 11月 5 00:56 completedb
-rw-r----- 1 root root 79691776 11月 5 01:01 ibdata1
-rw-r----- 1 root root 50331648 11月 5 01:01 ib_logfile0
-rw-r----- 1 root root 50331648 11月 5 01:01 ib_logfile1
-rw-r----- 1 root root 12582912 11月 5 01:01 ibtmp1
drwxr-x--- 2 root root 4096 11月 5 00:56 mysql
drwxr-x--- 2 root root 4096 11月 5 00:56 performance_schema
drwxr-x--- 2 root root 4096 11月 5 00:56 test
-rw-r----- 1 root root 18 11月 5 00:56 xtrabackup_binlog_info
-rw-r--r-- 1 root root 19 11月 5 01:01 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root 115 11月 5 01:01 xtrabackup_checkpoints
-rw-r----- 1 root root 507 11月 5 00:56 xtrabackup_info
-rw-r----- 1 root root 8388608 11月 5 01:01 xtrabackup_logfile
drwxr-x--- 2 root root 4096 11月 5 00:56 zxydb
4,查看上述基準備份對應的二進制日志及位置
(注:如下基于時間點恢復就是從這個二進制日志及位置開始恢復到某個時間點,很重要喲)
[root@standbygtid database_base_dir]# more xtrabackup_binlog_info
binlog.000001120
[root@standbygtid database_base_dir]#
5,為了更好模擬基于時間點恢復,切換二進制日志,產生新的二進制日志
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)
6,查看當前的二進制日志及位置
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 | 337 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
--共計2個二進制日志
mysql> show binary logs;
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| binlog.000001 | 164 |
| binlog.000002 | 337 |
+---------------+-----------+
2 rows in set (0.00 sec)
7,產生數據變更
mysql> use zxydb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from t_go;
+----+------+
| a | b |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 5 | 5 |
| 8 | 8 |
| 10 | 10 |
| 11 | 11 |
| 12 | 12 |
+----+------+
8 rows in set (0.00 sec)
mysql> insert into t_go select 13,13;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
8,查看當前二進制日志對應的事件信息
mysql> show binlog events in 'binlog.000002';
+---------------+-----+-------------+-----------+-------------+----------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+-----+-------------+-----------+-------------+----------------------------------------------------------------------+
| binlog.000002 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.25-enterprise-commercial-advanced-log, Binlog ver: 4 |
| binlog.000002 | 120 | Query | 1 | 201 | BEGIN |
| binlog.000002 | 201 | Query | 1 | 306 | use `zxydb`; insert into t_go select 13,13 |
| binlog.000002 | 306 | Xid | 1 | 337 | COMMIT /* xid=41 */ |
+---------------+-----+-------------+-----------+-------------+----------------------------------------------------------------------+
4 rows in set (0.00 sec)
9,繼續變化數據
mysql> insert into t_go select 18,18;
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> show binlog events in 'binlog.000002';
+---------------+-----+-------------+-----------+-------------+----------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+-----+-------------+-----------+-------------+----------------------------------------------------------------------+
| binlog.000002 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.25-enterprise-commercial-advanced-log, Binlog ver: 4 |
| binlog.000002 | 120 | Query | 1 | 201 | BEGIN |
| binlog.000002 | 201 | Query | 1 | 306 | use `zxydb`; insert into t_go select 13,13 |
| binlog.000002 | 306 | Xid | 1 | 337 | COMMIT /* xid=41 */ |
| binlog.000002 | 337 | Query | 1 | 418 | BEGIN |
| binlog.000002 | 418 | Query | 1 | 523 | use `zxydb`; insert into t_go select 18,18 |
| binlog.000002 | 523 | Xid | 1 | 554 | COMMIT /* xid=48 */ |
+---------------+-----+-------------+-----------+-------------+----------------------------------------------------------------------+
7 rows in set (0.00 sec)
10,因為基于時間點恢復要用于二進制日志,備份下述的二進制文件到另一個目錄
(注:即使二進制日志非常重要,一定要定期進行備份,不然真要進行基于時間點恢復,而所需要的二進制日志又沒有了,哪就會導致數據損失了)
[root@standbygtid database_base_dir]# cd /var/lib/mysql
[root@standbygtid mysql]# ll
總用量 188464
-rw-rw---- 1 mysql mysql 56 11月 4 23:52 auto.cnf
-rw-rw---- 1 mysql mysql 164 11月 5 01:06 binlog.000001
-rw-rw---- 1 mysql mysql 554 11月 5 01:12 binlog.000002
-rw-rw---- 1 mysql mysql 32 11月 5 01:06 binlog.index
drwxr-x--- 2 mysql mysql 4096 11月 4 23:48 completedb
-rw-r----- 1 mysql mysql 79691776 11月 5 01:12 ibdata1
-rw-r----- 1 mysql mysql 50331648 11月 5 01:12 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 11月 4 23:48 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 11月 4 23:48 ibtmp1
drwxr-x--- 2 mysql mysql 4096 11月 4 23:48 mysql
srwxrwxrwx 1 mysql mysql 0 11月 4 23:52 mysql.sock
-rw------- 1 root root 159 11月 4 23:52 nohup.out
drwxr-x--- 2 mysql mysql 4096 11月 4 23:48 performance_schema
-rw-r----- 1 mysql root 2508 11月 4 23:52 standbygtid.err
-rw-rw---- 1 mysql mysql 6 11月 4 23:52 standbygtid.pid
drwxr-x--- 2 mysql mysql 4096 11月 4 23:48 test
drwxr-x--- 2 mysql mysql 4096 11月 4 23:48 zxydb
[root@standbygtid mysql]# mysqlbinlog binlog.000001 binlog.000002 --start-position=120 --stop-position=337 > /base_binlog_pos.sql
[root@standbygtid mysql]#
11,關閉數據庫
mysqladmin -uroot -psystem shutdown
12,物理刪除數據文件
[root@standbygtid mysql]# pwd
/var/lib/mysql
[root@standbygtid mysql]# rm -rf *
13,還原上述的備份到數據庫的數據文件目錄
[root@standbygtid mysql]# innobackupex --datadir=/var/lib/mysql --copy-back /database_base_dir
14,授權數據庫的數據文件目錄
[root@standbygtid mysql]# chown -Rf mysql:mysql *
[root@standbygtid mysql]# ll
總用量 188448
drwxr-x--- 2 mysql mysql 4096 11月 5 01:49 completedb
-rw-r----- 1 mysql mysql 79691776 11月 5 01:49 ibdata1
-rw-r----- 1 mysql mysql 50331648 11月 5 01:49 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 11月 5 01:49 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 11月 5 01:49 ibtmp1
drwxr-x--- 2 mysql mysql 4096 11月 5 01:49 mysql
drwxr-x--- 2 mysql mysql 4096 11月 5 01:49 performance_schema
drwxr-x--- 2 mysql mysql 4096 11月 5 01:49 test
-rw-r----- 1 mysql mysql 19 11月 5 01:49 xtrabackup_binlog_pos_innodb
-rw-r----- 1 mysql mysql 507 11月 5 01:49 xtrabackup_info
drwxr-x--- 2 mysql mysql 4096 11月 5 01:49 zxydb
15,刪除上述與xtrabackup相關的文件
[root@standbygtid mysql]# rm -rf xtrabackup_*
16,重啟數據庫
[root@standbygtid mysql]# nohup mysqld_safe --user=mysql&
17,基于時間點恢復
(注:我們就恢復到二進制日志的 337,見上述的第9步)
[root@standbygtid mysql]# mysql -uroot -psystem < /base_binlog_pos.sql
Warning: Using a password on the command line interface can be insecure.
[root@standbygtid mysql]#
mysql> select * from zxydb.t_go;
+----+------+
| a | b |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 5 | 5 |
| 8 | 8 |
| 10 | 10 |
| 11 | 11 |
| 12 | 12 |
| 13 | 13 |
+----+------+
9 rows in set (0.00 sec)
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。