亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mysql增量備份及恢復(fù)的操作方法

 更新時(shí)間:2024年10月10日 16:32:21   作者:goser  
增量備份是在全備或上次增量備份基礎(chǔ)上,只備份新增或修改的文件,減少數(shù)據(jù)量和時(shí)間,binlog記錄數(shù)據(jù)庫(kù)變更,重啟時(shí)創(chuàng)建新日志文件,增量備份復(fù)雜但減輕服務(wù)器負(fù)擔(dān),而binlog幫助精確恢復(fù)數(shù)據(jù)

1 簡(jiǎn)介

1.1 增量備份簡(jiǎn)介

        增量備份是指在一次全備份或上一次增量備份后,以后每次的備份只需備份與前一次相比增加或者被修改的文件。這就意味著,第一次增量備份的對(duì)象是進(jìn)行全備后所產(chǎn)生的增加和修改的文件;第二次增量備份的對(duì)象是進(jìn)行第一次增量備份后所產(chǎn)生的增加和修改的文件,如此類推。這種備份方式最顯著的優(yōu)點(diǎn)就是:沒(méi)有重復(fù)的備份數(shù)據(jù),因此備份的數(shù)據(jù)量不大,備份所需的時(shí)間很短。但增量備份的數(shù)據(jù)恢復(fù)是比較麻煩的。您必須具有上一次全備份和所有增量備份磁帶(一旦丟失或損壞其中的一個(gè)增量,就會(huì)造成恢復(fù)的失?。?,并且它們必須沿著從全備份到依次增量備份的時(shí)間順序逐個(gè)反推恢復(fù),因此這就極大地延長(zhǎng)了恢復(fù)時(shí)間。

        假如我們有一個(gè)數(shù)據(jù)庫(kù),有20G的數(shù)據(jù),每天會(huì)增加10M的數(shù)據(jù),數(shù)據(jù)庫(kù)每天都要全量備份一次,這樣的話服務(wù)器的壓力比較大,因此我們只需要備份增加的這部分?jǐn)?shù)據(jù),這樣減少服務(wù)器的負(fù)擔(dān)。

1.2 binlog簡(jiǎn)介

        binlog日志由配置文件的log-bin選項(xiàng)負(fù)責(zé)啟用,Mysql服務(wù)器將在數(shù)據(jù)根目錄創(chuàng)建兩個(gè)新文 件XXX-bin.001和xxx-bin.index,若配置選項(xiàng)沒(méi)有給出文件名,Mysql將使用主機(jī)名稱命名這兩個(gè)文件,其中.index文件包含一份全體日志文件的清單。   Mysql會(huì)把用戶對(duì)所有數(shù)據(jù)庫(kù)的內(nèi)容和結(jié)構(gòu)的修改情況記入XXX-bin.n文件,而不會(huì)記錄 SELECT和沒(méi)有實(shí)際更新的UPDATE語(yǔ)句。
        當(dāng)MySQL數(shù)據(jù)庫(kù)停止或重啟時(shí),服務(wù)器會(huì)把日志文件記入下一個(gè)日志文件,Mysql會(huì)在重啟時(shí)生成一個(gè)新的binlog日志文件,文件序號(hào)遞增,此外,如果日志文件超過(guò)max_binlog_size系統(tǒng)變量配置的上限時(shí),也會(huì)生成新的日志文件。 

2 binlog日志操作

2.1 開(kāi)啟binlog日志 

    在my.cnf或my.ini中增加

[mysqld] 
log-bin=/data/3306/mysql-bin

 其中:log-bin若不顯示指定存儲(chǔ)目錄,則默認(rèn)存儲(chǔ)在mysql的data目錄下

    binlog_format的幾種格式:(STATEMENT,ROW和MIXED)

    STATEMENT:基于SQL語(yǔ)句的復(fù)制(statement-based replication, SBR)  默認(rèn)的格式
    ROW:基于行的復(fù)制(row-based replication, RBR)
    MIXED:混合模式復(fù)制(mixed-based replication, MBR)

   啟動(dòng)后會(huì)產(chǎn)生mysql-bin.*這樣的文件,每啟動(dòng)一次,就會(huì)增加一個(gè)或者多個(gè)。如果全備的時(shí)候加-F參數(shù)的話也會(huì)增加一個(gè)binlog二進(jìn)制文件或者mysqladmin flush-log也會(huì)增加

