MySQL備份與恢復簡介
MySQL備份與恢復
數 據庫分邏輯備份\物理備份;物理備份又分冷備和熱備
A.直接複製資料檔案到安全地方進行儲存
B.使用MYSQLHOSTCOPY備分資料
C.使用MYSQLDUMP備份資料
D.使用MYSQL的同步複製,實現資料實時資料同步備份
1) 邏輯備份
常用的邏輯備份主要就是兩種:
l 一種是將資料生成為可以完全重現當前資料庫中的資料的insert語句
l 一種是將資料透過邏輯備份軟體,將資料庫表的資料以特定分隔符進行分割後記錄在文字中。
對於第一種生成insert語句來說我們可以直接使用mysql自帶的工具mysqldump來完成。這種方式不好之處在於可能導致資料的不一致,或是不完整。
解決辦法:一個是透過在資料庫系統中加入寫入鎖,只提供資料庫的查詢服務;第二種是對於支援事務的儲存引擎來說,INNODB BDB可以透過將整個備份過程控制在一個事務中,來達到備份資料的一致性和完整性;並且可以不用影響到資料庫的正常執行。
如何保證資料備份的一致性?
要想保證資料的一致性可以透過以下兩種方法做到:
第一、同一時刻取出所有資料
對於事務支援的儲存引擎,如Innodb或者BDB 等,可以透過控制將整個備份過程在同一個事務中,使用“--single-transaction”選項。
例如:
# mysqldump --single-transaction test > test_backup.sql
第二、資料庫中的資料處於靜止狀態
透過鎖表引數
--lock-tables 每次鎖定一個資料庫的表,此引數是預設為true(見上面備份內容例項);
--lock-all-tables 一次鎖定所有的表,適用於dump的表分別處於各個不同的資料庫中的情況
恢復方式則是透過mysql<backup.sql直接執行的。
例如:mysql -uroot -p mydb1 <bkmydb1.dt
第二種直接生成資料格式。佔用的空間小,資料格式清晰。可是沒有資料庫結構的指令碼。不容易控制
實現方式:透過select******* to outfile from***命令來實現。
例如:mysql> select * into outfile '/tmp/tb1.txt'
-> fields terminated by ','
-> optionally enclosed by '"'
-> lines terminated by '\n' --預設
-> from tb1 limit 50;
恢復方式就是透過,load data infile和mysqlimport命令來做。
這一過程相當的複雜需要實時的進行恢復測試,保證備份資料是可用的。
2) 物理備份
資料庫的物理備份,主要的物件是資料庫的物理資料檔案,日誌檔案以及配置檔案等。物理資料檔案有哪些呢?
一是日誌檔案6大類:錯誤日誌error Log、二進位制日誌binary Log、更新日誌 update log(5.0後被bin log代替)、查詢日誌 query log、慢查詢日誌 slow query log、innodb的redo日誌。
二是資料檔案:對於myisam來說的話,.frm表結構資訊、.myd資料資訊、.myi資料的索引資訊。對於Innodb來說的話.ibd檔案(獨享表空間)和.ibdata(共享表空間)檔案。
三是replication檔案:master.info儲存在slave端的資料目錄下,存放了slave和master的相關資訊,relay log和 relay log index主要儲存了I/O程式從Master端讀取到的binary log資訊,然後由slave端的SQL執行緒從該binary log中讀取解析過的日誌資訊,轉化成master所能執行的query語句。index則是存放binarylog的路徑也就是目錄檔案。
四是系統檔案:如my.cnf、pid檔案是mysqld應用程式中的一個程式檔案存放自己的程式id,還有就是socket檔案它只有在linux下才有的,可以不透過tcp/ip網路協議直接連線mysql
l 如果是做冷備的話,直接複製所有的資料檔案和日誌檔案到備份集存放的地方,
l 熱備的方法針對不多的資料庫有不同的方案
對於MYISAM 儲存引擎來說 ,做法就是給資料庫表加鎖來阻止寫操作,可以直接複製物理檔案,或者也可以透過mysql專門的mysqlhotcopy(原理就是現鎖住表,然後進行操作)程式來完成相應的備份任務。
flush tables with read lock
cp -R test /tmp/backup/test
unlock tables;
innodb 資料庫引擎來說 ,有一款商業軟體ibbackup,線上物理備份功能。還有一款開源的工具xtrabackup;
如果在備份過程中,把INNODB資料檔案備份完成後,會鎖住整個庫,並開始複製MYISAM等非事務引擎的資料和.frm;所以如果你擁有比較多的MYISAM表,鎖庫的時候會持續很長。如果是在主庫上執行,千萬注意。
同樣也只能透過xtrabackup進行增量的備份,其實這一工具只是備份innobd的日誌資訊。
4 xtrabackup/ibbackup
xtrabackup --backup --datadir=/var/lib/mysql/ --target-
dir=/data/backups/mysql/
xtrabackup --backup --defaults-file=/etc/my.cnf --target-
dir=/data/backups/mysql/
物理備份就是備份資料檔案了,比較形象點就是cp下資料檔案,但真正備份的時候自然不是的cp這麼簡單。
(1)使用 xtrabackup 工具
是一個用來備份 MySQL資料庫的開源工具。
主要特點:
<1>. 線上熱備份。可以備份innodb和myisam。innodb主要應用recovery原理。myisam直接複製檔案。
<2>. 支援流備份。可以備份到disk,tape和remote host。–stream=tar ./ | ssh user@remotehost cat “>” /backup/dir/
<3>. 支援增量備份。可以利用lsn和基礎備份目錄來進行增量備份。
<4>. 支援記錄slave上的master log和master position資訊。
<5>. 支援多個程式同時熱備份,xtrabackup的穩定性還是挺好的。
(2)LVM
特點:熱備、支援所有基於本地磁碟的儲存引擎、快速備份、低開銷、容易保持完整性、快速恢復等。
(3)cp + tar
使用直接複製資料庫檔案的方式進行打包備份,需要注意的是執行步驟:鎖表、備份、解表。
恢復也很簡單,直接複製到之前的資料庫檔案的存放目錄即可。
注意:對於Innodb引擎的表來說,還需要備份日誌檔案,即ib_logfile*檔案。因為當Innodb表損壞時,就可以依靠這些日誌檔案來恢復。
(4)mysqlhotcopy
mysqlhotcopy是一個perl程式,是lock tables、flush tables 和cp或scp來快速備份資料庫。
它是備份資料庫或單個表的最快的途徑,但它只能執行在資料庫檔案(包括資料表檔案、資料檔案、索引檔案)所在的機器上。
mysqlhotcopy 只能用於備份MyISAM 。
(5)使用mysql主從複製
mysql的複製是指將主資料庫的DDL和DML操作透過二進位制檔案(bin-log)傳送到從伺服器上,然後在從伺服器上對這些日誌做重新執行的操作,從而使得從伺服器和主伺服器保持資料的同步。
3) mysql 的備份方式
1.mysqldump
效率比較低,備份和還原的速度都很慢,任何資料插入和更新操作都會被掛起
2.mysqlhotcopy
mysqlhotcopy 是專門針對myisam 資料表進行備份,備份的過程中,任何資料插入和更新操作都會被掛起
3.準備一臺從伺服器,專門做備份(master-slave方式)
4.xtrabackup 是 percona 的一個開源專案,可熱備份innodb ,XtraDB,MyISAM(會鎖表)
Xtrabackup有兩個主要的工具:xtrabackup、innobackupex
xtrabackup只能備份InnoDB和XtraDB兩種資料表,而不能備份MyISAM資料表
innobackupex-1.5.1則封裝了xtrabackup,是一個指令碼封裝,所以能同時備份處理innodb和myisam,但在處理myisam時需要加一個讀鎖
?xtra備份原理
記住開始時候的LSN號,然後開始拷備檔案,同時執行一個後臺程式監視重做日誌,並將變化拷備下來到xtrabackup_logfile。
innobackupex可以備份myisam表和frm檔案。當xtrabackup結束後,執行flush tables with read lock,避免資料更改,然後重新整理所有myisam表到磁碟。拷備結束後,釋放鎖。
4) mysqlbinlog
mysqlbinlog 也是一個恢復工具,是基於時間點來處理二進位制檔案的
?備份:直接拷備
?還原:
ü時間點還原:mysqlbinlog --stop-date="2005-04-20 9:59:59"
/var/log/mysql/bin.123456 | mysql -u root –pmypwd
mysqlbinlog --start-date="2005-04-20 10:01:00"
/var/log/mysql/bin.123456| mysql -u root –pmypwd
?日誌點還原:
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd \
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁碟分割槽進行管理的一種機制。
LSN定義:
5) 日誌序號
日誌序號 (LSN) 標識特定日誌檔案記錄在日誌檔案中的位置。
LSN 由 DB2? 產品中的許多元件用來維護資料庫一致性和完整性。除其他作用外,LSN 還對於分割槽資料庫環境中的落實和回滾操作、崩潰和前滾恢復以及資料庫操作同步起非常重要的作用。
日誌檔案中 LSN 的增長率與資料庫活動直接相關聯。也就是說,隨著事務發生並且條目被寫入日誌檔案,LSN 會不斷增大。資料庫中的活動越多,LSN 增長得越快。
日誌序號的上限
在 DB2 V9.5 和較早版本中,日誌序號 (LSN) 是 6 位元組數字。從 FP3 開始,LSN 的範圍在 0x0000 0000 0000(首次建立資料庫時)到 0xFFFF 0000 0000(約 256 太位元組)之間。在 FP3 之前,上限為 0xFFFF FFFF FFFF。隨著記錄被新增到日誌檔案中,LSN 在資料庫生命期不斷增長。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16976507/viewspace-2132761/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 備份與恢復MySql
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- Mysql備份與恢復(1)---物理備份MySql
- MySQL 非常規恢復與物理備份恢復MySql
- Mysql備份與恢復(2)---邏輯備份MySql
- MySQL備份與恢復——基於MyDumper/MyLoader 邏輯備份恢復MySql
- 《入門MySQL—備份與恢復》MySql
- MySQL備份與恢復——實操MySql
- 入門MySQL——備份與恢復MySql
- MySQL備份與恢復操作解析MySql
- Mysql資料備份與恢復MySql
- Mysql備份恢復MySql
- MySQL備份與恢復——基於OUTFILE /LOAD DATA 邏輯備份恢復MySql
- Mysql的幾種備份與恢復MySql
- MySQL入門--備份與恢復(三)MySql
- MySQL入門--備份與恢復(一)MySql
- MySQL入門--備份與恢復(二)MySql
- MySQL 日誌管理、備份與恢復MySql
- RAC備份恢復之Voting備份與恢復
- 【MySQL】MySQL備份和恢復MySql
- 備份與恢復:polardb資料庫備份與恢復資料庫
- Jenkins備份與恢復Jenkins
- Postgresql 備份與恢復SQL
- mysql學習筆記之備份與恢復MySql筆記
- MySQL-19.資料庫備份與恢復MySql資料庫
- Oracle 備份和恢復介紹Oracle
- docker 中 MySQL 備份及恢復DockerMySql
- Oracle 備份 與 恢復 概述Oracle
- DB的備份與恢復
- GitLab的備份與恢復Gitlab
- 《MySQL 入門教程》第 06 篇 備份與恢復MySql
- Linux下MySQL資料庫的備份與恢復LinuxMySql資料庫
- 【MySQL】Xtrabackup備份及恢復指令碼MySql指令碼
- Mysql資料庫備份及恢復MySql資料庫
- MySQL8.4備份恢復快速命令MySql
- MySQL日誌管理,備份和恢復MySql
- MySQL備份和恢復方法彙總MySql
- GitLab的自動備份、清理備份與恢復Gitlab
- MySQL不同儲存引擎的資料備份與恢復MySql儲存引擎