国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

Linux下實現(xiàn)MySQL數(shù)據(jù)備份和恢復的命令使用全攻略

2024-07-24 13:08:07
字體:
來源:轉載
供稿:網(wǎng)友

這篇文章主要介紹了Linux下實現(xiàn)MySQL數(shù)據(jù)備份和恢復的命令使用全攻略,包括使用Mysqldump和LVM快照以及xtrabackup三種方法,傾力推薦!需要的朋友可以參考下

為了保障數(shù)據(jù)的安全,需要定期對數(shù)據(jù)進行備份。備份的方式有很多種,效果也不一樣。一旦數(shù)據(jù)庫中的數(shù)據(jù)出現(xiàn)了錯誤,就需要使用備份好的數(shù)據(jù)進行還原恢復。從而將損失降到最低。下面我們來了解一下MySQL常見的有三種備份恢復方式:

1、利用Mysqldump+二進制日志實現(xiàn)備份

2、利用LVM快照+二進制日志實現(xiàn)備份

3、使用Xtrabackup備份

一:實驗環(huán)境介紹:

系統(tǒng)介紹:CentOS6.4_X64

數(shù)據(jù)庫版本:mysql-5.5.33

二:基于Mysqldump命令實現(xiàn)備份恢復

2.1、思路概念

Mysqldump是一個邏輯備份命令;意思就是將數(shù)據(jù)庫中的數(shù)據(jù)備份成一個文本文件;也可以說是將表的結構和數(shù)據(jù)存儲在文本文件中。

Mysqldump命令的工作原理很簡單,它先查出需要備份的表的結構,再在文本文件中生成一個CREATE語句。然后,將表中的所有記錄轉換為一條INSTERT語句。這些CREATE語句和INSTERT語句都是還原時使用的。還原數(shù)據(jù)時就可以使用其中的CREATE語句來創(chuàng)建表。使用其中的INSERT語句來還原數(shù)據(jù)。它可以實現(xiàn)整個服務器備份,也可以實現(xiàn)單個或部分數(shù)據(jù)庫、單個或部分表、表中的某些行、存儲過程、存儲函數(shù)、觸發(fā)器的備份;并且能自動記錄備份時刻的二進制日志文件及相應的位置。對于InnoDB存儲引擎來講支持基于單事務模式實現(xiàn)熱備,對于MyISAM則最多支持溫備。

2.2、備份策略

Mysqldump全備+二進制日志增備

2.3、過程實現(xiàn)

(1)Mysqldump全備

由于Mysql數(shù)據(jù)庫默認的為MyISAM存儲引擎所以只有使用溫備(備份同時僅支持讀請求)進行,所以我們要為所有數(shù)據(jù)庫添加讀鎖

 

 
  1. [root@stu18 ~] 
  2. #mysqldump -uroot -pmypass --lock-all-tables --master-data=2 --events --routines--all-databases > /zhao/database_`date +%F`.sql 

解析:–lock-all-tables表示為所有表施加讀鎖;–master-data=2表示在備份文件中記錄當前二進制日志的位置;–events表示備份數(shù)據(jù)的同時備份時間調(diào)度器代碼;–routines表示備份數(shù)據(jù)的同時備份存儲過程和存儲函數(shù);–all-databases表示備份所有庫。

 

 
  1. [root@stu18 zhao] 
  2. # less database_2013-08-13.sql 
  3. --  
  4. #表示注釋項 
  5. -- Position to start replication or point-in-time recovery from 
  6. -- 
  7. -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=14203;  
  8. #這里表示當前處于mysql-bin.000001這個二進制日志中,事件為14203這是通過--master-data=2產(chǎn)生的 
  9. -- 
  10. -- Current Database: `hellodb` 
  11. -- 
  12. CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */

(2)二進制全備

方法一: 導出二進制日志文件內(nèi)容

 

 
  1. [root@stu18 data] 
  2. # mysqlbinlog mysql-bin.000001 >/zhao/binlog_`date +%F`.sql 

