欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)生的增加和修改的文件,如此類(lèi)推。這種備份方式最顯著的優(yōu)點(diǎn)就是:沒(méi)有重復(fù)的備份數(shù)據(jù),因此備份的數(shù)據(jù)量不大,備份所需的時(shí)間很短。但增量備份的數(shù)據(jù)恢復(fù)是比較麻煩的。您必須具有上一次全備份和所有增量備份磁帶(一旦丟失或損壞其中的一個(gè)增量,就會(huì)造成恢復(fù)的失?。⑶宜鼈儽仨氀刂鴱娜珎浞莸揭来卧隽總浞莸臅r(shí)間順序逐個(gè)反推恢復(fù),因此這就極大地延長(zhǎng)了恢復(fù)時(shí)間。

        假如我們有一個(gè)數(shù)據(jù)庫(kù),有20G的數(shù)據(jù),每天會(huì)增加10M的數(shù)據(jù),數(shù)據(jù)庫(kù)每天都要全量備份一次,這樣的話(huà)服務(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ī)名稱(chēng)命名這兩個(gè)文件,其中.index文件包含一份全體日志文件的清單。   Mysql會(huì)把用戶(hù)對(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à)也會(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à),會(huì)從主庫(kù)復(fù)制,那么數(shù)據(jù)恢復(fù)就沒(méi)效果了)

  同時(shí)應(yīng)將增量備份文件復(fù)制一份到其他目錄或關(guān)閉sql_log_bin=off,因?yàn)榛謴?fù)過(guò)程中,會(huì)繼續(xù)寫(xiě)入語(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ù)寫(xiě)入到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)文章

  • Ubuntu系統(tǒng)安裝mysql超詳細(xì)步驟

    Ubuntu系統(tǒng)安裝mysql超詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于Ubuntu系統(tǒng)安裝mysql的相關(guān)資料,現(xiàn)在的軟件越來(lái)越好安裝,尤其是在ubuntu下安裝軟件,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • Mysql經(jīng)典的“8小時(shí)問(wèn)題”

    Mysql經(jīng)典的“8小時(shí)問(wèn)題”

    MySQL 的默認(rèn)設(shè)置下,當(dāng)一個(gè)連接的空閑時(shí)間超過(guò)8小時(shí)后,MySQL 就會(huì)斷開(kāi)該連接,而 c3p0 連接池則以為該被斷開(kāi)的連接依然有效。
    2015-04-04
  • Mysql提權(quán)的多種姿勢(shì)匯總

    Mysql提權(quán)的多種姿勢(shì)匯總

    這篇文章主要給大家介紹了關(guān)于Mysql提權(quán)的多種姿勢(shì),姿勢(shì)包括寫(xiě)入Webshell、UDF提權(quán)以及MOF提權(quán),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • Linux下MYSQL 5.7 找回root密碼的問(wèn)題(親測(cè)可用)

    Linux下MYSQL 5.7 找回root密碼的問(wèn)題(親測(cè)可用)

    這篇文章主要介紹了Linux下MYSQL 5.7 找回root密碼的問(wèn)題(親測(cè)可用),通過(guò) --skip-grant-tables 找回,新增完成后,:wq 保存退出,重啟mysqld服務(wù),具體內(nèi)容詳情跟隨小編一起看看吧
    2021-10-10
  • MySQL日期格式化yyyy-mm-dd詳解(DATE_FORMAT()函數(shù))

    MySQL日期格式化yyyy-mm-dd詳解(DATE_FORMAT()函數(shù))

    MySQL提供了很多功能強(qiáng)大、方便易用的函數(shù),在進(jìn)行數(shù)據(jù)庫(kù)管理以及數(shù)據(jù)的查詢(xún)和操作時(shí),幫助我們提高對(duì)數(shù)據(jù)庫(kù)的管理效率,下面這篇文章主要給大家介紹了關(guān)于MySQL日期格式化yyyy-mm-dd(DATE_FORMAT()函數(shù))的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 詳解mysql 獲取當(dāng)前日期及格式化

    詳解mysql 獲取當(dāng)前日期及格式化

    本篇文章主要介紹了mysql 獲取當(dāng)前日期及格式化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • mysqldump你可能不知道的參數(shù)

    mysqldump你可能不知道的參數(shù)

    這篇文章主要介紹了mysqldump你可能不知道的參數(shù),幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-11-11
  • Mysql存儲(chǔ)過(guò)程和函數(shù)區(qū)別介紹

    Mysql存儲(chǔ)過(guò)程和函數(shù)區(qū)別介紹

    這篇文章主要介紹了Mysql存儲(chǔ)過(guò)程和函數(shù)的區(qū)別,需要的朋友可以參考下
    2014-03-03
  • MySQL修改字符集的實(shí)戰(zhàn)教程

    MySQL修改字符集的實(shí)戰(zhàn)教程

    這篇文章主要介紹了MySQL修改字符集的方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-01-01
  • 云服務(wù)器Ubuntu_Server_16.04.1安裝MySQL并開(kāi)啟遠(yuǎn)程連接的方法

    云服務(wù)器Ubuntu_Server_16.04.1安裝MySQL并開(kāi)啟遠(yuǎn)程連接的方法

    這篇文章主要介紹了云服務(wù)器Ubuntu_Server_16.04.1安裝MySQL并開(kāi)啟遠(yuǎn)程連接的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02

最新評(píng)論