国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

mysql備份的三種方式講解

發(fā)布時(shí)間:2021-09-27 17:43 來(lái)源:億速云 閱讀:0 作者:chen 欄目: Mysql 歡迎投稿:712375056

這篇文章主要講解了“備份的三種方式講解”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“mysql備份的三種方式講解”吧!

一、備份的目的

做災難恢復:對損壞的數據進(jìn)行恢復和還原
需求改變:因需求改變而需要把數據還原到改變以前
測試:測試新功能是否可用

二、備份需要考慮的問(wèn)題

可以容忍丟失多長(cháng)時(shí)間的數據;
恢復數據要在多長(cháng)時(shí)間內完;
恢復的時(shí)候是否需要持續提供服務(wù);
恢復的對象,是整個(gè)庫,多個(gè)表,還是單個(gè)庫,單個(gè)表。

三、備份的類(lèi)型

1、根據是否需要數據庫離線(xiàn)

冷備(cold backup):需要關(guān)mysql服務(wù),讀寫(xiě)請求均不允許狀態(tài)下進(jìn)行;
溫備(warm backup): 服務(wù)在線(xiàn),但僅支持讀請求,不允許寫(xiě)請求;
熱備(hot backup):備份的同時(shí),業(yè)務(wù)不受影響。

注:

1、這種類(lèi)型的備份,取決于業(yè)務(wù)的需求,而不是備份工具
2、MyISAM不支持熱備,InnoDB支持熱備,但是需要專(zhuān)門(mén)的工具

2、根據要備份的數據集合的范圍
完全備份:full backup,備份全部字符集。
增量備份: incremental backup 上次完全備份或增量備份以來(lái)改變了的數據,不能單獨使用,要借助完全備份,備份的頻率取決于數據的更新頻率。
差異備份:differential backup 上次完全備份以來(lái)改變了的數據。
建議的恢復策略:
完全+增量+二進(jìn)制日志
完全+差異+二進(jìn)制日志

3、根據備份數據或文件

物理備份:直接備份數據文件

優(yōu)點(diǎn):

備份和恢復操作都比較簡(jiǎn)單,能夠跨mysql的版本,
恢復速度快,屬于文件系統級別的

建議:

不要假設備份一定可用,要測試
mysql>check tables;檢測表是否可用
邏輯備份: 備份表中的數據和代碼

優(yōu)點(diǎn):

恢復簡(jiǎn)單、
備份的結果為ASCII文件,可以編輯
與存儲引擎無(wú)關(guān)
可以通過(guò)網(wǎng)絡(luò )備份和恢復

缺點(diǎn):

備份或恢復都需要mysql進(jìn)程參與
備份結果占據更多的空間,
浮點(diǎn)數可能會(huì )丟失精度
還原之后,縮影需要重建

四:備份的對象

1、 數據;
2、配置文件;
3、代碼:存儲過(guò)程、存儲函數、觸發(fā)器
4、os相關(guān)的配置文件
5、復制相關(guān)的配置
6、二進(jìn)制日志

五、備份和恢復的實(shí)現

1、利用select into outfile實(shí)現數據的備份與還原
1.1把需要備份的數據備份出來(lái)

復制代碼 代碼如下:


mysql> use hellodb;     //打開(kāi)hellodb庫
mysql> select * from students;  查看students的屬性
mysql> select * from students where Age > 30 into outfile ‘/tmp/stud.txt' ;   //將年齡大于三十的同學(xué)的信息備份出來(lái)

注意:

備份的目錄路徑必須讓當前運行mysql服務(wù)器的用戶(hù)mysql具有訪(fǎng)問(wèn)權限

備份完成之后需要把備份的文件從tmp目錄復制走,要不就失去備份的目的了

回到tmp目錄下查看剛才備份的文件

[root@www ~]# cd /tmp

[root@www tmp]# cat stud.txt

3Xie Yanke53M216

4Ding Dian32M44

6Shi Qing46M5\N