方法二:滾動日志復制文件

 

 
  1. mysql> flush logs;  
  2. #滾動日志 
  3. [root@stu18 data] 
  4. # cp mysql-bin.000001 /zhao/mysql-bin.000001 #復制導出二進制文件 

(3)二進制增備

首先添加數(shù)據(jù)信息

 

 
  1. mysql> use hellodb; 
  2. mysql> INSERT INTO students(Name,Age,Gender,ClassID,TeacherID) values ('Yang kang',22,'M',3,3); 

然后二進制增備

 

 
  1. [root@stu18 data] 
  2. # mysqlbinlog --start-position=14203 --stop-position=14527 mysql-bin.000001 > /zhao/binlog_`date +%F_%H`.sql 

解析:–start-position=14203是上次全備之后的二進制事件位置;–stop-position=14527最近一天的二進制事件位置。

2.4、模擬數(shù)據(jù)庫損壞,實現(xiàn)恢復工作

 

 
  1. mysql> DROP DATABASE hellodb;  
  2. #刪除數(shù)據(jù)庫 
  3. ############下面這些過程要在離線狀態(tài)下執(zhí)行############ 
  4. mysql> SET sql_log_bin=0;  
  5. #先關閉二進制日志 
  6. mysql> flush logs;  
  7. #滾動日志 
  8. [root@stu18 ~] 
  9. # mysql -uroot -pmypass < /zhao/database_2013-08-13.sql #導入數(shù)據(jù)庫備份文件 
  10. [root@stu18 ~] 
  11. # mysql -uroot -pmypass < /zhao/binlog_2013-08-13_19.sql #導入增量備份文件 
  12. [root@stu18 ~] 
  13. # mysql -uroot –pmypass #登錄查看,恢復完成 
  14. mysql> SET sql_log_bin=1; 

這種備份方式恢復簡單,但是恢復還原之后索引會出現(xiàn)錯誤需要重建,而且備份結果會占據(jù)很大的空間,請酌情使用。

PS:mysqldump常用命令小結

備份MySQL數(shù)據(jù)庫的命令

 

 
  1. mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 

備份MySQL數(shù)據(jù)庫為帶刪除表的格式

備份MySQL數(shù)據(jù)庫為帶刪除表的格式,能夠讓該備份覆蓋已有數(shù)據(jù)庫而不需要手動刪除原有數(shù)據(jù)庫。

 

  1. mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql 

直接將MySQL數(shù)據(jù)庫壓縮備份

 

 
  1. mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz 

備份MySQL數(shù)據(jù)庫某個(些)表

 

 
  1. mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql 

同時備份多個MySQL數(shù)據(jù)庫

 

 
  1. mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql 

僅僅備份數(shù)據(jù)庫結構

 

 
  1. mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql 

備份服務器上所有數(shù)據(jù)庫

 

 
  1. mysqldump –all-databases > allbackupfile.sql 

還原MySQL數(shù)據(jù)庫的命令

 

 
  1. mysql -hhostname -uusername -ppassword databasename < backupfile.sql 

還原壓縮的MySQL數(shù)據(jù)庫

 

 
  1. gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename 

將數(shù)據(jù)庫轉移到新服務器

 

 
  1. mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename 

三、基于LVM快照實現(xiàn)備份恢復

3.1、思路明細

(1)LVM這種備份方式要求Mysql的數(shù)據(jù)保存在邏輯卷上

(2)需要給Mysql服務器施加讀鎖(mysql>FLUSH TABLES WITH READLOCK;),這里不可直接退出服務器

(3)另起終端為數(shù)據(jù)所在的卷創(chuàng)建快照(lvcreate),保證事務日志和數(shù)據(jù)文件必須在同一卷上(分別創(chuàng)建可能會導致數(shù)據(jù)文件和事務日志不一致,從而可能導致無法正常恢復)

3.2、備份策略

LVM快照全備+二進制日志增備(對于即時點恢復還要恢復至后續(xù)的二進制位置)

