本節(jié)主要學(xué)習(xí)了MySQL數(shù)據(jù)庫的備份:概念,數(shù)據(jù)備份的重要性,造成數(shù)據(jù)丟失的原因,備份的類型,常見的備份方法,實(shí)例與應(yīng)用等。
目錄
一、概述
二、數(shù)據(jù)備份的重要性
三、造成數(shù)據(jù)丟失的原因
四、備份類型
1、物理與邏輯角度
①物理備份—對(duì)數(shù)據(jù)庫操作系統(tǒng)的物理文件(如數(shù)據(jù)文件、日志文件等)的備份。
②邏輯備份
2、數(shù)據(jù)庫備份策略角度
(1)完整備份
(2)增量備份
五、常見的備份方法
1、物理備份
2、使用專用備份工具
3、通過啟用二進(jìn)制日志增量備份
4、第三方工具備份
5、注意事項(xiàng)
六、備份
1、完整備份
①打包數(shù)據(jù)庫文件備份
②備份工具備份
1、備份
對(duì)單個(gè)庫進(jìn)行完全備份
對(duì)多個(gè)庫進(jìn)行完全備份
對(duì)所有庫進(jìn)行完全備份
對(duì)表進(jìn)行完全備份
對(duì)表的結(jié)構(gòu)進(jìn)行備份
2、還原(工具)
2、增量備份
特點(diǎn)
MySQL二進(jìn)制日志對(duì)備份的意義
開啟二進(jìn)制日志備份功能
增量恢復(fù)
應(yīng)用場(chǎng)景
方法
七、實(shí)例—MySQL企業(yè)備份案例
安裝mysql(yum?方式)
添加數(shù)據(jù)庫、表,錄入數(shù)據(jù)
先進(jìn)行一次完全備份
進(jìn)行一次日志回滾(生成新的二進(jìn)制日志)
繼續(xù)錄入新的數(shù)據(jù)
?進(jìn)行增量備份
模擬誤操作刪除user_info表
恢復(fù)完全備份
恢復(fù)增量備份
基于時(shí)間點(diǎn)的增量備份恢復(fù)
?只恢復(fù)趙六,不恢復(fù)孫七:
只恢復(fù)孫七,不恢復(fù)趙六:
一、概述
?????????????????????? 數(shù)據(jù)庫備份是指將數(shù)據(jù)庫中的數(shù)據(jù)、表格、視圖、存儲(chǔ)過程、觸發(fā)器等信息備份到另一個(gè)地方,以便在數(shù)據(jù)庫丟失或損壞時(shí)進(jìn)行恢復(fù)。數(shù)據(jù)庫備份是數(shù)據(jù)庫管理中必不可少的一項(xiàng)工作,通過備份可以保護(hù)數(shù)據(jù)庫中的數(shù)據(jù)和業(yè)務(wù)
二、數(shù)據(jù)備份的重要性
??????????????????????? 備份的主要目的是災(zāi)難恢復(fù),備份還可以測(cè)試應(yīng)用,回滾數(shù)據(jù)修改,查詢歷史數(shù)據(jù),審計(jì)等。
三、造成數(shù)據(jù)丟失的原因
??? 程序錯(cuò)誤??????? 人為錯(cuò)誤??? 運(yùn)算失敗??? 磁盤故障???? 災(zāi)難(如火災(zāi)、地震)和盜竊
四、備份類型
1、物理與邏輯角度
①物理備份—對(duì)數(shù)據(jù)庫操作系統(tǒng)的物理文件(如數(shù)據(jù)文件、日志文件等)的備份。
(1)冷備份
??????????????????? 是在關(guān)閉數(shù)據(jù)庫的時(shí)候進(jìn)行的
(2)熱備份
??????????????????? 數(shù)據(jù)庫處于運(yùn)行狀態(tài),這種備份方法依賴于數(shù)據(jù)庫的日志文件
②邏輯備份
?????????? 對(duì)數(shù)據(jù)庫邏輯組件(如表等數(shù)據(jù)庫對(duì)象)的備份,表時(shí)為邏輯數(shù)據(jù)庫結(jié)構(gòu)(create database、 create table等語句)和內(nèi)容(insert語句或分割文本文件)的信息
2、數(shù)據(jù)庫備份策略角度
(1)完整備份
???????????????????? 完整備份指的是備份整個(gè)數(shù)據(jù)庫的所有信息,包括數(shù)據(jù)庫文件中所有的數(shù)據(jù)、表、視圖、存儲(chǔ)過程、觸發(fā)器等。一般來說,完整備份是備份最全面、可靠的方式,但備份文件體積較大,備份時(shí)間也相對(duì)較長(zhǎng)
(2)增量備份
??????????????????????? 增量備份指的是在完整備份的基礎(chǔ)上,每隔一定時(shí)間備份新增的數(shù)據(jù)或修改的數(shù)據(jù)。這種備份方式可以節(jié)省備份時(shí)間和備份文件的空間,但需要配合特定軟件或命令進(jìn)行
五、常見的備份方法
1、物理備份
?????????????????? 物理冷備份時(shí)需要在數(shù)據(jù)庫處于關(guān)閉狀態(tài)下,能夠較好的保證數(shù)據(jù)庫的完整性。物理冷備份以用于非核心業(yè)務(wù),這類業(yè)務(wù)都允許中斷,物理冷備份的特點(diǎn)就是速度快,恢復(fù)時(shí)也是最為簡(jiǎn)單的,通過直接打包數(shù)據(jù)庫文件夾(/usr/local/mysql/data)來實(shí)現(xiàn)備份。
2、使用專用備份工具
mysqldump
mysqlhotcopy
3、通過啟用二進(jìn)制日志增量備份
??????????????????? MySQL支持增量備份,進(jìn)行增量備份時(shí)必須啟用二進(jìn)制日志。二進(jìn)制日志文件為用戶提供復(fù)制。對(duì)執(zhí)行備份點(diǎn)后進(jìn)行的數(shù)據(jù)庫更改所需的信息進(jìn)行備份。如果進(jìn)行增量備份(包含上次完全備份或增量備份以來發(fā)生的數(shù)據(jù)修改),需要刷新二進(jìn)制日志。
4、第三方工具備份
???????????????????? Percona XtraBackup是一個(gè)免費(fèi)的MySQL熱備份軟件,支持在線備份innodb和XtraDB,也可以支持MySQL表備份,
5、注意事項(xiàng)
????????????????? 定期備份,指定備份計(jì)劃,嚴(yán)格遵守
????????????????? 除了完全備份之外,開啟binlog日志功能很重要
????????????????? 使用統(tǒng)一的、容易理解的備份名稱,推薦使用庫名或者表名加上時(shí)間的命名規(guī)則
六、備份
1、完整備份
①打包數(shù)據(jù)庫文件備份
位置 | 源碼包的位置/usr/local/mysql/data/ |
rpm包的位置/var/lib/mysql | |
備份 | 在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表,并寫入數(shù)據(jù) |
停止數(shù)據(jù)庫服務(wù) | |
創(chuàng)建備份目錄 | |
按照特定格式對(duì)數(shù)據(jù)庫目錄進(jìn)行備份 tar? czf? mysql_all-$(date? +%F).tar.gz? /var/lib/mysql/* | |
還原 | 創(chuàng)建還原目錄 |
模擬元數(shù)據(jù)丟失 | |
將解壓之后的數(shù)據(jù)還原值原目錄 | |
登錄查看 |
?例題:誤刪除數(shù)據(jù)庫文件
前提準(zhǔn)備:
?②備份
按照特定格式對(duì)數(shù)據(jù)庫目錄進(jìn)行備份
?停服務(wù)并將 /var/lib/mysql 的所有文件移動(dòng)到指定目錄
?重啟服務(wù)并登錄(發(fā)現(xiàn)輸入正確密碼登錄不了MySQL)
?準(zhǔn)備好提前備份的壓縮文件并解壓到指定目錄
?停止服務(wù)并進(jìn)到 cd /var/lib/mysql/ 刪除所有文件(因?yàn)閯倓倖?dòng)MySQL,登陸時(shí)會(huì)自動(dòng)產(chǎn)生文件)
?進(jìn)入到剛剛解壓好的目錄( ····/var/lib/mysql/ )中移動(dòng)所有文件及目錄到 /var/lib/mysql/? 重啟服務(wù)登錄MySQL
②備份工具備份
1、備份
工具??? mysqldump
對(duì)單個(gè)庫進(jìn)行完全備份
??? mysqldump -u用戶名 -p[密碼] [選項(xiàng)] --databases [數(shù)據(jù)庫名] > /備份路徑/備份文件名
數(shù)據(jù)庫查看庫
備份數(shù)據(jù)庫
?刪除數(shù)據(jù)庫
?利用備份文件恢復(fù)數(shù)據(jù)庫
?登錄數(shù)據(jù)庫查看
對(duì)多個(gè)庫進(jìn)行完全備份
??? mysqldump -u用戶名 -p[密碼] [選項(xiàng)] --databases 庫名1 [庫名2]…… > /備份路徑/備份文件名
備份
?刪除數(shù)據(jù)庫
?恢復(fù)數(shù)據(jù)庫
?登錄數(shù)據(jù)庫查看
對(duì)所有庫進(jìn)行完全備份
??? mysqldump -u用戶名 -p[密碼] [選項(xiàng)] --opt --all-databases > /備份路徑/備份文件名
對(duì)表進(jìn)行完全備份
??? mysqldump -u用戶名 -p[密碼] [選項(xiàng)] 數(shù)據(jù)庫名 表名 > /備份路徑/備份文件名
查看表信息
?備份數(shù)據(jù)表信息
?登錄數(shù)據(jù)庫刪除表并恢復(fù)數(shù)據(jù)
在數(shù)據(jù)庫內(nèi)恢復(fù)數(shù)據(jù)
?
對(duì)表的結(jié)構(gòu)進(jìn)行備份
??? mysqldump -u用戶名 -p[密碼] -d 數(shù)據(jù)庫名 表名 > /備份路徑/備份文件名
2、還原(工具)
?? ?source
?? ???? 登錄mysql 數(shù)據(jù)庫執(zhí)行source? 備份sql腳本路徑
?
??? mysql
?? ???? mysql -u用戶名 -p[密碼] < 庫備份腳本的路徑
?? ???? mysql -u用戶名 -p[密碼] 庫名 < 表備份腳本的路徑
刪除表:用戶信息表
?還原
登錄MySQL 查看
2、增量備份
使用完全備份時(shí),備份與恢復(fù)的時(shí)間過長(zhǎng)
增量備份就是備份自上一次備份之后增加的或改變的文件內(nèi)容
特點(diǎn)
??? 沒有重復(fù)數(shù)據(jù),備份量不大,時(shí)間短
??? 恢復(fù)麻煩,需要上次完全備份及完全備份之后所有的增量備份才能恢復(fù),而且要對(duì)所有增量備份
進(jìn)行逐個(gè)反推恢復(fù)
??? MySQL沒有提供直接的增量備份辦法,可以通過MySQL提供的二進(jìn)制日志(binarylogs(binlog))間接實(shí)現(xiàn)增量備份
MySQL二進(jìn)制日志對(duì)備份的意義
????? 二進(jìn)制日志保存了所有更新或者可能更新數(shù)據(jù)庫的操作。
二進(jìn)制日志在啟動(dòng)MySQL服務(wù)器后開始記錄,并在文件達(dá)到max_binlog_size所設(shè)置的大小或者接收到flush logs命令后重新創(chuàng)建新的日志文件。
開啟二進(jìn)制日志備份功能
???????? MySQL的配置文件的[mysqld]項(xiàng)中加入 log-bin=文件存放路徑/文件前綴,如 log-bin=mysql-bin,然后重啟mysqld服務(wù)。默認(rèn)此配置存在。
???????? 使用mysqld --log-bin=文件存放路徑/文件前綴 重新啟動(dòng)mysqld服務(wù)每周選擇服務(wù)器負(fù)載較輕的時(shí)間段,或者用戶訪問較少的時(shí)間段進(jìn)行備份
增量恢復(fù)
應(yīng)用場(chǎng)景
???????? 人為的SQL語句破壞了數(shù)據(jù)庫
????????? 在進(jìn)行下一次全備之前發(fā)生系統(tǒng)故障導(dǎo)致數(shù)據(jù)庫丟失
????????? 在主從架構(gòu)中,主庫數(shù)據(jù)發(fā)生了故障,保證從庫數(shù)據(jù)一致性
方法
一般恢復(fù) | 備份的二進(jìn)制日志內(nèi)容全部恢復(fù) |
格式: mysqldbinlog [--no-defaults] 增量備份文件 | mysql -u用戶名 -p密碼 | |
基于時(shí)間點(diǎn)的恢復(fù) | 便于跳過某個(gè)發(fā)生錯(cuò)誤的時(shí)間點(diǎn)實(shí)現(xiàn)數(shù)據(jù)恢復(fù) |
格式:從日志開頭截止到某個(gè)時(shí)間點(diǎn)的恢復(fù): | |
mysqlbinlog [--no-defaults] --stop-datetime=’年-月-日 小時(shí):分鐘:秒‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼 | |
從某個(gè)時(shí)間點(diǎn)到日志結(jié)尾的恢復(fù) | mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小時(shí):分鐘:秒‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼 |
從某個(gè)時(shí)間點(diǎn)到某個(gè)時(shí)間點(diǎn)的恢復(fù) | mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小時(shí):分鐘:秒‘ --stop-datetime=’年-月-日 小時(shí):分鐘:秒‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼 |
基于位置的恢復(fù) | 可能在同一時(shí)間點(diǎn)既有錯(cuò)誤的操作也有正確的操作,基于位置進(jìn)行恢復(fù)更加準(zhǔn)確 |
mysqlbinlog --stop-position=‘操作 id‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼 | |
mysqlbinlog --start-position=‘操作 id‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼 |
?一般恢復(fù)
基于時(shí)間點(diǎn)的恢復(fù)
七、實(shí)例—MySQL企業(yè)備份案例
???????????????????? 需求描述:
??????????????????????????????????? 北京移電通信公司的用戶信息數(shù)據(jù)庫為client,用戶資費(fèi)數(shù)據(jù)表為user_info
??????????????????????????????????? 請(qǐng)為該公司每周進(jìn)行完全備份
??????????????????????????????????? 每天為該公司進(jìn)行增量備份
?????????????????????????????????? 新增加的用戶信息如表所示
安裝mysql(yum?方式)
配置文件中添加:character-set-server=utf8
添加數(shù)據(jù)庫、表,錄入數(shù)據(jù)
先進(jìn)行一次完全備份
修改配置文件生成二進(jìn)制日志
server-id=1
log-bin=mysql-bin
進(jìn)行一次日志回滾(生成新的二進(jìn)制日志)
進(jìn)行日志回滾:mysqladmin -uroot -p123456 flush-logs
繼續(xù)錄入新的數(shù)據(jù)
?進(jìn)行增量備份
mysqladmin -uroot -p123456 flush-logs? 生成回滾日志00003
將? mysql-bin.000002回滾日志移動(dòng)到指定目錄
并查看 mysqlbinlog -v /root/backup/mysql-bin.000002
模擬誤操作刪除user_info表
恢復(fù)完全備份
mysql -uroot -p123456 client < /root/backup/client_userinfo-2020-07-30.sql
并查看數(shù)據(jù)庫是否恢復(fù)
恢復(fù)增量備份
mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002 | mysql -uroot -p123456
并查看數(shù)據(jù)是否恢復(fù)
基于時(shí)間點(diǎn)的增量備份恢復(fù)
刪除原有數(shù)據(jù)表
mysql -uroot -p123456 client < /root/backup/client_userinfo-2020-07-30.sql
查看 mysql-bin.000002 的內(nèi)容
?
?信息一
?信息二
?只恢復(fù)趙六,不恢復(fù)孫七:
mysqlbinlog --no-defaults --stop-datetime="2023-07-27 20:14:55" /root/backup/mysql-bin.000002 | mysql -uroot -p123456
?查看數(shù)據(jù)是否成功入庫
只恢復(fù)孫七,不恢復(fù)趙六:
mysqlbinlog --no-defaults --stop-datetime="2023-07-27 20:17:09" /root/backup/mysql-bin.000002 | mysql -uroot -p123456
??查看數(shù)據(jù)是否成功入庫文章來源:http://www.zghlxwxcb.cn/news/detail-610684.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-610684.html
到了這里,關(guān)于Linux系統(tǒng)MySQL數(shù)據(jù)庫的備份及應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!