備份的主要目的是災難恢復,備份還可以測試應用、回滾數(shù)據(jù)修改、查詢歷史數(shù)據(jù)、審計等
MySQL日志管理
MySQL 的日志默認保存位置為 /usr/local/mysql/data
#配置文件
vim /etc/my.cnf
日志的分類
常見日志有:
錯誤日志,一般查詢日志,慢查詢日志,二進制日志,中繼日志,重做日志,回滾日志
1.錯誤日志
用來記錄當MySQL啟動、停止或運行時發(fā)生的錯誤信息,默認已開啟
vim /etc/my.cnf
#指定日志的保存位置和文件名
log-error=/usr/local/mysql/data/mysql_error.log
2.查詢日志
用來記錄MySQL的所有連接和語句,默認是關閉的
vim /etc/my.cnf
general_log=ON
#指定日志的保存位置和文件名
general_log_file=/usr/local/mysql/data/mysql_general.log
3.二進制日志(binlog)
用來記錄所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)的語句,記錄了數(shù)據(jù)的更改,可用于數(shù)據(jù)恢復,默認已開啟
vim /etc/my.cnf
log_bin=mysql-bin
或
log-bin=mysql-bin
4.中繼日志
一般情況下它在Mysql主從同步(復制)、讀寫分離集群的從節(jié)點開啟。主節(jié)點一般不需要這個日志
5.慢查詢日志
用來記錄所有執(zhí)行時間超過long_query_time秒的語句,可以找到哪些查詢語句執(zhí)行時間長,以便提醒優(yōu)化,默認是關閉的
慢查詢日志也可用來查詢哪些搜索的字段超時,可以選擇是否需要增加索引,加快查詢速度。
vim /etc/my.cnf
slow_query_log=ON
#指定日志的保存位置和文件名
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
#設置超過5秒執(zhí)行的語句被記錄,缺省時為10秒
long_query_time=5
.......
#復制段
log-error=/usr/local/mysql/data/mysql_error.log
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
log-bin=mysql-bin
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5
systemctl restart mysqld
mysql -u root -P
show variables like 'general%'; #查看通用查詢日志是否開啟
show variables like 'log_bin%'; #查看二進制日志是否開啟
show variables like '%slow%'; #查看慢查詢日功能是否開啟
show variables like 'long_query_time'; #查看慢查詢時間設置
set global slow_query_log=ON; #在數(shù)據(jù)庫中設置開啟慢查詢的方法
PS:variables 表示變量;like 表示模糊查詢
#xxx(字段)
xxx% 以xxx為開頭的字段
%xxx 以xxx為結尾的字段
%xxx% 只要出現(xiàn)xxx字段的都會顯示出來
xxx 精準查詢
#二進制日志開啟后,重啟mysql 會在目錄中查看到二進制日志
cd /usr/local/mysql/data
ls
mysql-bin.000001 #開啟二進制日志時會產(chǎn)生一個索引文件及一個索引列表
索引文件:記錄更新語句
索引文件刷新方式:
1、重啟mysql的時候會更新索引文件,用于記錄新的更新語句
2、刷新二進制日志
mysql-bin.index:
二進制日志文件的索引
mysqldump 備份和恢復
數(shù)據(jù)備份和恢復
備份數(shù)據(jù)庫
mysqldump -uroot -p密碼 --databases 庫名 > /備份到的位置并命名
mysqldump -uroot -p123456 --databases school > /opt/mysql/school_01.sql
# -t 表示只備份格式
mysqldump -uroot -p123456 --databases -t school > /opt/mysql/school_01.sql
1.
1.備份命令:
mysqldump -uroot -p123456 --databases school > /opt/mysql/school_01.aql
恢復備份:
mysql -uroot -p123456
drop database school;
exit
mysql -uroot -p123456 < /opt/mysql/school_01.sql
2.
2.當備份時不加--databases,表示針對school庫下的所有表
#備份命令
mysqldump -uroot -p123456 school > /opt/mysql/school_all.sql
#恢復命令
mysql -uroot -p123456
drop database school;
create database school;
exit
mysql -uroot -p123456 school < /opt/mysql/school_all.sql;
通過shell腳本實現(xiàn)自動備份
創(chuàng)建定時任務
0 1 * * 6 /user/local/mysql/bin/mysqldump -uroot -p123456 school
數(shù)據(jù)備份的重要性
備份的主要目的是災難恢復;在生產(chǎn)環(huán)境中,數(shù)據(jù)的安全性至關重要;任何數(shù)據(jù)丟失都可能產(chǎn)生嚴重后果
通常情況下,造成數(shù)據(jù)丟失的原因有一下幾種:
程序錯誤
人為操作錯誤
運算錯誤
磁盤故障
災難(火災、地震、盜竊等)
數(shù)據(jù)備份的類型
從物理與邏輯的角度,備份可分為:
物理備份:對數(shù)據(jù)庫操作系統(tǒng)的物理文件(如:數(shù)據(jù)文件、日志文件等)的備份
這種類型的備份適用于在出現(xiàn)問題的時候需要快速恢復的大型重要數(shù)據(jù)庫。
物理備份又可以成為冷備份(脫機備份)、熱備份(連接備份)和溫備份
1.冷備份(脫機備份):是在關閉數(shù)據(jù)庫的時候進行的(tar)
2.熱備份(聯(lián)機備份):數(shù)據(jù)庫處于運行狀態(tài),依賴于數(shù)據(jù)庫的日志文件(mysqlhotcopy mysqlbackup)
3.溫備份:數(shù)據(jù)庫鎖定表格(不可寫入但可讀)的狀態(tài)下進行備份操作(mysqldump)
邏輯備份:對數(shù)據(jù)庫邏輯組件(如:表等數(shù)據(jù)庫對象)的備份;表示為邏輯數(shù)據(jù)庫結構
適用于可以編輯數(shù)據(jù)值或表結構
從數(shù)據(jù)庫的備份策略角度,備份可分為:
1.完全備份:?
? ? ? ?每次對數(shù)據(jù)進行完整的備份;即對整個數(shù)據(jù)庫、數(shù)據(jù)庫結構和文件結構的備份,保存的是備份完成時刻的數(shù)據(jù)庫,是差異備份與增量備份的基礎。完全備份的備份與恢復操作都非常簡單方便,但是數(shù)據(jù)存在大量的重復,會占用大量的磁盤空間,備份的時間也很長。
????????每次都進行完全備份,會導致備份文件占用空間巨大,并且有大量的重復數(shù)據(jù),恢復時,直接使用完全備份的文件即可
2.差異備份:
? ? ? ?備份那些自從上次完全備份之后被修改過的所有文件;備份的時間節(jié)點是從上次完整備份起,備份數(shù)據(jù)量會越來越大?;謴蛿?shù)據(jù)時,只需恢復上次的完全備份與最后一次的差異備份。
????????每次差異備份,都會備份上一次完全備份之后的數(shù)據(jù),可能會出現(xiàn)重復數(shù)據(jù)。恢復時,先恢復完全備份的數(shù)據(jù),再恢復差異備份的數(shù)據(jù)
3.增量備份:
? ? ? ?只有那些在上次完全備份或者增量備份后被修改的文件才會被備份;以上次完整備份或上次增量備份的時間為時間點,僅備份期間內的數(shù)據(jù)變化,因而備份的數(shù)據(jù)量小,占用空間小,備份速度快。但恢復時,需要從上一次的完整備份開始到最后一次增量備份之間的所有增量依次恢復,如中間某次的備份數(shù)據(jù)損壞,將導致數(shù)據(jù)的丟失。
????????每次增量備份都是備份在上一次完全備份或者增量備份之后的數(shù)據(jù),不會出現(xiàn)重復數(shù)據(jù)的情況,也不會占用額外的磁盤空間,恢復數(shù)據(jù),需要按照次序恢復完全備份和增量備份的數(shù)據(jù)
1、完全備份:每次對數(shù)據(jù)庫進行完整的備份;每次都進行完全備份,會導致文件占用空間巨大,并且有大量重復數(shù)據(jù);恢復時,直接使用完全備份的文件即可;
2、差異備份:每次差異備份,都會備份上一次完全備份之后的數(shù)據(jù),可能會出現(xiàn)備份重復數(shù)據(jù),導致占用額外的磁盤空間;恢復時,先恢復完全備份的數(shù)據(jù),然后在恢復指定的差異備份的數(shù)據(jù);
3、增量備份:只有在上次完全備份或者增量備份后被修改的文件才會被備份;每次增量備份都是備份在上一次完全備份或者增量備份之后的數(shù)據(jù),不會出現(xiàn)備份重復的數(shù)據(jù)情況,也不會在占用額外的磁盤空間;恢復時,需要按照次序恢復完全備份和增量備份的數(shù)據(jù);
備份方式的比較
備份方式比較
備份方式 完全備份 差異備份 增量備份
完全備份時的狀態(tài) 表1、表2 表1、表2 表1、表2
第1次添加內容 創(chuàng)建表3 創(chuàng)建表3 創(chuàng)建表3
備份內容 表1、表2、表3 表3 表3
第2次添加內容 創(chuàng)建表4 創(chuàng)建表4 創(chuàng)建表4
備份內容 表1、表2、表3、表4 表3、表4 表4
邏輯備份的策略(增、全、差異);如何選擇邏輯備份策略(頻率)
合理值區(qū)間????
一周一次的全備,全備的時間需要在不提供業(yè)務的時間區(qū)間進行 PM 10點 AM 5:00之間進行全備
增量:3天/2天/1天一次增量備份
差異:選擇特定的場景進行備份
一個處理(NFS)提供額外空間給與mysql 服務器用文章來源:http://www.zghlxwxcb.cn/news/detail-685510.html
常見備份方法
1.物理冷備
備份時數(shù)據(jù)庫處于關閉狀態(tài),直接打包數(shù)據(jù)庫文件(var);
能夠較好地保證數(shù)據(jù)庫的完整性,一般用于非核心業(yè)務,這類業(yè)務一般都允許中斷;
特點:備份速度快,恢復時也是最為簡單;
通常通過直接打包數(shù)據(jù)庫文件夾(/usr/local/mysql/data)來實現(xiàn)備份。
2.專用備份工具mydump或者mysqlhotcopy
1.mysqldump程序和mysqlhotcopy都可以做備份。
2.mysqldump是客戶端常用邏輯備份程序,能夠產(chǎn)生一組被執(zhí)行以后再現(xiàn)原始數(shù)據(jù)庫對象定義和表數(shù)據(jù)的SQL語句。它可以轉儲一個到多個MySQL數(shù)據(jù)庫,對其進行備份或傳輸?shù)竭h程SQL服務器。mysqldump更為通用,因為它可以備份各種表。
3.mysqlhotcopy僅適用于備份某些存儲引擎(如:MyISAM和ARCHIVE)。
3.啟用二進制日志進行增量備份
flush_logs
進行增量備份,需要刷新二進制日志
MySQL支持增量備份,進行增量備份時必須啟用二進制日志。
二進制日志文件為用戶提供復制,對執(zhí)行備份點后進行的數(shù)據(jù)庫更改所需的信息進行恢復。
如果進行增量備份(包含自上次完全備份或增量備份以來發(fā)生的數(shù)據(jù)修改) ,需要刷新二進制日志。
4.通過第三方工具備份
免費的MySQL熱備份軟件有:Percona、XtraBackup、mysqlbackup
第三方工具Percona、xtraBackup,支持在線熱備份Innodb和xtraDB,也可以支持MySQL表備份,不過MyISAM表的備份要在表鎖的情況下進行。
MySQL完全備份
是對整個數(shù)據(jù)庫、數(shù)據(jù)庫結構和文件結構的備份
保存的是備份完成時刻的數(shù)據(jù)庫
是差異備份與增量備份的基礎
優(yōu)缺點:
1.優(yōu)點:
備份與恢復操作簡單方便
2.缺點:
數(shù)據(jù)存在大量的重復
占用大量的備份空間
備份與恢復時間長
數(shù)據(jù)庫完全備份分類
1.物理冷備份與恢復
關閉MySQL數(shù)據(jù)庫
【如果在進行冷備份的時候,忘記關數(shù)據(jù)庫會出現(xiàn)什么情況?? 會導致在那個時間點去備份的時候,會遺漏一部分數(shù)據(jù)沒有完全備份所有數(shù)據(jù)?!??
使用tar命令直接打包數(shù)據(jù)庫文件夾
【其實也可以不打包,打包的目的就是為了加快速度,并且減少磁盤存儲空間!】
?
直接替換現(xiàn)有MySQL目錄即可
操作
#關閉mysql服務
systemctl stop mysqld
yum -y install xz
#壓縮備份
tar jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
mv /usr/local/mysql/data/ /opt/
systemctl restart mysqld
#模擬故障
mysql -uroot -p123456
drop database school;
#解壓恢復
tar jxvf /opt/mysql_all_2023-08-29.tar.xz -C /usr/local/mysql/data/
2.mysqldump備份與恢復
MySQL自帶的備份工具,可方便實現(xiàn)對MySQL的備份
可以將指定的庫、表導出為SQL 腳本
使用命令mysq|導入備份的數(shù)據(jù)
操作
create table if not exists test2 (id int,name char(10),age int,sex char(4));
#if not exists表示如果不存在表test2就創(chuàng)建它;且如果該表已存在,該SQL語句不會報錯
insert into test2 values(1,'user1',11,'性別');
insert into test2 values(2,'user2',12,'性別');
1.完全備份一個或多個完整的庫 (包括其中所有的表)
#導出的就是數(shù)據(jù)庫腳本文件
mysqldump -u root -p[密碼] --databases [庫名1] [庫名2] ... > /備份路徑/備份文件名.sql
例:
#備份一個kgc庫
mysqldump -u root -p --databases kgc > /opt/kgc.sql
#備份mysql與 kgc兩個庫
mysqldump -u root -p --databases mysql kgc > /opt/mysql_kgc.sql
2.完全備份 MySQL 服務器中所有的庫
mysqldump -u root -p[密碼] --all-databases > /備份路徑/備份文件名.sql
例:
mysqldump -u root -p --all-databases > /opt/all.sql
3.完全備份指定庫中的部分表
mysqldump -u root -p[密碼] 庫名 [表名1] [表名2] ... > /備份路徑/備份文件名.sql
例:
mysqldump -u root -p [-d] kgc info1 info2 > /opt/kgc_info1.sql
#使用“-d”選項,說明只保存數(shù)據(jù)庫的表結構
#不使用“-d"選項,說明表數(shù)據(jù)也進行備份
#做為一個表結構模板
4.查看備份文件
grep -v "^--" /opt/kgc_info1.sql | grep -v "^/" | grep -v "^$"
實驗
MySQL完全備份與恢復
#恢復數(shù)據(jù)庫文章來源地址http://www.zghlxwxcb.cn/news/detail-685510.html
1.使用mysqldump導出的文件,可使用導入的方法
source命令
mysql命令
2.使用source恢復數(shù)據(jù)庫的步驟
登錄到MySQL數(shù)據(jù)庫
執(zhí)行source備份sql腳本的路徑
3.source恢復的示例
MySQL [(none)]> source /backup/all-data.sql
使用source命令恢復數(shù)據(jù)
1.模擬數(shù)據(jù)庫出現(xiàn)問題
mysql -uroot -p123456 #登錄數(shù)據(jù)庫
show databases; #查看數(shù)據(jù)庫信息
drop database school; #刪除數(shù)據(jù)庫school
show databases; #再次查看數(shù)據(jù)庫信息
2.應用示例:
創(chuàng)建備份(對表進行備份)
mysqldump -u root -p[密碼] 庫名 [表名1] [表名2] ... > /備份路徑/備份文件名.sql
mysqldump -uroot -p123456 school class > /opt/class.sql
mysql -uroot -p123456 #登錄數(shù)據(jù)庫查看
mysql -uroot -p123456 -e 'drop table school.info;' #刪除數(shù)據(jù)庫的表
恢復數(shù)據(jù)表
mysql
select * from class; #查詢所有字段
show tables; #查看表信息
或免交互l> source /opt/info.sql
mysql -uroot -p123123 -e 'show tables from school;'
方式二
mysql -uroot -p123456 school < /opt/school.class.sql #恢復class表
mysql -uroot -p123456 -e 'show tables from school;' #查看class表
備份庫/備份庫下的所有表
PS:mysqldump 嚴格來說屬于溫備份,會需要對表進行寫入的鎖定
在全量備份與恢復實驗中,假設現(xiàn)有school庫,school庫中有一個test表,需要注意的一點為:
① 當備份時加 --databases ,表示針對于school庫
#備份命令(備份庫)
mysqldump -uroot -p123456 --databases school > /opt/school_01.sql
#恢復命令過程為:
mysql -uroot -p123456
drop database school;
exit
mysql -uroot -p123456 < /opt/school_01.sql
② 當備份時不加 --databases,表示針對school庫下的所有表
#備份命令
mysqldump -uroot -p123456 school > /opt/school_02.sql
#恢復過程:
mysql -uroot -p123456
drop database school;
create database school;
exit
mysql -uroot -p123456 school < /opt/school_02.sql
#查看school_01.sql 和school_02.sql
主要原因在于兩種方式的備份(前者會從"create databases"開始,而后者則全是針對表格進行操作)
在生產(chǎn)環(huán)境中,可以使用Shell腳本自動實現(xiàn)定時備份(時間頻率需要確認)
#創(chuàng)建定時任務
0 1 * * 6 /usr/local/mysql/bin/mysqldump -uroot -pabc123 kgc info1 > ./kgc_infol_$(date +%Y%m%d).sql ;/usr/local/mysql/bin/mysqladmin -u root -p flush-logs
MySQL 增量備份與恢復
MySQL數(shù)據(jù)庫增量恢復
1.一般恢復
將所有備份的二進制日志內容全部恢復
2.基于位置恢復
數(shù)據(jù)庫在某一時間點可能既有錯誤的操作也有正確的操作
可以基于精準的位置跳過錯誤的操作
發(fā)生錯誤節(jié)點之前的一個節(jié)點,上一次正確操作的位置點停止
3.基于時間點恢復
跳過某個發(fā)生錯誤的時間點實現(xiàn)數(shù)據(jù)恢復
在錯誤時間點停止,在下一個正確時間點開始
MySQL 增量備份
一、增備實驗
1.開啟二進制日志功能
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED #可選,指定二進制日志(binlog)的記錄格式為MIXED(混合輸入)
server-id = 1 #可加可不加該命令
#二進制日志(binlog)有3種不同的記錄格式: STATEMENT (基于SQL語句)、ROW(基于行)、MIXED(混合模式),默認格式是STATEMENT
① STATEMENT(基于SQL語句):
每一條涉及到被修改的sql 都會記錄在binlog中
缺點:日志量過大,如sleep()函數(shù),last_insert_id()>,以及user-defined fuctions(udf)、主從復制等架構記錄日志時會出現(xiàn)問題
總結:增刪改查通過sql語句來實現(xiàn)記錄,如果用高并發(fā)可能會出錯,可能時間差異或者延遲,可能不是我們想象的恢復可能你先刪除或者在修改,可能會倒過來。準確率低
② ROW(基于行)
只記錄變動的記錄,不記錄sql的上下文環(huán)境
缺點:如果遇到update......set....where true 那么binlog的數(shù)據(jù)量會越來越大
總結:update、delete以多行數(shù)據(jù)起作用,來用行記錄下來,
只記錄變動的記錄,不記錄sql的上下文環(huán)境,
比如sql語句記錄一行,但是ROW就可能記錄10行,但是準確性高,高并發(fā)的時候由于所有記錄都記下來,操作量比較大,性能變低
③ MIXED 推薦使用
一般的語句使用statement,函數(shù)使用ROW方式存儲。
systemctl restart mysqld
查看二進制日志文件的內容
cp /usr/local/mysql/data/mysql-bin.000002 /opt/
① mysqlbinlog --no-defaults /opt/mysql-bin.000002
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002
#--base64-output=decode-rows:使用64位編碼機制去解碼(decode)并按行讀?。╮ows)
#-v: 顯示詳細內容
#--no-defaults : 默認字符集(不加會報UTF-8的錯誤)
PS: 可以將解碼后的文件導出為txt格式,方便查閱
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002 > /opt/mysql-bin.000002
1.二進制日志中需要關注的部分
at :開始的位置點
end_log_pos:結束的位置
時間戳:210712 11:50:30
SQL語句
2.進行完全備份(增量備份是基于完全備份的,所以我們直接完全備份數(shù)據(jù)庫)
#備份文件
mysqldump -uroot -p123456 kgc info > /opt/kgc_info1_$(date +%F).sql
#備份數(shù)據(jù)庫
mysqldump -uroot -p123456 school > /opt/school_all_$(date +%F).sql
3.可每天進行增量備份操作,生成新的二進制日志文件(例如:mysql-bin.000002)
mysqladmin -u root -p flush-logs
4.插入新數(shù)據(jù),以模擬數(shù)據(jù)的增加或變更
PS:在第一次完全備份之后刷新二進制文件,在第二個二進制文件中記載著"增量備份的數(shù)據(jù)"
mysql> create database ky30;
Query OK, 1 row affected (0.00 sec)
mysql> use ky30;
Database changed
mysql> create table test1 (id int(4),name varchar(4));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test1 values(1,'one');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test1 values(2,'two');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test1;
+------+------+
| id | name |
+------+------+
| 1 | one |
| 2 | two |
+------+------+
2 rows in set (0.00 sec)
5.再次生成新的二進制日志文件(例如:mysql-bin.000003)
mysqladmin -u root -p flush-logs
#之前的步驟4的數(shù)據(jù)庫操作會保存到mysql-bin.000002文件中,之后我們測試刪除ky30庫的操作會保存在mysql-bin.000003文件中 (以免當我們基于mysql-bin.000002日志進行恢復時,依然會刪除庫)
MySQL增量恢復
1.一般恢復
(1)、模擬丟失更改的數(shù)據(jù)的恢復步驟(直接使用恢復即可)
① 備份ky30庫中test1表
mysqldump -uroot -p123123 ky30 test1 > /opt/ky30_test11.sql
② 刪除ky30庫中test1表
drop table ky30.test1;
③ 恢復test1表
mysql -uroot -p ky30 < info-2023-08-30.sql
#查看日志文件
[root@mysql data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002
(2)、模擬丟失所有數(shù)據(jù)的恢復步驟
① 模擬丟失所有數(shù)據(jù)
[root@mysql data]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ky30 |
| mysql |
| performance_schema |
| school |
| sys |
| test |
+--------------------+
7 rows in set (0.00 sec)
mysql> drop database ky30;
Query OK, 1 row affected (0.00 sec)
mysql> exit
② 基于mysql-bin.000002恢復數(shù)據(jù)庫
mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p
2.斷點恢復
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002
例:
# at 302
#201122 16:41:16
插入了"user3"的用戶數(shù)據(jù)
# at 623
#201122 16:41:24
插入了"user4"的用戶數(shù)據(jù)
(1)、基于位置恢復
① 插入三條數(shù)據(jù)
mysql> use ky30;
mysql> select * from test1;
+------+------+
| id | name |
+------+------+
| 1 | one |
| 2 | two |
+------+------+
2 rows in set (0.00 sec)
mysql> insert into test1 values(3,'true');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test1 values(4,'f');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test1 values(5,'t');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test1;
+------+------+
| id | name |
+------+------+
| 1 | one |
| 2 | two |
| 3 | true |
| 4 | f |
| 5 | t |
+------+------+
5 rows in set (0.00 sec)
#需求:以上id =4的數(shù)據(jù)操作失誤,需要跳過
② 確認位置點,刷新二進制日志并刪除test1表
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000003
960 停止
1066 開始
#刷新日志
mysqladmin -uroot -p123456 flush-logs
mysql> use ky30;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_ky30 |
+----------------+
| test1 |
+----------------+
1 row in set (0.00 sec)
mysql> drop table ky30.test1;
Query OK, 0 rows affected (0.00 sec)
③ 基于位置點恢復
#僅恢復到操作 ID 為“623"之前的數(shù)據(jù),即不恢復"user4"的數(shù)據(jù)
mysqlbinlog --no-defaults --stop-position='623' /opt/mysql-bin.000002 | mysql -uroot -p
#僅恢復"user4"的數(shù)據(jù),跳過"user3"的數(shù)據(jù)恢復
mysqlbinlog --no-defaults --start-position='623' /opt/mysql-bin.000002 | mysql -uroot -p
mysqlbinlog --no-defaults --start-position='400' --stop-position='623' /opt/mysql-bin.000002 | mysql -uroot -p #恢復從位置為400開始到位置為623為止
(2)、基于時間點恢復
mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小時:分鐘:秒' --stop-datetime='年-月-日小時:分鐘:秒' 二進制日志 | mysql -u 用戶名 -p 密碼
#僅恢復到16:41:24 之前的數(shù)據(jù),即不恢復"user4"的數(shù)據(jù)
mysqlbinlog --no-defaults --stop-datetime='2023-08-22 16:41:24' /opt/mysql-bin.000002 | mysql -uroot -p
#僅恢復"user4"的數(shù)據(jù),跳過"user3"的數(shù)據(jù)恢復
mysqlbinlog --no-defaults --start-datetime='2023-08-22 16:41:24' /opt/mysql-bin.000002 | mysql -uroot -p
如果恢復某條SQL語之前的所有數(shù)據(jù),就stop在這個語句的位置節(jié)點或者時間點
如果恢復某條SQL語句以及之后的所有數(shù)據(jù),就從這個語句的位置節(jié)點或者時間點start
到了這里,關于【MySQL】4、MySQL備份與恢復的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!