[root@moremysql ~]# ll /data/3306/
-rw-rw---- 1 mysql mysql    264 Sep 16 15:31 mysql-bin.000001
-rw-rw---- 1 mysql mysql    616 Sep 17 11:38 mysql-bin.index
-rw-rw---- 1 mysql mysql      6 Sep 17 11:29 mysqld.pid
-rw-r----- 1 mysql root   23377 Sep 17 11:29 mysql_oldboy3306.err
srwxrwxrwx 1 mysql mysql      0 Sep 17 11:29 mysql.sock

 查看binlog開(kāi)啟情況和binlog的設(shè)置大小

mysql> show variables like 'log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | ON    |
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+
mysql> show variables like 'binlog%';
+-----------------------------------------+-----------+
| Variable_name                           | Value     |
+-----------------------------------------+-----------+
| binlog_cache_size                       | 1048576   |
| binlog_direct_non_transactional_updates | OFF       |
| binlog_format                           | STATEMENT |
| binlog_stmt_cache_size                  | 32768     |
+-----------------------------------------+-----------+

 2.2 查看binlog日志內(nèi)容

[root@moremysql ~]# mysqlbinlog  /data/3306/mysql-bin.000009
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#170917 11:19:55 server id 1  end_log_pos 107   Start: binlog v 4, server v 5.5.32-log created 170917 11:19:55
BINLOG '
2+m9WQ8BAAAAZwAAAGsAAAAAAAQANS41LjMyLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
'/*!*/;
# at 107
#170917 11:21:29 server id 1  end_log_pos 150   Rotate to mysql-bin.000010  pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

  日志內(nèi)容部分是不可查看的,這是因?yàn)閎inlog二進(jìn)制日志格式默認(rèn)是STATEMENT,如果是行級(jí)模式ROW就可以查看了,可以用--base64-output=decode-rows -v參數(shù)臨時(shí)用ROW模式來(lái)查看

[root@moremysql ~]# mysqlbinlog --base64-output=decode-rows -v /data/3306/data/mysql-bin.000009
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
mysqlbinlog: File '/data/3306/data/mysql-bin.000009' not found (Errcode: 2)
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

    mysqlbinlog命令參數(shù):
  1、作用:解析binlog日志為sql語(yǔ)句
  2、-d 參數(shù)根據(jù)指定庫(kù)拆分binlog(單表通過(guò)關(guān)鍵字過(guò)濾)
  3、位置參數(shù):--start-position=365 --stop-position=456,精確定位去內(nèi)容
  4、時(shí)間參數(shù) --start-datetime='2017-10-16 17:16:15' --stop-datetime='2017-10-16 17:30:15' 模糊取內(nèi)容,不太精確
  5、-r 將語(yǔ)句導(dǎo)入到指定文件名中,相當(dāng)于重定向>
  6、解析ROW 級(jí)別binlog日志的方法:   mysqlbinlog --base64-output=decode-rows -v mysql-bin.000004

 刪除binlog日志文件的方式有:
  mysql>reset master;清空bin-log
  mysql>PURGE MASTERLOGS TO 'mysql-bim.000005' 刪除mysql-bim.000005之前的bin-log mysql-bim.000005本身保留

3、mysql數(shù)據(jù)庫(kù)備份與恢復(fù)

3.1、備份數(shù)據(jù)庫(kù)

  全備之前的binlog文件,只有一個(gè)binlog文件mysql-bin.000001

[root@moremysql ~]# ll /data/3306/
total 72
drwxr-xr-x 5 mysql mysql  4096 Sep 17 11:29 data
-rw-r--r-- 1 mysql mysql  1982 Sep 17 11:29 my.cnf
-rw-r--r-- 1 root  root   1899 Sep 17 00:22 my.cnf.ori
-rwx------ 1 mysql mysql  1307 Sep 16 15:29 mysql
-rw-rw---- 1 mysql mysql   107 Sep 17 13:01 mysql-bin.000001
-rw-rw---- 1 mysql mysql    28 Sep 17 13:01 mysql-bin.index

  全備

[root@moremysql ~]# mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B -x -F -R --master-data=2 class |gzip >class_$(date +%F).sql.gz

  全備參數(shù)說(shuō)明:

-B指定數(shù)據(jù)庫(kù)
-F刷新日志
-R備份存儲(chǔ)過(guò)程等
-x鎖表
--master-data在備份語(yǔ)句里添加CHANGEMASTER語(yǔ)句以及binlog文件及位置點(diǎn)信息

  全備后的binlog文件,增加了一個(gè)mysql-bin.000002,這個(gè)增加的binlog二進(jìn)制文件就是全備的時(shí)候-F參數(shù)的作用。相當(dāng)于mysqladmin的參數(shù)flush-log或mysql> flush logs;  