13Tian Boguang33M2\N

25Sun Dasheng100M\N\N

[root@www tmp]#

你會(huì )發(fā)現是個(gè)文本文件。所以不能直接導入數據庫了。需要使用load data infile 恢復

回到mysql服務(wù)器端,刪除年齡大于30的用戶(hù),模擬數據被破壞

mysql> delete from students where Age > 30;

mysql> load data infile '/tmp/stud.txt' into table students;

2、利用mysqldump工具對數據進(jìn)行備份和還原

mysqldump 常用來(lái)做溫備,所以我們首先需要對想備份的數據施加讀鎖,

2.1 施加讀鎖的方式:

1.直接在備份的時(shí)候添加選項

--lock-all-tables 是對要備份的數據庫的所有表施加讀鎖

--lock-table 僅對單張表施加讀鎖,即使是備份整個(gè)數據庫,它也是在我們備份某張表的時(shí)候才對該表施加讀鎖,因此適用于備份單張表

2、在服務(wù)器端書(shū)寫(xiě)命令,

mysql> flush tables with read lock; 施加鎖,表示把位于內存上的表統統都同步到磁盤(pán)上去,然后施加讀鎖

mysql> flush tables with read lock;釋放讀鎖

但這對于InnoDB存儲引擎來(lái)講,雖然你也能夠請求道讀鎖,但是不代表它的所有數據都已經(jīng)同步到磁盤(pán)上,因此當面對InnoDB的時(shí)候,我們要使 用mysql> show engine innodb status; 看看InnoDB所有的數據都已經(jīng)同步到磁盤(pán)上去了,才進(jìn)行備份操作。

2.2備份的策略:

完全備份+增量備份+二進(jìn)制日志

演示備份的過(guò)程;

2.3 先給數據庫做完全備份:

復制代碼 代碼如下:


[root@www ~]# mysqldump -uroot --single-transaction --master-data=2 --databases hellodb > /backup/hellodb_`date +%F`.sql


--single-transaction: 基于此選項能實(shí)現熱備InnoDB表;因此,不需要同時(shí)使用--lock-all-tables;
--master-data=2  記錄備份那一時(shí)刻的二進(jìn)制日志的位置,并且注釋掉,1是不注釋的
--databases hellodb 指定備份的數據庫

然后回到mysql服務(wù)器端,

2.4回到mysql服務(wù)器端更新數據

復制代碼 代碼如下:


mysql> create table tb1(id int); 創(chuàng )建表
mysql> insert into tb1 values (1),(2),(3);  插入數據,這里只做演示,隨便插入了幾個(gè)數據

2.5先查看完全備份文件里邊記錄的位置:

復制代碼 代碼如下:

[root@www backup]# cat hellodb_2013-09-08.sql | less
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000013', MASTER_LOG_POS=15684; 記錄了二進(jìn)制日志的位置

2.6 在回到服務(wù)器端:

復制代碼 代碼如下:


mysql> show master status; 顯示此時(shí)的二進(jìn)制日志的位置
 從備份文件里邊記錄的位置到我們此時(shí)的位置,即為增量的部分
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      15982 |              |                  |
+------------------+----------+--------------+------------------+

2.7做增量備份

復制代碼 代碼如下:


[root@www backup]# mysqlbinlog --start-position=15694 --stop-position=15982
/mydata/data/mysql-bin.000013 > /backup/hellodb_`date +$F_%H`.sql

2.8再回到服務(wù)器

復制代碼 代碼如下:


mysql> insert into tb1 values (4),(5); 在插入一些數值
mysql> drop database hellodb;   刪除hellodb庫

2.9導出這次得二進(jìn)制日志:

復制代碼 代碼如下:


[root@www backup]# mysqlbinlog --start-position=15982 /mydata/data/mysql-bin.000013 查看刪除操作時(shí)二進(jìn)制日志的位置
[root@www backup]# mysqlbinlog --start-position=15982 --stop-position=16176 /mydata/data/mysql-bin.000013 > /tmp/hellodb.sql  //導出二進(jìn)制日志