3.3、前提條件

(1)創(chuàng)建邏輯卷及掛載邏輯卷,此過程在此就不做演示了

(2)初始化mysql將其數(shù)據(jù)目錄指向/mydata/data

 

 
  1. [root@stu18 ~] 
  2. # cd /usr/local/mysql/ 
  3. [root@stu18 mysql] 
  4. # scripts/mysql_install_db --user=mysql --datadir=/mydata/data 

(3)編輯查看配置文件,重啟服務

 

 
  1. [root@stu18 mysql] 
  2. # vim /etc/my.cnf 
  3. datadir = /mydata/data 
  4. #查看此項是否定義數(shù)據(jù)目錄位置 
  5. sync_binlog=1  
  6. #添加此項,每個事務提交時候,把事務日志從緩存區(qū)寫到日志文件中,并且刷新日志文件的數(shù)據(jù)到磁盤上; 
  7. [root@stu18 mysql] 
  8. # service mysqld start 

3.4、過程展示

(1)確保事務日志和數(shù)據(jù)文件必須在同一卷上

 

 
  1. [root@stu18 ~] 
  2. # ls /mydata/data/ 
  3. hellodb myclass mysql-bin.000003 stu18.magedu.com.err 
  4. ibdata1 mysql mysql-bin.000004 stu18.magedu.com.pid 
  5. ib_logfile0 mysql-bin.000001 mysql-bin.index student 
  6. ib_logfile1 mysql-bin.000002 performance_schema test 

解析:其中ib_logfile0與ib_logfile1是日志文件

(2)施加全局鎖并滾動日志

 

 
  1. mysql> FLUSH TABLES WITH READ LOCK; 
  2. mysql> FLUSH LOGS; 

(3)查看并保存當前正在使用的二進制日志及當前執(zhí)行二進制日志位置(非常重要)

 

 
  1. mysql> SHOW MASTER STATUS; 
  2. +------------------+----------+--------------+------------------+ 
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  4. +------------------+----------+--------------+------------------+ 
  5. | mysql-bin.000004 | 187 | | | 
  6. +------------------+----------+--------------+------------------+ 
  7. [root@stu18 zhao] 
  8. # mysql -uroot -pmypass -e 'SHOW MASTER STATUS;' >/zhao/lvmback-2013-08-14/binlog.txt 

(4)創(chuàng)建快照卷

 

 
  1. [root@stu18 zhao] 
  2. # lvcreate -L 100M -s -p r -n mydata-lvm /dev/vg1/mydata 

(5)立即切換終端釋放鎖

 

 
  1. mysql> UNLOCK TABLES; 

(6)備份數(shù)據(jù)

 

 
  1. [root@stu18 data] 
  2. # cp -a * /zhao/lvmback-2013-08-14/ 

(7)二進制實現(xiàn)增量備份

 

 
  1. mysql> use hellodb;  
  2. #指定默認數(shù)據(jù)庫 
  3. Database changed 
  4. mysql> CREATE TABLE testtb (id int,name CHAR(10));  
  5. #創(chuàng)建表 
  6. Query OK, 0 rows affected (0.35 sec) 
  7. mysql> INSERT INTO testtb VALUES (1,'tom');  
  8. #添加數(shù)據(jù) 
  9. Query OK, 1 row affected (0.09 sec) 
  10. [root@stu18 data] 
  11. # mysqlbinlog --start-position=187 mysql-bin.000004 > /zhao/lvmlogbin_2013-08-14/binlog.sql #日志實現(xiàn)增量備份 

(8)模擬數(shù)據(jù)庫崩潰

 

 
  1. [root@stu18 ~] 
  2. # service mysqld stop 
  3. [root@stu18 ~] 
  4. # cd /mydata/data/ 
  5. [root@stu18 data] 
  6. # rm -rf * 

