1. 程式人生 > >mysql大數據備份及恢復(一)

mysql大數據備份及恢復(一)

日誌記錄 數據恢復 insert 數據庫mysql values

Mysql大數據備份和恢復

MySQL備份一般采取全備份日誌備份MySQL出現故障後可以使用全備份和日誌備份將數據恢復到最後一個二進制日誌備份前的任意位置或時間mysql的二進制日誌記錄著該數據庫的所有增刪改的操作日誌還包括了這些操作的執行時間

Binlog的用途:主從同步、恢復數據庫

使用binlog工具備份

查看binlog是否開啟,因為默認是關閉的

技術分享

從上圖可知off為關閉狀態,一般logbin為只讀,在/etc/my.cnf下開啟

技術分享

重啟數據庫
技術分享

重啟後在目錄下查看是否生成bin日誌,黃色表示為日誌

創建數據庫,表,數據

技術分享

創建表的時候 auto_increment為自增

重新開始一個新的日誌文件

flush logs; #重新生成新的二進制文件

delete from tb1 where id=2;

#刪除id列中的序列號為2的數據方便測試

insert into tb1(name) values(‘tom‘); #創建一個新的數據名為tom

查看數據

技術分享

查看mysql上的二進制文件日誌

技術分享

查看二進制日誌事件

mysql> show binlog events;

+------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

+------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+

| mysql-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.13-log, Binlog ver: 4 |

| mysql-bin.000001 | 123 | Previous_gtids | 1 | 154 | |

| mysql-bin.000001 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘ |

| mysql-bin.000001 | 219 | Query | 1 | 316 | create database test1 |

| mysql-bin.000001 | 316 | Anonymous_Gtid | 1 | 381 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘ |

| mysql-bin.000001 | 381 | Query | 1 | 525 | use `test1`; create table tb1(id int primary key auto_increment,name varchar(20)) |

| mysql-bin.000001 | 525 | Anonymous_Gtid | 1 | 590 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘ |

| mysql-bin.000001 | 590 | Query | 1 | 663 | BEGIN |

| mysql-bin.000001 | 663 | Table_map | 1 | 713 | table_id: 108 (test1.tb1) |

| mysql-bin.000001 | 713 | Write_rows | 1 | 758 | table_id: 108 flags: STMT_END_F |

| mysql-bin.000001 | 758 | Xid | 1 | 789 | COMMIT /* xid=10 */ |

| mysql-bin.000001 | 789 | Anonymous_Gtid | 1 | 854 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘ |

| mysql-bin.000001 | 854 | Query | 1 | 927 | BEGIN |

| mysql-bin.000001 | 927 | Table_map | 1 | 977 | table_id: 108 (test1.tb1) |

| mysql-bin.000001 | 977 | Write_rows | 1 | 1026 | table_id: 108 flags: STMT_END_F |

| mysql-bin.000001 | 1026 | Xid | 1 | 1057 | COMMIT /* xid=11 */ |

| mysql-bin.000001 | 1057 | Rotate | 1 | 1104 | mysql-bin.000002;pos=4 | # 此處為日誌輪換事件,執行flush logs引起的

+------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+

17 rows in set (0.00 sec)

查看指定二進制日誌的事件(上面那個命令只能查看默認1的)

mysql> show binlog events in ‘mysql-bin.000002‘;

+------------------+-----+----------------+-----------+-------------+---------------------------------------+

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

+------------------+-----+----------------+-----------+-------------+---------------------------------------+

| mysql-bin.000002 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.13-log, Binlog ver: 4 |

| mysql-bin.000002 | 123 | Previous_gtids | 1 | 154 | |

| mysql-bin.000002 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘ |

| mysql-bin.000002 | 219 | Query | 1 | 292 | BEGIN |

| mysql-bin.000002 | 292 | Table_map | 1 | 342 | table_id: 108 (test1.tb1) |

| mysql-bin.000002 | 342 | Delete_rows | 1 | 391 | table_id: 108 flags: STMT_END_F |

| mysql-bin.000002 | 391 | Xid | 1 | 422 | COMMIT /* xid=14 */ |

| mysql-bin.000002 | 422 | Anonymous_Gtid | 1 | 487 | SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘ |

| mysql-bin.000002 | 487 | Query | 1 | 560 | BEGIN |

| mysql-bin.000002 | 560 | Table_map | 1 | 610 | table_id: 108 (test1.tb1) |

| mysql-bin.000002 | 610 | Write_rows | 1 | 654 | table_id: 108 flags: STMT_END_F |

| mysql-bin.000002 | 654 | Xid | 1 | 685 | COMMIT /* xid=15 */ |

+------------------+-----+----------------+-----------+-------------+---------------------------------------+

12 rows in set (0.00 sec)

使用mysqlbinlog工具的-v(--verbose)選項,該選項會將行事件重構成被註釋掉的偽SQL語句,如果想看到更詳細的信息可以將該選項給兩次如-vv,這樣可以包含一些數據類型和元信息的註釋內容,如

先切換到binlog所在的目錄下

mysqlbinlog mysql-bin.000001

mysqlbinlog -v mysql-bin.000001

mysqlbinlog -vv mysql-bin.000001

-h,-P-p,-u等,這些參數僅在指定了--read-from-remote-server後有效。
恢復導出binlog日誌

技術分享

恢復完成後查看表的數據是否完整

常見的選項有:

--start-datetime #從二進制日誌中讀取指定時間戳或者本地計算機時間之後的日誌事件

--stop-datetime #從二進制日誌中讀取指定時間戳或者本地計算機時間之前的日誌事件

--start-position #從二進制日誌中讀取指定position 事件位置作為開始

--stop-position #從二進制日誌中讀取指定position 事件位置作為事件截至

技術分享

因為備份得時候把刪除那項跳過了,所以id為2的zhangsan也恢復了

使用mysqldump備份恢復

它是用於備份和數據遷移的工具,一般在數據量比較小的情況下使用如幾個G,當數據比較大的情況下建議不使用;mysqldump可以對單(多)個表、單(多)個數據庫及所有數據庫進行導出操作;

mysqldump [options] db_name [tbl_name ...] #導出指定數據庫或單個表

mysqldump [options] --databases db_name ... #導出多個數據庫

mysqldump [options] --all-databases #導出所有

備份數據庫test1

mysqldump -p123456 --flush-logs test1 > /opt/test1.spl

#備份整個數據庫,並且重新開啟一個新的binlog

mysql -p123456 test1 </opt/test1.spl #從備份的目錄中導入

創建數據測試mysqldump工具

技術分享

查看數據

技術分享

創建備份的目錄及備份數據庫和cp bin.000001二進制文件

技術分享

清楚二進制00000.2之前的日誌

技術分享

刪除數據測試

技術分享

然後在進行備份第二個二進制文件

技術分享

進行數據庫恢復

技術分享

技術分享

查看表的數據是否恢復

技術分享

上面數據已經全部恢復 希望能幫到你

本文出自 “centos7” 博客,請務必保留此出處http://12832314.blog.51cto.com/12822314/1941724

mysql大數據備份及恢復(一)