2.10先讓mysql離線(xiàn)

回到服務(wù)器端:

復制代碼 代碼如下:


mysql> set sql_log_bin=0;  關(guān)閉二進(jìn)制日志
mysql> flush logs; 滾動(dòng)下日志

2.11模擬數據庫損壞

復制代碼 代碼如下:

mysql> drop database hellodb;

2.12開(kāi)始恢復數據:

復制代碼 代碼如下:


[root@www ]# mysql < /backup/hellodb_2013-09-08.sql  //導入完全備份文件
[root@www ]# mysql < /backup/hellodb_2013-09-08_05.sql //導入增量備份文件
[root@www ]# mysql< hellodb.sql //導入二進(jìn)制文件

驗證完成,顯示結果為我們預想的那樣

注:

1、真正在生產(chǎn)環(huán)境中,我們應該導出的是整個(gè)mysql服務(wù)器中的數據,而不是單個(gè)庫,因此應該使用--all-databases
2、在導出二進(jìn)制日志的時(shí)候,可以直接復制文件即可,但是要注意的是,備份之前滾動(dòng)下日志。
3、利用lvm快照實(shí)現幾乎熱備的數據備份與恢復

3.1策略:

完全備份+二進(jìn)制日志;

3.2準備:

注:事務(wù)日志必須跟數據文件在同一個(gè)LV上;

3.3創(chuàng )建lvm Lvm的創(chuàng )建這里就不多說(shuō)了,想了解話(huà)點(diǎn)擊http://www.jb51.net/LINUXjishu/105937.html

3.4 修改mysql主配置文件存放目錄內的文件的權限與屬主屬組,并初始化mysql

復制代碼 代碼如下:


[root@www ~]# mkdir /mydata/data             //創(chuàng )建數據目錄
[root@www ~]# chown mysql:mysql /mydata/data  //改屬組屬主
[root@www ~]#
[root@www ~]# cd /usr/local/mysql/    //必須站在此目錄下      
[root@www mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data  //初始化mysql

3.5修改配置文件:

復制代碼 代碼如下:


vim /etc/my.cof
datadir=/mydata/data   添加數據目錄
sync_binlog = 1  開(kāi)啟此功能

3.6 啟動(dòng)服務(wù)

復制代碼 代碼如下:


[root@www mysql]# service mysqld start
mysql> set session sql_log_bin=0;  關(guān)閉二進(jìn)制日志
mysql> source /backup/all_db_2013-09-08.sql   讀取備份文件

3.7回到mysql服務(wù)器:

復制代碼 代碼如下:


mysql> FLUSH TABLES WITH READ LOCK; 請求讀鎖
注:不要退出,另起一個(gè)終端:
mysql> SHOW MASTER STATUS;          查看二進(jìn)制文件的位置
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> FLUSH LOGS;  建議滾動(dòng)下日志。這樣備份日志的時(shí)候就會(huì )很方便了

3.8導出二進(jìn)制文件,創(chuàng )建個(gè)目錄單獨存放

復制代碼 代碼如下:


[root@www ~]# mkdir /backup/limian
[root@www ~]# mysql -e 'show master status;' > /backup/limian/binlog.txt
[root@www ~]#

3.9為數據所在的卷創(chuàng )建快照:

復制代碼 代碼如下:

[root@www ~]# lvcreate -L 100M -s -p r -n mysql_snap /dev/myvg/mydata

回到服務(wù)器端,釋放讀鎖

復制代碼 代碼如下:


mysql> UNLOCK TABLES;
[root@www ~]# mount /dev/myvg/mysql_snap /mnt/data
[root@www data]# cp * /backup/limian/
[root@www data]#lvremove /dev/myvg/mylv_snap

3.10更新數據庫的數據,并刪除數據目錄先的數據文件,模擬數據庫損壞

復制代碼 代碼如下:


mysql>  create table limiantb (id int,name CHAR(10));
mysql> insert into limiantb values (1,'tom');
[root@www data]# mysqlbinlog --start-position=187 mysql-bin.000003 > /backup/limian/binlog.sql
[root@www backup]# cd /mydata/data/
[root@www data]#  rm -rf *
[root@www ~]# cp -a /backup/limian/* /mydata/data/
[root@www data]# chown mysql:mysql *

3.11測試

啟動(dòng)服務(wù)

復制代碼 代碼如下:


[root@www data]# service mysqld start
[root@www data]# mysql 登陸測試
mysql> SHOW DATABASES;
mysql> SET sql_log_bin=0
mysql> source/backup/limian/binlog.sql; #二進(jìn)制恢復
mysql> SHOW TABLES;         #查看恢復結果
mysql> SET sql_log_bin=1;   #開(kāi)啟二進(jìn)制日志

注:此方式實(shí)現了接近于熱備的方式備份數據文件,而且數據文件放在lvm中可以根據數據的大小靈活改變lvm的大小,備份的方式也很簡(jiǎn)單。

4、基于Xtrabackup做備份恢復

官方站點(diǎn):www.percona.com

優(yōu)勢:

1、快速可靠的進(jìn)行完全備份
2、在備份的過(guò)程中不會(huì )影響到事務(wù)
3、支持數據流、網(wǎng)絡(luò )傳輸、壓縮,所以它可以有效的節約磁盤(pán)資源和網(wǎng)絡(luò )帶寬。
4、可以自動(dòng)備份校驗數據的可用性。

安裝Xtrabackup

復制代碼 代碼如下:


[root@www ~]# rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.i686.rpm

其最新版的軟件可從 http://www.percona.com/software/percona-xtrabackup/ 獲得

注意:在備份數據庫的時(shí)候,我們應該具有權限,但需要注意的是應該給備份數據庫時(shí)的用戶(hù)最小的權限,以保證安全,

4.1前提:

應該確定采用的是單表一個(gè)表空間,否則不支持單表的備份與恢復。
在配置文件里邊的mysqld段加上

innodb_file_per_table = 1

4.2備份策略
完全備份+增量備份+二進(jìn)制日志
4.3準備個(gè)目錄用于存放備份數據

復制代碼 代碼如下:


[root@www ~]# makdir /innobackup

4.4做完全備份:

復制代碼 代碼如下:


[root@www ~]# innobackupex --user=root --password=mypass /innobackup/

注:

1、只要在最后一行顯示 innobackupex: completed OK!,就說(shuō)明你的備份是正確的。
2、另外要注意的是每次備份之后,會(huì )自動(dòng)在數據目錄下創(chuàng )建一個(gè)以當前時(shí)間點(diǎn)命名的目錄用于存放備份的數據,那我們去看看都有什么

[root@www 2013-09-12_11-03-04]# ls
backup-my.cnf ibdata1 performance_schema xtrabackup_binary xtrabackup_checkpoints
hellodb mysql test xtrabackup_binlog_info xtrabackup_logfile
[root@www 2013-09-12_11-03-04]#
xtrabackup_checkpoints :備份類(lèi)型、備份狀態(tài)和LSN(日志序列號)范圍信息;
xtrabackup_binlog_info :mysql服務(wù)器當前正在使用的二進(jìn)制日志文件及至備份這一刻為止二進(jìn)制日志事件的位置。
xtrabackup_logfile :非文本文件,xtrabackup自己的日志文件
xtrabackup_binlog_pos_innodb :二進(jìn)制日志文件及用于InnoDB或XtraDB表的二進(jìn)制日志文件的當前position。
backup-my.cnf :備份時(shí)數據文件中關(guān)于mysqld的配置

4.5回到mysql服務(wù)器端對數據進(jìn)行更新操作

復制代碼 代碼如下:


mysql> use hellodb;
mysql> delete from students where StuID>=24;

4.6增量備份

復制代碼 代碼如下:


innobackupex --user=root --password=mypass --incremental /innobackup/--incremental-basedir=/innobackup/2013-09-12_11-03-04/
--incremental  指定備份類(lèi)型
--incremental-basedir= 指定這次增量備份是基于哪一次備份的,這里是完全備份文件,這樣可以把增量備份的數據合并到完全備份中去

4.7第二次增量

先去修改數據

復制代碼 代碼如下:


mysql> insert into students (Name,Age,Gender,ClassID,TeacherID) values ('tom',33,'M',2,4);
innobackupex --user=root --password=mypass --incremental /innobackup/ --incremental-basedir=/innobackup/2013-09-12_11-37-01/
 這里只須要把最后的目錄改為第一次增量備份的數據目錄即可

4.8最后一次對數據更改但是沒(méi)做增量備份

復制代碼 代碼如下:

mysql> delete from coc where id=14;

4.9把二進(jìn)制日志文件備份出來(lái),(因為最后一次修改,沒(méi)做增量備份,要依賴(lài)二進(jìn)制日志做時(shí)間點(diǎn)恢復)

復制代碼 代碼如下:

[root@www data]# cp mysql-bin.000003 /tmp/

4.10模擬數據庫崩潰

復制代碼 代碼如下:


[root@www data]# service mysqld stop
[root@www data]# rm -rf *

恢復前準備

4.11對完全備份做數據同步

復制代碼 代碼如下:

[root@www ~]# innobackupex --apply-log --redo-only /innobackup/2013-09-12_11-03-04/

4.12對第一次增量做數據同步

復制代碼 代碼如下:


innobackupex --apply-log --redo-only /innobackup/2013-09-12_11-03-04/ --incremental-basedir=/innobackup/2013-09-12_11-37-01/

4.13對第二次增量做數據同步

復制代碼 代碼如下:


innobackupex --apply-log --redo-only /innobackup/2013-09-12_11-03-04/ --incremental-basedir=/innobackup/2013-09-12_11-45-53/
--apply-log 的意義在于把備份時(shí)沒(méi)commit的事務(wù)撤銷(xiāo),已經(jīng)commit的但還在事務(wù)日志中的應用到數據庫

注:

對于xtrabackup來(lái)講,它是基于事務(wù)日志和數據文件備份的,備份的數據中可能會(huì )包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數據庫文件中的事務(wù),還應該對其做預處理,把已提交的事務(wù)同步到數據文件,未提交的事務(wù)要回滾。因此其備份的數據庫,不能立即拿來(lái)恢復。

預處理的過(guò)程:

首先對完全備份文件只把已提交的事務(wù)同步至數據文件,要注意的是有增量的時(shí)候,不能對事務(wù)做數據回滾,不然你的增量備份就沒(méi)有效果了。

然后把第一次的增量備份合并到完全備份文件內,

以此類(lèi)推,把后幾次的增量都合并到前一次合并之后的文件中,這樣的話(huà),我們只要拿著(zhù)完全備份+二進(jìn)制日志,就可以做時(shí)間點(diǎn)恢復。

4.14數據恢復

復制代碼 代碼如下:


[root@www ~]# service mysqld stop
[root@www data]# rm -rf *  模擬數據庫崩潰
[root@www ~]# innobackupex --copy-back /innobackup/2013-09-12_11-03-04/
--copy-back數據庫恢復,后面跟上備份目錄的位置

4.15檢測:

復制代碼 代碼如下:


[root@www ~]# cd /mydata/data/
[root@www data]# chown mysql:mysql *
[root@www data]#service mysqld start

檢測結果數據正常。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

久久久精品人妻一区二区三区四| 五十老熟妇乱子伦免费观看| 久久精品丝袜高跟鞋| 在线看免费无码AV天堂| 男人到天堂在线a无码| 亚洲AV专区无码观看精品天堂|