(9)恢復數(shù)據(jù)

 

 
  1. [root@stu18 ~] 
  2. # cp /zhao/lvmback-2013-08-14/* /mydata/data/ -a #完全備份恢復 
  3. [root@stu18 ~] 
  4. # cd /mydata/data/ #查看恢復數(shù)據(jù)內(nèi)容 
  5. [root@stu18 data] 
  6. # chown -R mysql.mysql * #更改屬主屬組 
  7. [root@stu18 data] 
  8. # service mysqld start #啟動服務 
  9. [root@stu18 data] 
  10. # mysql -uroot –pmypass #登錄測試 

 

 
  1. mysql> SHOW DATABASES;  
  2. #查看數(shù)據(jù)完整性,無測試表testtd使用二進制恢復 
  3. mysql> SET sql_log_bin=0  
  4. #關閉二進制日志 
  5. mysql> source /zhao/lvmlogbin_2013-08-14/binlog.sql;  
  6. #二進制恢復 
  7. mysql> SHOW TABLES;  
  8. #查看恢復結果 
  9. +-------------------+ 
  10. | Tables_in_hellodb | 
  11. +-------------------+ 
  12. | classes | 
  13. | coc | 
  14. | courses | 
  15. | scores | 
  16. | students | 
  17. | teachers | 
  18. | testtb | 
  19. | toc | 
  20. +-------------------+ 
  21. mysql> SET sql_log_bin=1;  
  22. #開啟二進制日志 

此工具是接近于熱備的方式實現(xiàn)的,并且用此方法來備份恢復數(shù)據(jù)速度是非常快的。

四:基于xtrabackup來實現(xiàn)備份恢復

4.1、優(yōu)勢特性

完全以熱備的形式進行,能夠實現(xiàn)快速可靠地完全備份和部分備份,支持增量備份,支持時間點還原,備份過程中不會打擾到事務操作,能夠實現(xiàn)網(wǎng)絡傳輸和壓縮功能從而有效的節(jié)約磁盤空間,備份完成后可自動驗證數(shù)據(jù)是否可用,恢復速度較快等等。更多優(yōu)勢特性請參考http://www.percona.com/software/percona-xtrabackup

注意:以上這些優(yōu)勢特性只能在InnoDB引擎上完美實現(xiàn),而在MyISAM存儲引擎上依然最多只能使用溫備的形式進行并且還不支持增量備份。

另外Xtrabackup更多的高級功能還依賴于Mysql數(shù)據(jù)庫對于InnoDB實現(xiàn)了單獨的表空間,否則也就沒有辦法實現(xiàn)單表導入導出查看方式如下:

 

 
  1. mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_file%'
  2. +--------------------------+----------+ 
  3. | Variable_name | Value | 
  4. +--------------------------+----------+ 
  5. | innodb_file_format | Antelope | 
  6. | innodb_file_format_check | ON | 
  7. | innodb_file_format_max | Antelope | 
  8. | innodb_file_per_table | ON | 
  9. +--------------------------+----------+ 

其中的innodb_file_per_table為ON則表示實現(xiàn)了單表單空間。若為OFF則需要使用mysqldump全備然后更改配置文件刪除原來的數(shù)據(jù)文件并重新初始化服務器最后將數(shù)據(jù)重新導入。所以建議以后在安裝Mysql服務器時將其選項默認設置成1即可(innodb_file_per_table = 1)。單表單空間的數(shù)據(jù)顯示形式為:

 

 
  1. [root@stu18 hellodb] 
  2. # ls 
  3. classes.frm coc.MYD courses.MYI scores.MYI teachers.frm testtb.ibd 
  4. classes.MYD coc.MYI db.opt students.frm teachers.MYD toc.frm 
  5. classes.MYI courses.frm scores.frm students.MYD teachers.MYI toc.MYD 
  6. coc.frm courses.MYD scores.MYD students.MYI testtb.frm toc.MYI 

4.2、安裝Xtrabackup

下載percona-xtrabackup最新的版本為2.1.4(percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm)

安裝:

 

 
  1. [root@stu18 ~] 
  2. # rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm 