[root@moremysql ~]# ll /data/3306/
total 76
drwxr-xr-x 5 mysql mysql  4096 Sep 17 11:29 data
-rw-r--r-- 1 mysql mysql  1982 Sep 17 11:29 my.cnf
-rw-r--r-- 1 root  root   1899 Sep 17 00:22 my.cnf.ori
-rwx------ 1 mysql mysql  1307 Sep 16 15:29 mysql
-rw-rw---- 1 mysql mysql   150 Sep 17 13:04 mysql-bin.000001
-rw-rw---- 1 mysql mysql   107 Sep 17 13:04 mysql-bin.000002

3.2、準(zhǔn)備第一份增量數(shù)據(jù),向庫(kù)class的userinfo表中刪除、插入、更新數(shù)據(jù)

mysql> delete from userinfo  where name='hello';
mysql> delete from userinfo  where name='world';
mysql> insert into userinfo  values(12,'test');
mysql> update  userinfo set name='tiantian' where id=6;

  這時(shí)候?qū)?shù)據(jù)庫(kù)文件的更改都會(huì)記錄到mysql-bin.000002中,這是全備后的增量文件,在增量恢復(fù)的時(shí)候用得到。

3.3、數(shù)據(jù)恢復(fù)

  在數(shù)據(jù)恢復(fù)之前,停止數(shù)據(jù)庫(kù)對(duì)外服務(wù)。如果是在從庫(kù)上恢復(fù)(這個(gè)是事先做好的備份主庫(kù),開(kāi)啟了binlog),還要關(guān)閉slave(因?yàn)殚_(kāi)啟了slave的話,會(huì)從主庫(kù)復(fù)制,那么數(shù)據(jù)恢復(fù)就沒(méi)效果了)

  同時(shí)應(yīng)將增量備份文件復(fù)制一份到其他目錄或關(guān)閉sql_log_bin=off,因?yàn)榛謴?fù)過(guò)程中,會(huì)繼續(xù)寫入語(yǔ)句到binlog,最終導(dǎo)致增量恢復(fù)數(shù)據(jù)部分變得比較混亂。

  查看sql_log_bin狀態(tài)

mysql> show variables like 'sql_log%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | ON    |
| sql_log_off   | OFF   |
+---------------+-------+

  臨時(shí)關(guān)閉sql_log_bin,數(shù)據(jù)恢復(fù)的時(shí)候就不會(huì)將恢復(fù)的數(shù)據(jù)寫入到binlog中,這樣binlog文件就會(huì)保持很清潔。待完全恢復(fù)完成后,再開(kāi)啟sql_log_bin。

mysql> set sql_log_bin=off;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'sql_log%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | OFF   |
| sql_log_off   | OFF   |
+---------------+-------+

  如果是從庫(kù)(備主庫(kù)),要關(guān)掉slave

mysql> stop slave;
mysql> show slave status\G
             Slave_IO_Running: No
            Slave_SQL_Running: No
        Seconds_Behind_Master: NULL

  現(xiàn)在開(kāi)始還原全量數(shù)據(jù):

[root@moremysql ~]# mysql -uroot -p123456  -S /data/3306/mysql.sock <class_2017-09-17.sql

  全量恢復(fù)好后檢查是否恢復(fù)了全量備份時(shí)的數(shù)據(jù):

[root@moremysql ~]# mysql -uroot -p123456  -S /data/3306/mysql.sock -e "use class;select * from userinfo;"
+----+----------+
| id | name     |
+----+----------+
|  1 | goser    |
|  3 | hello    |
|  5 | world    |
|  6 | zhangsan |
|  8 | lisi     |
| 10 | wangwu   |
+----+----------+

  全量恢復(fù)沒(méi)問(wèn)題后再進(jìn)行增量恢復(fù),恢復(fù)被刪除的數(shù)據(jù),更改的保留

[root@moremysql ~]# cp /data/3306/mysql-bin.000002  /opt/

  將mysqlbinlog -r 生成的文件中的delete語(yǔ)句刪掉即可

[root@moremysql ~]# mysqlbinlog /opt/mysql-bin.000002  -r userinfo.sql
[root@moremysql ~]# vim  userinfo.sql
delete from userinfo  where name='hello' ---刪掉這行
delete from userinfo  where name='world'---刪掉這行

  將修改好的binlog增量文件導(dǎo)入到數(shù)據(jù)庫(kù)class中

[root@moremysql ~]# mysql -uroot -p123456  -S /data/3306/mysql.sock class < userinfo.sql

  最后別忘了開(kāi)啟sql_log_bin

mysql> set sql_log_bin=on;

  到此數(shù)據(jù)恢復(fù)全部完成。。。。。

到此這篇關(guān)于mysql增量備份及恢復(fù)的文章就介紹到這了,更多相關(guān)mysql增量備份內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論