Mysql增量備份與恢復

1、增量備份mysql

原理:Mysql中沒有直接提供增量本分的方法,但能夠經過二進制文件間接的進行增量備份。sql

操做:第一步先開啓二進制文件數據庫

[root@localhost data]# vim /etc/my.cnf  [mysqld]  log-bin=mysql_bin[root@localhost data]# systemctl restart mysqld.service 
[root@localhost data]# ls
auto.cnf        ibdata1      ib_logfile1  mysql             mysql_bin.index       performance_schema  sys
ib_buffer_pool  ib_logfile0  ibtmp1       mysql_bin.000001  mysql-slow_query.log  school

此時查看 /usr/local/mysql/data 中存在二進制文件mysql_bin.000001vim

查看二進制文件mysql_bin.000001session

[root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_bin.000001

生成新的二進制文件mysql_bin.000002 ide

[root@localhost data]# mysqladmin -uroot -p flush-logs
Enter password: 
[root@localhost data]# ls
auto.cnf        ibdata1      ib_logfile1  mysql             mysql_bin.000002  mysql-slow_query.log  school
ib_buffer_pool  ib_logfile0  ibtmp1       mysql_bin.000001  mysql_bin.index   performance_schema    sys

2、增量備份的恢復post

首先,在生成二進制文件mysql_bin.000002 後,咱們進去mysql作一些簡單的操做來完成這個恢復的實驗。ui

[root@localhost data]# mysql -uroot -p
mysql> create database myschool;
Query OK, 1 row affected (0.01 sec)

mysql> use myschool;Database changed
mysql> create table info(id int not null primary key auto_increment,name char(10),age int(2));
Query OK, 0 rows affected (0.38 sec)

mysql> insert into info(name,age) values('tom',21);
Query OK, 1 row affected (0.01 sec)

mysql> insert into info(name,age) values('jerry',22);
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;+----+-------+------+| id | name  | age  |+----+-------+------+|  1 | tom   |   21 ||  2 | jerry |   22 |+----+-------+------+2 rows in set (0.00 sec)

而後,咱們執行刷新命令生成新的二進制文件mysql_bin.000003,以便後續刪除庫後進行恢復操做this

[root@localhost data]# mysqladmin -uroot -p flush-logs[root@localhost data]# mysql -uroot -p
mysql> use myschool;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> drop ;
Query OK, 0 rows affected (0.02 sec)

mysql> show databases;spa

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| school             |

| sys                |

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

5 rows in set (0.00 sec)

此時,數據庫中的庫mychool已經不存在了,最後,咱們執行恢復操做

[root@localhost data]# mysqlbinlog --no-defaults mysql_bin.000002 | mysql -uroot -pEnter password: 
[root@localhost data]# mysql -uroot -p
mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || myschool           || mysql              || performance_schema || school             || sys                |+--------------------+6 rows in set (0.00 sec)

myschool數據庫已完成恢復

3、增量備份的異常操做恢復

在上面操做中,若是咱們沒有執行刷新命令生成新的二進制文件mysql_bin.000003,直接mysql> drop database myschool;時,再進行上述恢復操做是沒法恢復數據庫myschool的,這是咱們就須要經過跳過異常操做來進行恢復。

跳過異常操做有兩種方法:

①第一種是基於時間點

首先進入mysql刪除myschool數據庫後查看二進制文件mysql_bin.000003

[root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_bin.000003# at 1523#180903 16:54:28 server id 1  end_log_pos 1627 CRC32 0x9637c595     Query    thread_id=11    exec_time=0    error_code=0SET TIMESTAMP=1535964868/*!*/;SET @@session.sql_mode=1437073414/*!*/;drop database myschool/*!*/;SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;

找到在16:54:28時進行的刪除命令,執行如下操做進行恢復到錯誤操做以前

[root@localhost data]# mysqlbinlog --no-defaults --stop-datetime='201-09-03 16:54:28' /usr/local/mysql/data/mysql_bin.000003 | mysql -uroot -pEnter password:

而後在執行如下操做從正確操做點繼續開始恢復

[root@localhost data]# mysqlbinlog --no-defaults --start-datetime='201-09-03 16:55:10' /usr/local/mysql/data/mysql_bin.000003 | mysql -uroot -pEnter password:

②基於位置點

如上所示:# at 1523爲異常位置起始點, 執行如下操做進行恢復到錯誤操做以前

[root@localhost data]# mysqlbinlog --no-defaults --stop-postion='1523' /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -pEnter password:

而後在執行如下操做從正確操做點繼續開始恢復

[root@localhost data]# mysqlbinlog --no-defaults --start-postion='1555' /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -pEnter password:
相關文章
相關標籤/搜索