若有錯誤無法安裝請安裝perl-DBD-mysql依賴包

 

 
  1. [root@stu18 ~] 
  2. # yum -y install perl-DBD-mysql 

注意:不同的環(huán)境依賴的關系包可能有多個,請依照提示進行配置

4.3、完全備份

使用innobakupex備份時,其會調(diào)用xtrabackup備份所有的InnoDB表,復制所有關于表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發(fā)器和數(shù)據(jù)庫配置信息相關的文件。這些文件會被保存至一個以時間命令的目錄中。完全備份命令如下:

 

 
  1. # innobackupex --user=DBUSER--password=DBUSERPASS /path/to/BACKUP-DIR/ 

實現(xiàn)過程及說明:

 

 
  1. <p>[root@stu18 ~] 
  2. # mkdir /innobackup #創(chuàng)建備份文件目錄 
  3. [root@stu18 ~] 
  4. # innobackupex --user=root --password=mypass /innobackup/ #完全備份 
  5. ################如果執(zhí)行正確其后輸出的幾行信息通常如下############### 
  6. xtrabackup: Transaction log of lsn (1604655) to (1604655) was copied.  
  7. #二進制日志的位置(lsn) 
  8. 130814 07:04:55 innobackupex: All tables unlocked 
  9. innobackupex: Backup created in directory '/innobackup/2013-08-14_07-04-49' 
  10. #備份文件保存的位置 
  11. innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 538898 
  12. 130814 07:04:55 innobackupex: Connection to database server closed 
  13. 130814 07:04:55 innobackupex: completed</p> 

OK! 備份完成

切換至備份文件目錄查看備份的數(shù)據(jù)信息及創(chuàng)建生成的文件:

 

 
  1. <p>[root@stu18 ~] 
  2. # cd /innobackup/2013-08-14_07-04-49/ 
  3. [root@stu18 2013-08-14_07-04-49] 
  4. # ls 
  5. backup-my.cnf myclass student xtrabackup_binlog_info 
  6. hellodb mysql test xtrabackup_checkpoints 
  7. ibdata1 performance_schema xtrabackup_binary xtrabackup_logfile</p> 

針對文件解析:

(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(tài)(如是否已經(jīng)為prepared狀態(tài))和LSN(日志序列號)范圍信息;

每個InnoDB頁(通常為16k大小)都會包含一個日志序列號,即LSN。LSN是整個數(shù)據(jù)庫系統(tǒng)的系統(tǒng)版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發(fā)生改變的。

(2)xtrabackup_binlog_info —— mysql服務器當前正在使用的二進制日志文件及至備份這一刻為止二進制日志事件的位置。

(3)xtrabackup_binary —— 備份中用到的xtrabackup的可執(zhí)行文件;

(4)backup-my.cnf —— 備份時用到的配置選項信息,也就是配置文件中關于mysqld的相關文件配置;

(5) xtrabackup_logfile —— 非文本文件是xtrabackup本身的日志文件;

4.4、準備一個完全備份

一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復操作,因為備份的數(shù)據(jù)中可能會包含尚未提交的事務或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務。因此,此時數(shù)據(jù)文件仍處于不一致狀態(tài)。“準備”的主要作用正是通過回滾未提交的事務及同步已經(jīng)提交的事務至數(shù)據(jù)文件從而使得數(shù)據(jù)文件處于一致性狀態(tài)。

innobakupex命令的–apply-log選項可用于實現(xiàn)上述功能。如下面的命令:

 

 
  1. [root@stu18 ~] 
  2. # innobackupex -apply-log /innobackup/2013-08-14_07-04-49/ 
  3. #############如果執(zhí)行正確,其最后輸出的幾行信息通常如下################ 
  4. xtrabackup: starting shutdown with innodb_fast_shutdown = 1 
  5. 130814 7:39:33 InnoDB: Starting shutdown... 
  6. 130814 7:39:37 InnoDB: Shutdown completed; log sequence number 1606156 
  7. 130814 07:39:37 innobackupex: completed OK! 

4.5、模擬數(shù)據(jù)庫崩潰實現(xiàn)完全恢復

(1)模擬崩潰

 

 
  1. [root@stu18 ~] 
  2. # service mysqld stop 
  3. [root@stu18 ~] 
  4. # cd /mydata/data/ 
  5. [root@stu18 data] 
  6. # rm -rf * 

(2)從完全備份中恢復數(shù)據(jù)(謹記:在恢復數(shù)據(jù)之前千萬不可初始化數(shù)據(jù)庫和啟動服務)

innobackupex命令的–copy-back選項用于執(zhí)行恢復操作,其通過復制所有數(shù)據(jù)相關的文件至mysql服務器DATADIR目錄中來執(zhí)行恢復過程。innobackupex通過backup-my.cnf來獲取DATADIR目錄的相關信息。

 

 
  1. [root@stu18 ~] 
  2. # innobackupex --copy-back /innobackup/2013-08-14_07-04-49/ 
  3. #############如果執(zhí)行正確,其最后輸出的幾行信息通常如下################ 
  4. innobackupex: Starting to copy InnoDB log files 
  5. innobackupex: in '/innobackup/2013-08-14_07-04-49' 
  6. innobackupex: back to original InnoDB log directory '/mydata/data' 
  7. innobackupex: Copying '/innobackup/2013-08-14_07-04-49/ib_logfile0' to '/mydata/data' 
  8. innobackupex: Copying '/innobackup/2013-08-14_07-04-49/ib_logfile1' to '/mydata/data' 
  9. innobackupex: Finished copying back files. 
  10. 130814 07:58:22 innobackupex: completed OK! 

(3)當數(shù)據(jù)恢復至數(shù)據(jù)目錄以后,還需要確保所有數(shù)據(jù)文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動mysqld之前還需要事先修改數(shù)據(jù)文件的屬主和屬組。

 

 
  1. # chown -R mysql:mysql /mydata/data/ 

(4)啟動服務器登陸查看恢復完成。

 

 
  1. [root@stu18 data] 
  2. # service mysqld start 

注意:每一次恢復完成之后一定要重新做一次完全備份工作!!

4.6、使用innobackupex進行增量備份

說明:每個InnoDB的頁面都會包含一個LSN信息,每當相關的數(shù)據(jù)發(fā)生改變,相關的頁面的LSN就會自動增長。這正是InnoDB表可以進行增量備份的基礎,即innobackupex通過備份上次完全備份之后發(fā)生改變的頁面來實現(xiàn)。

第一次改動數(shù)據(jù)實現(xiàn)增量備份

實現(xiàn)增量備份可以使用下面的命令進行:

 

 
  1. [root@stu18 data] 
  2. # innobackupex --user=root --password=mypass --incremental /innobackup --incremental-basedir=/innobackup/2013-08-14_08-14-12/ 

其中,/innobackup指的是完全備份所在的目錄,此命令執(zhí)行結束后,innobackupex命令會在/backup目錄中創(chuàng)建一個新的以時間命名的目錄以存放所有的增量備份數(shù)據(jù)。–incremental-basedir是指向上一次完全備份所在的目錄。

第二次改動數(shù)據(jù)進行增量備份:

 

 
  1. [root@stu18 ~] 
  2. # innobackupex --user=root --password=mypass --incremental /innobackup --incremental-basedir=/innobackup/2013-08-14_08-29-05/ 

第二次增量備份的執(zhí)行命令和第一次大致相同,只有其–incremental-basedir應該指向上一次的增量備份所在的目錄。

第三次改動數(shù)據(jù)還未進行增量備份

 

 
  1. mysql> delete from coc where id=14; 

4.7、使用innobackupex基于完全+增量+二進制日志恢復數(shù)據(jù)

(1)由于筆者這里將二進制日志和數(shù)據(jù)文件寫在了同一個文件目錄下所以在模擬數(shù)據(jù)庫崩潰前必須先復制出二進制日志文件,所以建議看客們將數(shù)據(jù)目錄和二進制目錄分開存放,不要和筆者一樣犯如此二的錯誤。方法如下:

前提是在剛剛建立服務器尚未啟動服務器之前做如下操作;

 

 
  1. mkdir /mybinlog 
  2. #建立一目錄用于存放二進制日志 
  3. chown mysql:mysql /mybinlog 
  4. #更改權限 
  5. vim /etc/my.cnf  
  6. #修改配置文件 
  7. log-bin=/mybinlog/mysql-bin 
  8. #二進制日志目錄及文件名前綴,添加之 

好了言歸正傳復制二進制日志文件:

 

  1. [root@stu18 data] 
  2. # cp mysql-bin.000001/innobackup/ 

(2)模擬服務器崩潰

 

 
  1. [root@stu18 ~] 
  2. # service mysqld stop 
  3. [root@stu18 ~] 
  4. # cd /mydata/data/ 
  5. [root@stu18 data] 
  6. # rm -rf * 

(3)準備備份

首先注意“準備”增量備份與整理完全備份有著一些不同,尤其要注意的是:

1)需要在每個備份(包括完全和各個增量備份)上,將已經(jīng)提交的事務進行“重放”。“重放”之后,所有的備份數(shù)據(jù)將合并到完全備份上。

