博文目錄
一、MySQL完全備份與恢復(fù)
二、數(shù)據(jù)庫(kù)備份類型
三、常見的備份方法
四、數(shù)據(jù)庫(kù)完全備份操作
五、MySQL增量備份與恢復(fù)創(chuàng)新互聯(lián)建站是一家專注于成都做網(wǎng)站、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),揭陽(yáng)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:揭陽(yáng)等地區(qū)。揭陽(yáng)做網(wǎng)站價(jià)格咨詢:18982081108
備份的主要目的是災(zāi)難恢復(fù),備份還可以測(cè)試應(yīng)用、回滾數(shù)據(jù)修改、查詢歷史數(shù)據(jù)、審計(jì)等。
在企業(yè)中數(shù)據(jù)的價(jià)值至關(guān)重要,數(shù)據(jù)保障了企業(yè)業(yè)務(wù)的正常運(yùn)行。因此,數(shù)據(jù)的安全性及數(shù)據(jù)的可靠性是運(yùn)維的重中之重,任何數(shù)據(jù)的丟失都可能對(duì)企業(yè)產(chǎn)生嚴(yán)重的后果。通常情況下造成數(shù)據(jù)丟失的原因如下幾種:
程序錯(cuò)誤
人為操作錯(cuò)誤
運(yùn)算錯(cuò)誤
磁盤故障
災(zāi)難(火災(zāi)、地震)和盜竊
三、常見的備份方法
數(shù)據(jù)庫(kù)備份可以分為物理備份和邏輯備份。物理備份是對(duì)數(shù)據(jù)庫(kù)操作系統(tǒng)的物理文件(如數(shù)據(jù)文件、日志文件等)的備份。這種類型的備份適用于在出現(xiàn)問題時(shí)需要快速恢復(fù)的大型重要數(shù)據(jù)庫(kù)。
物理備份又可以分為冷備份(脫機(jī)備份)、熱備份(聯(lián)機(jī)備份)和溫備份。
- 冷備份:在數(shù)據(jù)庫(kù)關(guān)閉狀態(tài)下進(jìn)行備份操作;
熱備份:在數(shù)據(jù)庫(kù)處于運(yùn)行狀態(tài)時(shí)進(jìn)行備份操作,該備份方法依賴數(shù)據(jù)庫(kù)的日志文件;
- 溫備份:數(shù)據(jù)庫(kù)鎖定表格(不可寫入,但可讀取)的狀態(tài)下進(jìn)行備份;
邏輯備份是對(duì)數(shù)據(jù)庫(kù)邏輯組件(如表等數(shù)據(jù)庫(kù)對(duì)象)的備份,表示為邏輯數(shù)據(jù)庫(kù)結(jié)構(gòu)(create database、create table語(yǔ)句)和內(nèi)容(insert語(yǔ)句或分隔文本文件)的信息。這種類型的備份使用于可以編輯數(shù)據(jù)值或表結(jié)構(gòu)較小的數(shù)據(jù)量,或者在不同的機(jī)器體系上重新創(chuàng)建數(shù)據(jù)。
從數(shù)據(jù)庫(kù)的備份策略角度,數(shù)據(jù)庫(kù)的備份可分為完全備份、差異備份和增量備份。其中呢,完整備份是實(shí)現(xiàn)差異、增量備份的基礎(chǔ)。
完整備份:每次對(duì)數(shù)據(jù)進(jìn)行完整的備份,即對(duì)整個(gè)數(shù)據(jù)庫(kù)的備份。備份與恢復(fù)的操作非常簡(jiǎn)單,但是數(shù)據(jù)存在大量的重復(fù),會(huì)占用大量的磁盤空間,備份的時(shí)間也很長(zhǎng)。
差異備份:備份那些自從上次完全備份之后被修改過的所有文件,備份的時(shí)間點(diǎn)是從上次完整備份起,備份數(shù)據(jù)會(huì)越來越大,恢復(fù)數(shù)據(jù)時(shí),只需恢復(fù)上次的完全備份和最近的一次差異備份。
- 增量備份:只有在那些在上次完全備份或增量備份后被修改的文件才會(huì)被備份,以上次完整備份或上次增量備份的時(shí)間為時(shí)間點(diǎn),僅僅備份這之間的數(shù)據(jù)變化,因而備份的數(shù)據(jù)量也小,占用空間小,備份速度快,但恢復(fù)時(shí),需要從上一次的完整備份開始到最后一次增量備份之間的所有增量依次恢復(fù),一旦中間的數(shù)據(jù)發(fā)生損壞,將導(dǎo)致數(shù)據(jù)的丟失。
MySQL數(shù)據(jù)庫(kù)的備份可以采用很多種方式,如直接打包數(shù)據(jù)庫(kù)文件(物理冷備份)、專用備份工具(mysqldump)、二進(jìn)制日志增量備份、第三方工具備份等。
物理冷備份時(shí)需要在數(shù)據(jù)庫(kù)處于關(guān)閉狀態(tài)下,能夠較好地保證數(shù)據(jù)庫(kù)的完整性。物理冷備份一般用于非核心業(yè)務(wù),這類業(yè)務(wù)一般都允許中斷,物理冷備份的特點(diǎn)就是速度快,恢復(fù)時(shí)也是最為簡(jiǎn)單。
mysqldump程序和mysqlhotcopy都可以做備份。mysqqldump是客戶端常用邏輯備份程序,能夠產(chǎn)生一組被執(zhí)行以再現(xiàn)原始數(shù)據(jù)庫(kù)對(duì)象定義和表數(shù)據(jù)的SQL語(yǔ)句。它可以轉(zhuǎn)儲(chǔ)一個(gè)到多個(gè)MySQL數(shù)據(jù)庫(kù),對(duì)其進(jìn)行備份或傳輸?shù)竭h(yuǎn)程SQL服務(wù)器。mysqldump更為通用,因?yàn)樗梢詡浞莞鞣N表。mysqlhotcopy僅適用于某些存儲(chǔ)引擎。
MySQL支持增量備份,進(jìn)行增量備份時(shí)必須啟用二進(jìn)制日志。二進(jìn)制日志文件為用戶提供復(fù)制,對(duì)執(zhí)行備份點(diǎn)后進(jìn)行的數(shù)據(jù)庫(kù)更改所需的信息進(jìn)行恢復(fù)。如果進(jìn)行增量備份(包含自上次完全備份或增量備份以來發(fā)生的數(shù)據(jù)修改),需要刷新二進(jìn)制日志。
[root@centos01 ~]# mysqladmin -u root password <!--mysql數(shù)據(jù)庫(kù)設(shè)置密碼-->
New password: <!--輸入密碼-->
Confirm new password: <!--確認(rèn)密碼-->
[root@centos01 ~]# mysql -uroot -ppwd@123 <!--登錄MySQL數(shù)據(jù)庫(kù)-->
mysql> create database benet; <!--創(chuàng)建benet數(shù)據(jù)庫(kù)-->
mysql> use benet; <!--切換到benet數(shù)據(jù)庫(kù)創(chuàng)建表-->
mysql> create table 一班學(xué)生成績(jī) (姓名 char(3),班級(jí) char(5),學(xué)號(hào) char(8),語(yǔ)文 char(3),
數(shù)學(xué)char(3),英語(yǔ) char(3),理綜 char(3), primary key (學(xué)號(hào)));
<!--創(chuàng)建表,表名字為一班學(xué)生成績(jī),第一列名字是姓名,第二列名字為班級(jí),第三列名字
為學(xué)號(hào),第四列名字為語(yǔ)文,第五列名字為數(shù)學(xué),第六列名字為英語(yǔ),第七列名字為理綜-->
mysql> insert into 一班學(xué)生成績(jī) value ('張三','一班','20170822','110','105','92','235');
<!--表中插入數(shù)據(jù)-->
mysql> insert into 一班學(xué)生成績(jī) value ('李四','一班','20170820','95','115','110','260');
<!--表中插入數(shù)據(jù)-->
mysql> insert into 一班學(xué)生成績(jī) value ('王五','一班','20170818','95','103','108','270');
<!--表中插入數(shù)據(jù)-->
mysql> insert into 一班學(xué)生成績(jī) value ('趙六','一班','20170816','100','109','112','265');
<!--表中插入數(shù)據(jù)-->
mysql> select * from benet.一班學(xué)生成績(jī); <!--查看一班學(xué)生成績(jī)表中所有數(shù)據(jù)-->
物理冷備份一般用tar命令直接打包數(shù)據(jù)庫(kù)文件夾,而在進(jìn)行備份之前需要使用“systemctl stop mysqld”命令關(guān)閉mysql服務(wù)。
創(chuàng)建一個(gè)/bak目錄作為備份數(shù)據(jù)存儲(chǔ)路徑,使用tar創(chuàng)建備份文件。整個(gè)數(shù)據(jù)庫(kù)文件夾備份屬于完全備份。
[root@centos01 ~]# systemctl stop mysqld <!--停止mysql服務(wù)-->
[root@centos01 ~]mkdir /bak/ <!--創(chuàng)建存儲(chǔ)備份目錄-->
[root@centos01 ~]# tar zcf /bak/mysql_all-$(date +%F).mysql.gz /usr/local/mysql/data/
<!--直接tar打包數(shù)據(jù)庫(kù)文件-->
[root@centos01 ~]# ls /bak/ <!--查看備份的數(shù)據(jù)-->
-rw-r--r-- 1 root root 766598 10月 31 03:57 /bak/mysql_all-2019-10-31.mysql.gz
[root@centos01 ~]mkdir test <!--創(chuàng)建恢復(fù)數(shù)據(jù)目錄-->
[root@centos01 ~]# tar zxvf /bak/mysql_all-2019-10-31.mysql.gz -C ./test/
<!--解壓縮備份數(shù)據(jù)到恢復(fù)目錄-->
[root@centos01 data]# cd /usr/local/mysql/data/ <!--進(jìn)入數(shù)據(jù)原始位置-->
[root@centos01 data]# rm -rf ./* <!--刪除數(shù)據(jù)-->
[root@centos01 ~]# cd ./test/usr/local/mysql/data/ <!--切換到恢復(fù)目錄-->
[root@centos01 date]#mv ./* /usr/local/mysql/data/ <!--將恢復(fù)目錄數(shù)據(jù)恢復(fù)到原始位置-->
[root@centos01 ~]# systemctl start mysqld <!--啟動(dòng)mysql服務(wù)-->
通過mysqldump命令可以將指定的庫(kù)、表或全部的庫(kù)導(dǎo)出為SQL腳本,便于該命令在不同版本的MySQL服務(wù)器上使用。
[root@centos01 ~]# mysqldump -uroot -ppwd@123 --opt --all-databases > ./test/benet_databases.sql <!--備份所有庫(kù),opt選項(xiàng)是優(yōu)化執(zhí)行速度-->
[root@centos01 ~]# mysql -uroot -p <!--登錄數(shù)據(jù)庫(kù)-->
Enter password: <!--數(shù)據(jù)密碼-->
mysql> show databases; <!--查看所有數(shù)據(jù)庫(kù)-->
+--------------------+
| Database |
+--------------------+
| information_schema |
| benet |
| mysql |
| performance_schema |
| test |
+--------------------+
mysql> drop database benet; <!--刪除benet數(shù)據(jù)庫(kù)-->
mysql> show databases; <!--查看數(shù)據(jù)庫(kù)是否刪除-->
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
[root@centos01 ~]# mysql -u root -p < ./test/benet_databases.sql
Enter password: <!--恢復(fù)所有數(shù)據(jù)庫(kù)-->
mysql> show databases; <!--查看數(shù)據(jù)庫(kù)是否恢復(fù)-->
+--------------------+
| Database |
+--------------------+
| information_schema |
| benet |
| mysql |
| performance_schema |
| test |
+--------------------+
mysql> source ./test/benet_databases.sql
<!--也可以通過這種方法恢復(fù)誤刪除的數(shù)據(jù)庫(kù)-->
[root@centos01 ~]# mysqldump -uroo t -ppwd@123 benet 一班學(xué)生成績(jī) > ./test/benet_一班學(xué)生成績(jī).sql
<!--備份數(shù)據(jù)庫(kù)下的表-->
[root@centos01 ~]# mysql -uroot -p <!--登錄數(shù)據(jù)庫(kù)-->
Enter password: <!--輸入密碼-->
mysql> use benet; <!--切換到benet數(shù)據(jù)庫(kù)-->
mysql> drop table 一班學(xué)生成績(jī); <!--刪除一班學(xué)生成績(jī)表-->
mysql> show tables; <!--查看表是否刪除-->
Empty set (0.00 sec)
[root@centos01 ~]# mysql -uroot -p benet < ./test/benet_一班學(xué)生成績(jī).sql
<!--恢復(fù)誤刪除的表-->
[root@centos01 ~]# mysql -uroot -p <!--登錄數(shù)據(jù)庫(kù)-->
Enter password: <!--輸入密碼-->
mysql> use benet; <!--切換到benet數(shù)據(jù)庫(kù)-->
Database changed
mysql> show tables; <!--查看誤刪除的表是否恢復(fù)-->
+--------------------+
| Tables_in_benet |
+--------------------+
| 一班學(xué)生成績(jī) |
+--------------------+
1 row in set (0.00 sec)
使用mysqldump進(jìn)行完全備份,備份的數(shù)據(jù)中有重復(fù)數(shù)據(jù),備份時(shí)間與恢復(fù)時(shí)間過長(zhǎng)。而增量備份就是備份自上一次備份之后增加或改變的文件或內(nèi)容。
與完全備份不同,增量備份沒有重復(fù)數(shù)據(jù),備份量不大,時(shí)間短;但其恢復(fù)麻煩,需要上次完全備份及完全備份之后所有的增量備份才能恢復(fù),而且要對(duì)所有增量備份進(jìn)行逐個(gè)反推恢復(fù)。可以通過MySQL提供的二進(jìn)制日志間接實(shí)現(xiàn)增量備份。
二進(jìn)制日志保存了所有更新或者可能更新數(shù)據(jù)庫(kù)的操作。二進(jìn)制日志在啟動(dòng)MySQL服務(wù)器后開始記錄,并在文件達(dá)到二進(jìn)制日志所設(shè)置的最大值或者接收到flush logs命令后重新創(chuàng)建新的日志文件,生成二進(jìn)制文件序列,并及時(shí)把這些日志保存到安全的存儲(chǔ)位置,即可完成一個(gè)時(shí)間段的增量備份。
要進(jìn)行MySQL的增量備份,首先要開啟二進(jìn)制日志功能,開啟MySQL的二進(jìn)制日志功能的實(shí)現(xiàn)方法如下:
[root@centos01 ~]# vim /etc/my.cnf <!--進(jìn)入MySQL配置文件-->
....... <!--此處省略部分內(nèi)容-->
log-bin=mysql-bin <!--開啟二進(jìn)制日志功能-->
[root@centos01 ~]# systemctl restart mysqld <!--重啟MySQL服務(wù)-->
[root@centos01 ~]# ls -l /usr/local/mysql/data/
...... <!--此處省略部分內(nèi)容-->
-rw-rw---- 1 mysql mysql 27299 10月 31 00:00 mysql-bin.000001
-rw-rw---- 1 mysql mysql 1031892 10月 31 00:00 mysql-bin.000002
-rw-rw---- 1 mysql mysql 1574 10月 31 14:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql 507535 11月 1 09:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql 507229 11月 1 09:40 mysql-bin.000005
-rw-rw---- 1 mysql mysql 95 11月 1 09:37 mysql-bin.index
drwx------ 2 mysql mysql 4096 10月 31 00:00 performance_schema
drwxr-xr-x 2 mysql mysql 20 10月 30 23:56 test
[root@centos01 ~]# mysqladmin -uroot -ppwd@123 flush-logs <!--刷新二進(jìn)制日志-->
[root@centos01 ~]# ls -l /usr/local/mysql/data/ <!--查看二進(jìn)制日志文件-->
...... <!--此處省略部分內(nèi)容-->
-rw-rw---- 1 mysql mysql 27299 10月 31 00:00 mysql-bin.000001
-rw-rw---- 1 mysql mysql 1031892 10月 31 00:00 mysql-bin.000002
-rw-rw---- 1 mysql mysql 1574 10月 31 14:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql 507535 11月 1 09:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql 507272 11月 1 09:49 mysql-bin.000005
-rw-rw---- 1 mysql mysql 107 11月 1 09:49 mysql-bin.000006
-rw-rw---- 1 mysql mysql 114 11月 1 09:49 mysql-bin.index
drwx------ 2 mysql mysql 4096 10月 31 00:00 performance_schema
drwxr-xr-x 2 mysql mysql 20 10月 30 23:56 test
[root@centos01 ~]# mysql -uroot -ppwd@123 <!--登錄mysql數(shù)據(jù)庫(kù)-->
mysql> use benet; <!--切換到benet數(shù)據(jù)庫(kù)-->
mysql> insert into 一班學(xué)生成績(jī) value ('李寧','二班','20170824','92','98','105','235');
<!--錄入新的數(shù)據(jù)-->
Query OK, 1 row affected (0.01 sec)
mysql> insert into 一班學(xué)生成績(jī) value ('陳銘','二班','20170826','111','107','96','204');
<!--錄入新的數(shù)據(jù)-->
Query OK, 1 row affected (0.00 sec)
mysql> select *from 一班學(xué)生成績(jī); <!--查看新數(shù)據(jù)是否錄入-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名 | 班級(jí) | 學(xué)號(hào) | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | 理綜 |
+--------+--------+----------+--------+--------+--------+--------+
| 趙六 | 一班 | 20170816 | 100 | 109 | 112 | 265 |
| 王五 | 一班 | 20170818 | 95 | 103 | 108 | 270 |
| 李四 | 一班 | 20170820 | 95 | 115 | 110 | 260 |
| 張三 | 一班 | 20170822 | 110 | 105 | 92 | 235 |
| 李寧 | 二班 | 20170824 | 92 | 98 | 105 | 235 |
| 陳銘 | 二班 | 20170826 | 111 | 107 | 96 | 204 |
+--------+--------+----------+--------+--------+--------+--------+
6 rows in set (0.00 sec)
[root@centos01 ~]# mysqladmin -uroot -ppwd@123 flush-logs
<!--刷新二進(jìn)制日志-->
[root@centos01 ~]# ls -l /usr/local/mysql/data/
<!--查看二進(jìn)制日志文件-->
...... <!--此處省略部分內(nèi)容-->
-rw-rw---- 1 mysql mysql 27299 10月 31 00:00 mysql-bin.000001
-rw-rw---- 1 mysql mysql 1031892 10月 31 00:00 mysql-bin.000002
-rw-rw---- 1 mysql mysql 1574 10月 31 14:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql 507535 11月 1 09:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql 507272 11月 1 09:49 mysql-bin.000005
-rw-rw---- 1 mysql mysql 649 11月 1 09:58 mysql-bin.000006
-rw-rw---- 1 mysql mysql 107 11月 1 09:58 mysql-bin.000007
-rw-rw---- 1 mysql mysql 133 11月 1 09:58 mysql-bin.index
drwx------ 2 mysql mysql 4096 10月 31 00:00 performance_schema
drwxr-xr-x 2 mysql mysql 20 10月 30 23:56 test
[root@centos01 ~]# cp /usr/local/mysql/data/mysql-bin.000006 /root/test/
<!--復(fù)制二進(jìn)制日志-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班學(xué)生成績(jī);'
<!--刪除一班學(xué)生成績(jī)表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看表是否刪除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班學(xué)生成績(jī)' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 < ./test/benet_databases.sql
<!--恢復(fù)完全備份-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看完全備份數(shù)據(jù)是否恢復(fù)-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名 | 班級(jí) | 學(xué)號(hào) | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | 理綜 |
+--------+--------+----------+--------+--------+--------+--------+
| 趙六 | 一班 | 20170816 | 100 | 109 | 112 | 265 |
| 王五 | 一班 | 20170818 | 95 | 103 | 108 | 270 |
| 李四 | 一班 | 20170820 | 95 | 115 | 110 | 260 |
| 張三 | 一班 | 20170822 | 110 | 105 | 92 | 235 |
+--------+--------+----------+--------+--------+--------+--------+
[root@centos01 ~]# mysqlbinlog --no-defaults /root/test/mysql-bin.000006 |mysql -u root -p
<!--恢復(fù)增量備份-->
Enter password: <!--輸入密碼-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看增量恢復(fù)數(shù)據(jù)是否恢復(fù)-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名 | 班級(jí) | 學(xué)號(hào) | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | 理綜 |
+--------+--------+----------+--------+--------+--------+--------+
| 趙六 | 一班 | 20170816 | 100 | 109 | 112 | 265 |
| 王五 | 一班 | 20170818 | 95 | 103 | 108 | 270 |
| 李四 | 一班 | 20170820 | 95 | 115 | 110 | 260 |
| 張三 | 一班 | 20170822 | 110 | 105 | 92 | 235 |
| 李寧 | 二班 | 20170824 | 92 | 98 | 105 | 235 |
| 陳銘 | 二班 | 20170826 | 111 | 107 | 96 | 204 |
+--------+--------+----------+--------+--------+--------+--------+
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班學(xué)生成績(jī);'
<!--刪除一班學(xué)生成績(jī)表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看表是否刪除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班學(xué)生成績(jī)' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 < ./test/benet_databases.sql
<!--恢復(fù)完全備份-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看完全備份是否恢復(fù)-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名 | 班級(jí) | 學(xué)號(hào) | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | 理綜 |
+--------+--------+----------+--------+--------+--------+--------+
| 趙六 | 一班 | 20170816 | 100 | 109 | 112 | 265 |
| 王五 | 一班 | 20170818 | 95 | 103 | 108 | 270 |
| 李四 | 一班 | 20170820 | 95 | 115 | 110 | 260 |
| 張三 | 一班 | 20170822 | 110 | 105 | 92 | 235 |
+--------+--------+----------+--------+--------+--------+--------+
[root@centos01 ~]# mysqlbinlog --no-defaults /root/test/mysql-bin.000006
<!--查看二進(jìn)制日志文件確認(rèn)恢復(fù)的位置或時(shí)間點(diǎn)-->
...... <!--此處省略部分內(nèi)容-->
# at 176 <!--at就是我們稱之為操作ID,下面緊跟的是時(shí)間標(biāo)記-->
#191101 9:55:33 server id 1 end_log_pos 329 Query thread_id=9 exec_time=0 error_code=0
use benet/*!*/;
SET TIMESTAMP=1572573333/*!*/;
insert into 一班學(xué)生成績(jī) value ('李寧','二班','20170824','92','98','105','235')
/*!*/;
# at 329
#191101 9:55:33 server id 1 end_log_pos 356 Xid = 278
COMMIT/*!*/;
# at 356
#191101 9:55:43 server id 1 end_log_pos 425 Query thread_id=9 exec_time=0 error_code=0
SET TIMESTAMP=1572573343/*!*/;
BEGIN
/*!*/;
# at 425 <!--at就是我們稱之為操作ID,下面緊跟的是時(shí)間標(biāo)記-->
#191101 9:55:43 server id 1 end_log_pos 579 Query thread_id=9 exec_time=0 error_code=0
SET TIMESTAMP=1572573343/*!*/;
insert into 一班學(xué)生成績(jī) value ('陳銘','二班','20170826','111','107','96','204')
/*!*/;
[root@centos01 ~]# mysqlbinlog --no-defaults --stop-position='425' /root/test/mysql-bin.000006 |mysql -uroot -p <!--基于ID恢復(fù)增量備份-->
Enter password: <!--輸入密碼-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看數(shù)據(jù)是否恢復(fù)-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名 | 班級(jí) | 學(xué)號(hào) | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | 理綜 |
+--------+--------+----------+--------+--------+--------+--------+
| 趙六 | 一班 | 20170816 | 100 | 109 | 112 | 265 |
| 王五 | 一班 | 20170818 | 95 | 103 | 108 | 270 |
| 李四 | 一班 | 20170820 | 95 | 115 | 110 | 260 |
| 張三 | 一班 | 20170822 | 110 | 105 | 92 | 235 |
| 李寧 | 二班 | 20170824 | 92 | 98 | 105 | 235 |
+--------+--------+----------+--------+--------+--------+--------+
上述命令中“--stop-position”指定的是停止的位置,如果僅恢復(fù)“陳銘”的信息,跳過“李寧”的信息恢復(fù),可以使用“--start-position”選項(xiàng)指定開始恢復(fù)數(shù)據(jù)的位置。這時(shí)所恢復(fù)的數(shù)據(jù)是從指定位置開始直到二進(jìn)制日志文件的最后。
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班學(xué)生成績(jī);'
<!--刪除一班學(xué)生成績(jī)表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看表是否刪除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班學(xué)生成績(jī)' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 < ./test/benet_databases.sql
<!--恢復(fù)完全備份-->
[root@centos01 ~]# mysqlbinlog --no-defaults --start-position='425' /root/test/mysql-bin.000006 |mysql -uroot -p <!--基于ID恢復(fù)增量備份-->
Enter password: <!--輸入密碼-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看數(shù)據(jù)是否恢復(fù)-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名 | 班級(jí) | 學(xué)號(hào) | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | 理綜 |
+--------+--------+----------+--------+--------+--------+--------+
| 趙六 | 一班 | 20170816 | 100 | 109 | 112 | 265 |
| 王五 | 一班 | 20170818 | 95 | 103 | 108 | 270 |
| 李四 | 一班 | 20170820 | 95 | 115 | 110 | 260 |
| 張三 | 一班 | 20170822 | 110 | 105 | 92 | 235 |
| 陳銘 | 二班 | 20170826 | 111 | 107 | 96 | 204 |
+--------+--------+----------+--------+--------+--------+--------+
基于時(shí)間點(diǎn)恢復(fù)數(shù)據(jù)所使用的選項(xiàng)是“--stop-datetime”,指定的時(shí)間同樣也是查詢二進(jìn)制日志所得。執(zhí)行一下操作可以實(shí)現(xiàn)僅恢復(fù)到9:55:43之前的數(shù)據(jù),即不恢復(fù)“陳銘”的信息。
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班學(xué)生成績(jī);'
<!--刪除一班學(xué)生成績(jī)表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看表是否刪除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班學(xué)生成績(jī)' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 < ./test/benet_databases.sql
<!--恢復(fù)完全備份-->
[root@centos01 ~]# mysqlbinlog --no-defaults --stop-datetime='2019-11-01 9:55:43' /root/test/mysql-bin.000006 |mysql -uroot -p
<!--基于時(shí)間點(diǎn)恢復(fù)增量備份-->
Enter password: <!--輸入密碼-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看數(shù)據(jù)是否恢復(fù)-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名 | 班級(jí) | 學(xué)號(hào) | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | 理綜 |
+--------+--------+----------+--------+--------+--------+--------+
| 趙六 | 一班 | 20170816 | 100 | 109 | 112 | 265 |
| 王五 | 一班 | 20170818 | 95 | 103 | 108 | 270 |
| 李四 | 一班 | 20170820 | 95 | 115 | 110 | 260 |
| 張三 | 一班 | 20170822 | 110 | 105 | 92 | 235 |
| 李寧 | 二班 | 20170824 | 92 | 98 | 105 | 235 |
+--------+--------+----------+--------+--------+--------+--------+
執(zhí)行以下操作可以實(shí)現(xiàn)僅恢復(fù)“陳銘”的信息,跳過“李寧”的信息恢復(fù)
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'drop table benet.一班學(xué)生成績(jī);'
<!--刪除一班學(xué)生成績(jī)表-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看表是否刪除-->
ERROR 1146 (42S02) at line 1: Table 'benet.一班學(xué)生成績(jī)' doesn't exist
[root@centos01 ~]# mysql -uroot -ppwd@123 < ./test/benet_databases.sql
<!--恢復(fù)完全備份-->
[root@centos01 ~]# mysqlbinlog --no-defaults --start-datetime='2019-11-01 9:55:43'
/root/test/mysql-bin.000006 |mysql -uroot -p
<!--基于時(shí)間恢復(fù)增量備份-->
Enter password: <!--輸入密碼-->
[root@centos01 ~]# mysql -uroot -ppwd@123 -e 'select * from benet.一班學(xué)生成績(jī);'
<!--查看數(shù)據(jù)是否恢復(fù)-->
+--------+--------+----------+--------+--------+--------+--------+
| 姓名 | 班級(jí) | 學(xué)號(hào) | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | 理綜 |
+--------+--------+----------+--------+--------+--------+--------+
| 趙六 | 一班 | 20170816 | 100 | 109 | 112 | 265 |
| 王五 | 一班 | 20170818 | 95 | 103 | 108 | 270 |
| 李四 | 一班 | 20170820 | 95 | 115 | 110 | 260 |
| 張三 | 一班 | 20170822 | 110 | 105 | 92 | 235 |
| 陳銘 | 二班 | 20170826 | 111 | 107 | 96 | 204 |
+--------+--------+----------+--------+--------+--------+--------+
—————— 本文至此結(jié)束,感謝閱讀 ——————
當(dāng)前標(biāo)題:MySQL備份與恢復(fù)
鏈接URL:http://chinadenli.net/article28/ihohjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、電子商務(wù)、全網(wǎng)營(yíng)銷推廣、微信公眾號(hào)、品牌網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)