mysql數據備份與恢復

一.備份數據的方式

1.物理備份  

   1.1冷備 cp tar等  

   1.2熱備 mysqlhotcopy    只能備份存儲引擎是myisam的表,依賴perl-DBD-MySQL

2.邏輯備份:用mysql自己提供的備份命令或第三放方軟件提供的備份命令,備份創建庫、表、和產生表記錄時的sql語句。


二.數據備份策略:

1.完整備份         備份數據庫服務器上的所有庫所有表。

2.差異備份         備份自完整備份後所有產生的新數據。

3.增量備份         備份自上一次備份後所有產生的新數據

生產環境一般採用  完整備份+增量備份 或者 完整備份+差異備份


三.邏輯備份與恢復

1.mysqldump命令做數據的完整備份

命令格式:

mysqldump -h數據庫服務器ip -u用戶名 -p密碼  數據庫名 > 目錄名/備份文件名


數據庫名的表示方式:

--all-databases                     備份數據庫服務器上的所有庫所有表

數據庫名                            對某個庫做完整備份

數據庫名  表                        對指定庫裏的指定表做完整備份

-B 數據庫名1 數據庫名2 數據庫N      對某幾個庫做完整備份


#目錄名 :若備份時不寫目錄名備份文件就存放在,執行備份命令時 所在的目錄下

#備份文件名 :可以自己定義,要有標識性,約定俗成mysql的備份文件都以.sql 結尾

                      若文件重名,上一次備份會被當前備份覆蓋。

# 備份用來連接數據庫服務器的用戶,要有被備份的目標庫有相應的權限纔可以。



2.恢復完整備份數據

命令格式:

mysql  -h數據庫服務器ip  -u用戶名   -p密碼   數據庫名   <  目錄名/xxx.sql

mysql  -h數據庫服務器ip   -u用戶名  -p密碼    <   目錄名/xxx.sql


# 數據庫名:可選項,當備份文件中有 create database,use  sql語句時,恢復數據時可以不指定數據庫名。

# 用完整備份文件 恢復數據,只能把數據恢復到備份時的狀態,完整備份之後產生的信息數據是無法恢復。


四.使用binlog日誌做增量備份與數據恢復


1.mysql日誌類型

mysql共有4種類型日誌:

binlog日誌(二進制日誌)  記錄除查詢之外sql語句。

錯誤日誌                  記錄mysql服務在啓動和運行過程中產生的錯誤。

查詢日誌                  記錄執行的所有的sql操作。

慢查詢日誌                只記錄超過指定時間,顯示查詢結果的sql語句。默認超時時間是10秒。


#默認情況下,mysql只開啓錯誤日誌。

#默認情況下日誌都存放在數據庫目錄下。每種日誌文件都默認命名方式。


2.啓用binlog日誌

vim /etc/my.cnf

[mysqld]

log_bin=/binlogdir/filename         //設置存放binlog目錄和文件名,自定義目錄必須讓mysql用戶有寫入權限,目錄不設置則默認在數據庫目錄/var/lib/mysql/下,文件名不設置則默認爲:主機名-bin.000001                                    

max-binlog-size=100M                 //設置binlog日誌文件的大小,不設置則默認爲500M自動生成第二個binlog日誌文件


service  mysql  restart


# 對所有庫操作的使用數據發送改變的sql語句都會寫進當前編號最大的binlog日誌文件裏。

# localhost-bin.index   記錄當前已有binlog日誌文件


3.分析binlog日誌文件內容。

binlog日誌記錄sql語句的方式:

① 時間方式

② 字符偏移量方式


命令格式:

mysqlbinlog  [選項]   binlog日誌文件名

選項:

偏移量

--start-position=100         起始位置

--stop-position=1200         結束位置

時間點:

--start-datetime="YYYY-mm-dd  HH:MM:SS"   起始時間

--stop-datetime="YYYY-mm-dd  HH:MM:SS"    結束時間


# 不加任何選項則默認查看全部日誌內容


4.手動生成新的binlog日誌文件方式:

① mysql>flush logs;

② #mysql -h數據庫服務器IP -u用戶名 -p密碼 -e "flush logs"

③ #mysqldump -h數據庫服務器IP -u用戶名 -p密碼 --flush-logs 數據庫名> /目錄名/xxx.sql

④ service  mysql  restart               //一般不用


5.增量備份數據恢復

原理:使用mysqlbinlog提取歷史sql操作管道給mysql命令重做

命令格式:

mysqlbinlog   [選項]  binlog日誌文件名   |  mysql  -h數據庫服務器ip  -u用戶名  -p密碼   數據庫名


批量恢復增量備份:

mysqlbinlog  `cat localhost-bin.index`| mysql -h數據庫服務器ip -u用戶名 -p密碼  [數據庫名]


6.清理binlog日誌

刪除早於指定編號的binlog日誌文件:

mysql> PURGE  MASTER LOGS TO  'binlog日誌文件名';


刪除所有binlog日誌文件,重建新日誌:

mysql> RESET  MASTER;


五.第三方數據備份軟件Xtrabackup的使用

Xtrabackup是一款強大的在線熱備份工具,備份工程不鎖庫表


1.下載安裝軟件包

rpm -ivh percona-xtrabackup-2.1.6-702.rhel6.x86_64.rpm

依賴包perl-DBD-MySQL

rpm  -ql  percona-xtrabackup

/usr/bin/xtrabackup          mysql服務軟件5.5以下版本

/usr/bin/xtrabackup_55       mysql服務軟件版本5.5

/usr/bin/xtrabackup_56       mysql服務軟件版本5.6


2.命令格式:

xtrabackup_56    <選項>

選項

--backup                           執行備份數據操作

--prepare                          準備恢復數據

--target-dir                       指定備份目錄

--datadir                          指定數據庫目錄

--incremental-basedir              指定對哪個目錄做增量備份

--incremental-dir                  指定用哪個備份目錄做增量恢復


# xtrabackup  只備份表中記錄,不備份表結構。所以用xtrabackup備份的文件恢復數據時庫、表一定要存在。


3.Xtrabackup 完整備份與恢復

mkdir   /mysqlbak/                //創建備份目錄

xtrabackup_56 --backup  --datadir=/var/lib/mysql --target-dir=/mysqlbak  //執行完整備份


xtrabackup_56 --prepare  --datadir=/var/lib/mysql   --target-dir=/mysqlbak  //完整恢復


cp  /mysqlbak/xtrabackdb/*    /var/lib/mysql/xtrabackdb/   //將要恢復的表記錄拷貝回數據庫下的庫裏,並覆蓋  


service  mysql  restart                      //重啓服務就可看到恢復的數據


4.Xtrabackup 增量備份與恢復

#  增量備份時,必須事先有一次完整備份,這樣才知道哪些數據是新產生的數據。

mkdir   /mysqlbak

mkdir   /mysqlbak/first

xtrabackup_56  --backup --datadir=/var/lib/mysql --target-dir=/mysqlbak/first  //完整備份


mkdir   /dbbak/second


xtrabackup_56  --backup  --datadir=/var/lib/mysql  --target-dir=/mysqlbak/second   --incremental-basedir=/mysqlbak/first                              //第一次增量備份


mkdir   /dbbak/three

xtrabackup_56  --backup  --datadir=/var/lib/mysql  --target-dir=/mysqlbak/third   --incremental-basedir=/mysqlbak/second                            //第二次增量備份


增量備份數據恢復:

xtrabackup_56 --prepare --datadir=/var/lib/mysql --target-dir=/mysqlbak/first

                                       

xtrabackup_56   --prepare  --datadir=/var/lib/mysql  --target-dir=/mysqlbak/first  --incremental-dir=/mysqlbak/second


xtrabackup_56   --prepare  --datadir=/var/lib/mysql  --target-dir=/mysqlbak/first  --incremental-dir=/dbbak/third


cp /mysqlbak/first/xtrdb/*    /var/lib/mysql/xtrdb/


service  mysql  restart


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章