2)基于所有的備份將未提交的事務進行“回滾”。

完全備份“準備”

 

 
  1. [root@stu18 ~] 
  2. # innobackupex --apply-log --redo-only/innobackup/2013-08-14_08-14-12/ 

第一次增量備份“準備”也就是說將第一次增量備份合并到了完全備份中

 

 
  1. [root@stu18 ~] 
  2. # innobackupex --apply-log--redo-only /innobackup/2013-08-14_08-14-12/--incremental-dir=/innobackup/2013-08-14_08-29-05/ 

第二次增量備份“準備”也就是說將第二次增量備份也合并到了完全備份中

 

  1. [root@stu18 ~] 
  2. # innobackupex --apply-log--redo-only /innobackup/2013-08-14_08-14-12/ --incremental-dir=/innobackup/2013-08-14_09-08-39/ 

其中 –redo-only是只將已提交的事務同步到數(shù)據(jù)文件中,未提交的事務日志不在進行回滾了。

(4)恢復數(shù)據(jù)(基于innobackupex基于完全+增量)

 

 
  1. [root@stu18 ~] 
  2. # innobackupex --copy-back/innobackup/2013-08-14_08-14-12/ 

(5)更改屬組屬主

 

 
  1. [root@stu18 ~] 
  2. # cd /mydata/data/ 
  3. [root@stu18 data] 
  4. # chown -R mysql:mysql * 

(6)啟動查看

 

 
  1. [root@stu18 ~] 
  2. # mysql -uroot -pmypas 
  3. mysql> select * from coc; 
  4. +----+---------+----------+ 
  5. | ID | ClassID | CourseID | 
  6. +----+---------+----------+ 
  7. | 1| 1 | 2 | 
  8. | 2| 1 | 5 | 
  9. | 3| 2 | 2 | 
  10. | 4| 2 | 6 | 
  11. | 5| 3 | 1 | 
  12. | 6| 3 | 7 | 
  13. | 7| 4 | 5 | 
  14. | 8| 4 | 2 | 
  15. | 9| 5 | 1 | 
  16. | 10 | 5 | 9 | 
  17. | 11 | 6 | 3 | 
  18. | 12 | 6 | 4 | 
  19. | 13 | 7 | 4 | 
  20. | 14 | 7 | 3 | 
  21. +----+---------+----------+ 
  22. 14 rows in set (0.00 sec) 

結果顯示數(shù)據(jù)正確完整,但是第三次的改動信息未生效。

(7)基于二進制日志實現(xiàn)數(shù)據(jù)恢復

查看最后一次增量備份二進制日志所在的位置:

 

 
  1. [root@stu18 data] 
  2. # cd /innobackup/2013-08-14_09-08-39/ 
  3. [root@stu18 2013-08-14_09-08-39] 
  4. # cat xtrabackup_binlog_info 
  5. mysql-bin.000001 780 

查看二進制日志文件將未備份數(shù)據(jù)的二進制日志導出

 

 
  1. [root@stu18 innobackup] 
  2. # mysqlbinlog mysql-bin.000001 
  3. # at 780 
  4. #130814 9:20:19 server id 1 end_log_pos 851 Query thread_id=7 exec_time=0 error_code=0 
  5. SET TIMESTAMP=1376443219/*!*/
  6. BEGIN 
  7. /*!*/
  8. # at 851 
  9. #130814 9:20:19 server id 1 end_log_pos 944 Query thread_id=7 exec_time=0 error_code=0 
  10. SET TIMESTAMP=1376443219/*!*/
  11. delete from coc where id=14 
  12. /*!*/
  13. # at 944 
  14. #130814 9:20:19 server id 1 end_log_pos 1016 Query thread_id=7 exec_time=0 error_code=0 
  15. SET TIMESTAMP=1376443219/*!*/
  16. COMMIT 
  17. /*!*/
  18. DELIMITER ; 
  19. # End of log file 
  20. ROLLBACK /* added by mysqlbinlog */
  21. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/
  22. /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/
  23. [root@stu18 innobackup] 
  24. # mysqlbinlog --start-position=780 mysql-bin.000001 > ./all.sql #導出數(shù)據(jù) 

恢復數(shù)據(jù)

 

 
  1. [root@stu18 ~] 
  2. # mysql -uroot –pmypass 
  3. mysql> SET SQL_LOG_BIN=0;  
  4. #關閉二進制日志 
  5. mysql> source /innobackup/all.sql  
  6. #導入數(shù)據(jù) 
  7. mysql> SET SQL_LOG_BIN=1;  
  8. #開啟二進制日志 
  9. mysql> select * from coc;  
  10. #查看數(shù)據(jù),恢復完成 
  11. +----+---------+----------+ 
  12. | ID | ClassID | CourseID | 
  13. +----+---------+----------+ 
  14. | 1 | 1 | 2 | 
  15. | 2 | 1 | 5 | 
  16. | 3 | 2 | 2 | 
  17. | 4 | 2 | 6 | 
  18. | 5 | 3 | 1 | 
  19. | 6 | 3 | 7 | 
  20. | 7 | 4 | 5 | 
  21. | 8 | 4 | 2 | 
  22. | 9 | 5 | 1 | 
  23. | 10 | 5 | 9 | 
  24. | 11 | 6 | 3 | 
  25. | 12 | 6 | 4 | 
  26. | 13 | 7 | 4 | 
  27. +----+---------+----------+ 
  28. 13 rows in set (0.00 sec) 

這種備份恢復方式完全以熱備的形式實現(xiàn)完全備份和增量備份和二進制日志還原數(shù)據(jù),并且恢復速度也很快,是最佳的備份恢復方式!!

總結:

以上三種備份恢復都是可以基于二進制日志文件進行的,因而體現(xiàn)出了二進制日志的重要性,從而映射出了日志的重要性;所以學習查看使用日志文件是學習Mysql的重中之重!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 唐海县| 沂源县| 惠安县| 昭平县| 龙海市| 天水市| 乌鲁木齐市| 呼图壁县| 丁青县| 清苑县| 中山市| 报价| 义乌市| 海南省| 佛冈县| 布尔津县| 区。| 桃园县| 泾阳县| 弥勒县| 辰溪县| 义乌市| 乌拉特后旗| 庆元县| 霍州市| 延安市| 交口县| 揭阳市| 西盟| 西充县| 泰顺县| 锦屏县| 东港市| 龙井市| 双峰县| 舞阳县| 云和县| 军事| 麻城市| 利津县| 辉南县|