MySQL——全量、增量備份與恢復(fù)(理論+實操)

數(shù)據(jù)備份的重要性

1、在生產(chǎn)環(huán)境中,數(shù)據(jù)的安全性是至關(guān)重要的,任何數(shù)據(jù)的丟失都可能產(chǎn)生嚴重的后果

2、造成數(shù)據(jù)丟失的原因

  • 程序錯誤
  • 人為錯誤
  • 計算機失敗
  • 磁盤失敗
  • 災(zāi)難和偷竊

數(shù)據(jù)庫備份的分類

從物理與邏輯的角度,備份可分為:

1、物理備份:對數(shù)據(jù)庫操作系統(tǒng)的物理文件(如數(shù)據(jù)文件、日志文件等)的備份

創(chuàng)新互聯(lián)專注于訥河企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。訥河網(wǎng)站建設(shè)公司,為訥河等地區(qū)提供建站服務(wù)。全流程按需設(shè)計網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

物理備份又可以分為脫機備份(冷備份)和聯(lián)機備份(熱備份):

冷備份:是在關(guān)閉數(shù)據(jù)庫的時候進行的
熱備份:數(shù)據(jù)庫處于運行狀態(tài),這種備份方法依賴于數(shù)據(jù)庫的日志文件

2、邏輯備份:對數(shù)據(jù)庫邏輯組件(如表等數(shù)據(jù)庫對象)的備份

從數(shù)據(jù)庫的備份策略角度, 備份可分為:

完全備份:每次對數(shù)據(jù)進行完整的備份

差異備份:備份那些自從上次完全備份之后被修改過的文件

增量備份:只有那些在.上次完全備份或者增量備份后被修改的文件才會被備份

注意:差異與增量相輔相成

MySQL完全備份

1、完全備份是對整個數(shù)據(jù)庫的備份、數(shù)據(jù)庫結(jié)構(gòu)和文件結(jié)構(gòu)的備份
2、完全備份保存的是備份完成時刻的數(shù)據(jù)庫
3、完全備份是增量備份的基礎(chǔ)

(1)完全備份的優(yōu)點

●備份與恢復(fù)操作簡單方便

(2)完全備份的缺點

●數(shù)據(jù)存在大量的重復(fù)
●占用大量的備份空間
●備份與恢復(fù)時間長

mysqldump備份庫

1、MySQL數(shù)據(jù)庫的備份可以采用用多種方式

●直接打包數(shù)據(jù)庫文件夾,如/usr/local/mysql/data
●使用專用備份工具mysqldump

2、mysqldump命令

●MySQL自帶的備份工具,相當方便對MySQL進行備份
●通過該命令工具可以將指定的庫、表或全部的庫導(dǎo)出為SQL腳本,在需要恢復(fù)時可進行數(shù)據(jù)恢復(fù)

3、mysqldump命令對單個庫進行完全備份

mysqldump -u用戶名-p [密碼] [選項] [數(shù)據(jù)庫名] > /備份路徑/備份文件名

單庫備份例子
mysqldump -u root -p auth > /backup/auth.sql
mysqldump -u root -p mysql > /bakcup/mysql.sql

4、mysqldump命令對多個庫進行完全備份

mysqldump -u 用戶名 -p [密碼] [選項] --databases 庫名1 [庫名2]... >/備份路徑/備份文件名

多庫備份例子
mysqldump -u root -p --databases autth mysql > /backup/databases-auth-mysql.sql

5、對所有庫進行完全備份

mysqldump -u用戶名-p [密碼] [選項] --all-databases > /備份路徑/備份文件名

所有庫備份例子
mysqldump -u root -p --opt --all-databases > /backup/all-data.sql

mysqldump備份表

1、在實際生產(chǎn)環(huán)境中,存在對某個特定表的維護操作,此時mysqldump同樣發(fā)揮重大作用

2、使用mysqldump備份表的操作
mysqldump -u 用戶名 -p [密碼] [選項] 數(shù)據(jù)庫名 表名 > /備份路徑/備份文件名

備份表的例子
mysqldump -u root -p mysql user > /backup/mysql-user.sql

3、使用mysqldump備份表結(jié)構(gòu)的操作
mysqldump -u 用戶名 -p [密碼] [選項] -d 數(shù)據(jù)庫名 表名 > /備份路徑/備份文件名

備份表結(jié)構(gòu)的例子
mysqldump -u root -p mysql -d user > /backup/mysql-user.sql

恢復(fù)數(shù)據(jù)庫

1、使用mysqldump命令導(dǎo)出的SQL備份腳本,在進行數(shù)據(jù)恢復(fù)時可使用以下方法導(dǎo)入
●source命令          數(shù)據(jù)庫模式中運行
●mysq|命令           Linux模式中運行

2、使用source恢復(fù)數(shù)據(jù)庫的步驟
●登錄到MySQL數(shù)據(jù)庫
●執(zhí)行source備份sq|腳本的路徑(絕對路徑)

source 恢復(fù)例子
MySQL [(none)] > source /backup/all-data.sql

3、使用mysq|命令恢復(fù)數(shù)據(jù)
mysql -u用戶名-p [密碼] <庫備份腳本的路徑

mysql命令恢復(fù)例子
mysql -u root -p < /backup/all-data.sql

恢復(fù)表的操作

1、恢復(fù)表時同樣可以使用source或者mysql命令進行

2、source恢復(fù)表的操作與恢復(fù)庫的操作相同

3、當備份文件中只包含表的備份,而不包括創(chuàng)建庫的語句時,必須指定庫名,且目標庫必須存在
mysql -u用戶名-p [密碼] < 表備份腳本的路徑
mysql -u root -p mysql < /backup/mysql-user.sql

4、在生產(chǎn)環(huán)境中,可以使用shell腳本自動實現(xiàn)定期備份

MySQL備份思路

1、定期實施備份,制定備份計劃或者策略,并嚴格遵守

2、除了進行完全備份,開啟MySQL服務(wù)器的日志功能是很重要的

●完全備份加上日志,可以對MySQL進行最大化還原

MySQL-bin:MySQL數(shù)據(jù)庫的二進制日志,用于記錄用戶對數(shù)據(jù)庫操作的SQL語句((除了數(shù)據(jù)查詢語句)信息。可以使用mysqlbin命令查看二進制日志的內(nèi)容

3、使用統(tǒng)一的和易理解的備份文件名稱

●不要使用backup1、backup2等這樣沒有意義的名字
●推薦使用庫名或者表名加上時間的命名規(guī)則

MySQL增量備份

1、使用mysqldump進行完全備份的存在的問題

●備份數(shù)據(jù)中有重復(fù)數(shù)據(jù)
●備份時間與恢復(fù)時間長

2、增量備份就是備份自上一次備份之后增加或變化的文件或者內(nèi)容

3、增量備份的特點

●沒有重復(fù)數(shù)據(jù),備份量不大,時間短
●恢復(fù)麻煩:需要上次完全備份及完全備份之后所有的增量備份才能恢復(fù),而且要對所有增量備份進行逐個反推恢復(fù)

4、MySQL沒有提供直接的增量備份方法

5、可以通過MySQL提供的二進制日志(binary logs)間接實現(xiàn)增量備份

6、MySQL二進制日志對備份的意義

●二進制日志保存了所有更新或者可能更新數(shù)據(jù)庫的操作
●二進制日志在啟動MySQL服務(wù)器后開始記錄,并在文件達到max_ binlog_size所設(shè)置的大小或者接收到flush logs命令后重新創(chuàng)建新的日志文件
●只需定時執(zhí)行flush logs方法重新創(chuàng)建新的日志,生成二進制文件序列,并及時把這些舊的日志保存到安全的地方就完成了一個時間段的增量備份

7、一般恢復(fù)
添加數(shù)據(jù)——進行完全備份——錄入新的數(shù)據(jù)——進行增量備份——模擬故障——恢復(fù)操作

8、基于位置回復(fù)
就是將某個起始時間的二進制日志導(dǎo)入數(shù)據(jù)庫中,從而跳過某個發(fā)生錯誤的時間點實現(xiàn)數(shù)據(jù)的恢復(fù)

9、基于時間點恢復(fù)
使用基于時間點的恢復(fù),可能會出現(xiàn)在一個時間點里既同時存在正確的操作又存在錯誤的操作,所以我們需要一種更為精確的恢復(fù)方式

10、增量恢復(fù)的方法

(1)一般恢復(fù)

mysqlbinlog [--no-defaults]增量備份文件 | mysql -u用戶名 -p
(2)基于位置的恢復(fù)
●恢復(fù)數(shù)據(jù)到指定位置
mysqlbinlog --stop-position=操作'id' 1進制日志 | mysql -u用戶名 -p 密碼
●從指定的位置開始恢復(fù)數(shù)據(jù)
mysqlbinlog --start-position=操作'id'二進制日志 | mysql -u用戶名 -p 密碼

(3)基于時間點的恢復(fù)

●從日志開頭截止到某個時間點的恢復(fù)
mysqlbinlog [--no-defaults] --stop-datetime='年-月-日 小時:分鐘:秒'二進制日志 | mysql -u用戶名 -p 密碼
●從某個時間點到日志結(jié)尾的恢復(fù)
mysqlbinlog [--no defaults] --start-datetime='年-月-日 小時:分鐘:秒'二進制日志 | mysql -u用戶名 -p 密碼
●從某個時間點到某個時間點的恢復(fù)
mysqlbinlog [--no defaults] --start-datetime='年-月-日 小時:分鐘:秒' --stop-datetime='年-月-日 小時:分鐘:秒'二進制日志 | mysql -u用戶名 -p 密碼

查看二進制日志文件(解碼)
mysqlbinlog --no-defaults --base64-output=decode-rows -V mysql-bin.000002 > /opt/ bak. txt

全量備份與恢復(fù)實操

1,進入數(shù)據(jù)庫,創(chuàng)建表,插入表數(shù)據(jù)

[root@master2 ~]# mysql -uroot -p   ##進入數(shù)據(jù)庫
Enter password: 

mysql> create database school;    ##創(chuàng)建數(shù)據(jù)庫
Query OK, 1 row affected (0.01 sec)

mysql> use school;   ##使用數(shù)據(jù)庫
Database changed
mysql> create table info(    ##創(chuàng)建表
        -> id int(3) not null primary key auto_increment,
        -> name varchar(10) not null,
        -> score decimal(4,1) not null);
Query OK, 0 rows affected (0.02 sec)

mysql> desc info;   ##查看表結(jié)構(gòu)
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(3)       | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10)  | NO   |     | NULL    |                |
| score | decimal(4,1) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> insert into info (name,score) values ('stu01',88),('stu02',77);   ##插入表數(shù)據(jù)
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from info;   ##查看表內(nèi)容
+----+-------+-------+
| id | name  | score |
+----+-------+-------+
|  1 | stu01 |  88.0 |
|  2 | stu02 |  77.0 |
+----+-------+-------+
2 rows in set (0.01 sec)

mysql> select * from info limit 1;   ##只顯示表中的前1行
+----+-------+-------+
| id | name  | score |
+----+-------+-------+
|  1 | stu01 |  88.0 |
+----+-------+-------+
1 row in set (0.00 sec)

2,對數(shù)據(jù)庫進行物理的完全備份

[root@master2 ~]# cd /usr/local/mysql/data/   ##切換到數(shù)據(jù)庫的數(shù)據(jù)目錄下
[root@master2 data]# ls
auto.cnf        ibdata1      ib_logfile1  mysql               school  test
ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  sys
[root@master2 data]# cd school/
[root@master2 school]# ls   ##數(shù)據(jù)中的文件
db.opt  info.frm  info.ibd
[root@master2 school]# cd ..
[root@master2 data]# tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/ ##用xz格式壓縮
[root@master2 data]# cd /opt/
[root@master2 opt]# ls
mysql-2019-11-26.tar.xz  mysql-5.7.20  rh

3,對單個數(shù)據(jù)庫進行邏輯上的備份

[root@master2 opt]# mysqldump -uroot -p school > /opt/school.sql  ##邏輯備份單個數(shù)據(jù)庫
Enter password: 
[root@master2 opt]# ls
mysql-2019-11-26.tar.xz  mysql-5.7.20  rh  school.sql
[root@master2 opt]# vim school.sql  ##查看備份數(shù)據(jù)庫腳本

...
CREATE TABLE `info` (
    `id` int(3) NOT NULL AUTO_INCREMENT,
    `name` varchar(10) NOT NULL,
    `score` decimal(4,1) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
...
LOCK TABLES `info` WRITE;
/*!40000 ALTER TABLE `info` DISABLE KEYS */;
INSERT INTO `info` VALUES (1,'stu01',88.0),(2,'stu02',77.0);

4,對多個數(shù)據(jù)庫進行備份

[root@master2 opt]# mysqldump -uroot -p --databases school mysql > /opt/db_school_mysql.sql
##備份多個數(shù)據(jù)庫
Enter password: 
[root@master2 opt]# ls
db_school_mysql.sql  mysql-2019-11-26.tar.xz  mysql-5.7.20  rh  school.sql

5,對數(shù)據(jù)庫進行完全備份

[root@master2 opt]# mysqldump -uroot -p --opt --all-databases > /opt/all.sql ##完全備份
Enter password: 
[root@master2 opt]# ls
all.sql              mysql-2019-11-26.tar.xz  rh
db_school_mysql.sql  mysql-5.7.20             school.sql

6,對數(shù)據(jù)庫中的表進行備份

[root@master2 opt]# mysqldump -uroot -p school info > /opt/school_info.sql ##對數(shù)據(jù)庫中的表進行備份
Enter password: 
[root@master2 opt]# ls
all.sql              mysql-2019-11-26.tar.xz  rh               school.sql
db_school_mysql.sql  mysql-5.7.20             school_info.sql

7,對數(shù)據(jù)庫中的表結(jié)構(gòu)進行備份

[root@master2 opt]# mysqldump -uroot -p -d school info > /opt/school_info_desc.sql  
##對表結(jié)構(gòu)進行備份
Enter password: 
[root@master2 opt]# ls
all.sql                  mysql-5.7.20          school_info.sql
db_school_mysql.sql      rh                    school.sql
mysql-2019-11-26.tar.xz  school_info_desc.sql

8,基于腳本恢復(fù)數(shù)據(jù)庫

[root@master2 opt]# mysql -uroot -p     ##進入數(shù)據(jù)庫
Enter password: 

mysql> show databases;   ##查看數(shù)據(jù)庫
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql> use school;    ##使用數(shù)據(jù)庫
Database changed

mysql> show tables;   ##查看表
+------------------+
| Tables_in_school |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)

mysql> drop table info;    ##刪除表
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;        ###查看表
Empty set (0.00 sec)

mysql> source /opt/school.sql  ##恢復(fù)數(shù)據(jù)庫腳本文件

mysql> show tables;    ##查看表
+------------------+
| Tables_in_school |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)

9,基于外部MySQL命令恢復(fù)數(shù)據(jù)庫

mysql> drop table info;   ##刪除表
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;   ##查看表
Empty set (0.00 sec)

mysql> quit   ##退出
Bye
[root@master2 opt]# mysql -uroot -p123123 school < /opt/school.sql   ##利用mysql命令進行恢復(fù)
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@master2 opt]# mysql -uroot -p123123    ##進入數(shù)據(jù)庫
mysql: [Warning] Using a password on the command line interface can be insecure.

mysql> use school;    ##使用數(shù)據(jù)庫
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_school |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)

MySQL增量備份及恢復(fù)實操

1,開啟二進制日志文件

[root@master2 opt]# vim /etc/my.cnf  ##開啟二進制日志文件
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysql.pid
socket = /usr/local/mysql/mysql.sock
log-bin=mysql-bin   ##開啟二進制日志文件
server-id = 1
[root@master2 opt]# systemctl restart mysqld.service   ##重啟mysql服務(wù)
[root@master2 opt]# cd /usr/local/mysql/data/   ##切換到mysql站點
[root@master2 data]# ls     ##查看二進制日志文件
auto.cnf        ib_logfile0  mysql             performance_schema  test
ib_buffer_pool  ib_logfile1  mysql-bin.000001  school
ibdata1         ibtmp1       mysql-bin.index   sys

2,進行完全備份

[root@master2 data]# mysqldump -uroot -p123123 school > /opt/school.sql ##一次完全備份
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@master2 data]# ls
auto.cnf        ib_logfile0  mysql             performance_schema  test
ib_buffer_pool  ib_logfile1  mysql-bin.000001  school
ibdata1         ibtmp1       mysql-bin.index   sys
[root@master2 data]# mysqladmin -uroot -p123123 flush-logs  ##刷新二進制日志文件
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
[root@master2 data]# ls     ##生成新的二進制日志文件,接下來的操作會保存在mysql-bin.000002中
auto.cnf        ib_logfile0  mysql             mysql-bin.index     sys
ib_buffer_pool  ib_logfile1  mysql-bin.000001  performance_schema  test
ibdata1         ibtmp1       mysql-bin.000002  school

3,進入數(shù)據(jù)庫,模擬誤操作

[root@master2 data]# mysql -uroot -p123123  ##進入數(shù)據(jù)庫
mysql: [Warning] Using a password on the command line interface can be insecure.

mysql> use school;    ##使用數(shù)據(jù)庫
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> select * from info;  ##查看表
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | st01 |  88.0 |
|  2 | st02 |  77.0 |
+----+------+-------+
2 rows in set (0.00 sec)

mysql> insert into info (name,score) values ('by01',66);   ##正確操作
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | st01 |  88.0 |
|  2 | st02 |  77.0 |
|  3 | by01 |  66.0 |
+----+------+-------+
3 rows in set (0.00 sec)

mysql> delete from info where name='st01';   ##錯誤操作
Query OK, 1 row affected (0.00 sec)

mysql> insert into info (name,score) values ('by02',99); ##正確操作
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;
+----+------+-------+
| id | name | score |
+----+------+-------+
|  2 | st02 |  77.0 |
|  3 | by01 |  66.0 |
|  4 | by02 |  99.0 |
+----+------+-------+
3 rows in set (0.00 sec)

[root@master2 data]# mysqladmin -uroot -p123123 flush-logs    ##刷新二進制日志文件        
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
[root@master2 data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 > /opt/bak.txt
##用64位解碼器查看二進制日志文件,并生成一個文件
[root@master2 data]# cd /opt/
[root@master2 opt]# ls
bak.txt  mysql-5.7.20  rh  school.sql
[root@master2 opt]# vim bak.txt    ##查看二進制日志文件

# at 1084
#191127 20:14:01 server id 1  end_log_pos 1132 CRC32 0xdcc90eb5         Write_rows: table id 221 flags: STMT_END_F
### INSERT INTO `school`.`info`   ##第一次正確操作的時間和位置
### SET
###   @1=3
###   @2='by01'
###   @3=66.0
...
# at 1302   ##停止位置點
#191127 20:14:46 server id 1  end_log_pos 1357 CRC32 0x6648509a         Table_map: `school`.`info` mapped to number 221
# at 1357
#191127 20:14:46 server id 1  end_log_pos 1405 CRC32 0x1eeb752b         Delete_rows: table id 221 flags: STMT_END_F
### DELETE FROM `school`.`info`   ##第二次執(zhí)行錯誤操作的時間和位置191127 20:14:46
### WHERE
###   @1=1
###   @2='st01'
###   @3=88.0
# at 1405  ##開始位置點
#191127 20:14:46 server id 1  end_log_pos 1436 CRC32 0xf1c8d903         Xid = 54
...
# at 1630
#191127 20:15:16 server id 1  end_log_pos 1678 CRC32 0x08d9b0f4         Write_rows: table id 221 flags: STMT_END_F
### INSERT INTO `school`.`info`   ##第二次正確操作的時間和位置191127 20:15:16
### SET
###   @1=4
###   @2='by02'
###   @3=99.0

4,基于時間點進行斷點恢復(fù)

[root@master2 opt]# mysql -uroot -p123123   ##進入數(shù)據(jù)庫
mysql: [Warning] Using a password on the command line interface can be insecure.

mysql> use school;  ##使用數(shù)據(jù)庫
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> drop table info;   ##刪除數(shù)據(jù)庫
Query OK, 0 rows affected (0.01 sec)

mysql> select * from info;   ##查看表
ERROR 1146 (42S02): Table 'school.info' doesn't exist
mysql> source /opt/school.sql   ##恢復(fù)完全備份數(shù)據(jù)庫腳本
...
mysql> show tables;   ##查看表
+------------------+
| Tables_in_school |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)

mysql> select * from info;  ##查看表數(shù)據(jù)
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | st01 |  88.0 |
|  2 | st02 |  77.0 |
+----+------+-------+
2 rows in set (0.00 sec)

[root@master2 opt]# mysqlbinlog --no-defaults --stop-datetime='2019-11-27 20:14:46' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123
##恢復(fù)bin.000002中前一個正確的執(zhí)行語句(從第二個錯誤語句時間點停止)
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@master2 opt]# mysql -uroot -p123123   ##進入數(shù)據(jù)庫
mysql: [Warning] Using a password on the command line interface can be insecure.

mysql> use school;  ##使用數(shù)據(jù)庫
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> select * from info;   ##查看表數(shù)據(jù),恢復(fù)了第一次正確操作
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | st01 |  88.0 |
|  2 | st02 |  77.0 |
|  3 | by01 |  66.0 |
+----+------+-------+
3 rows in set (0.00 sec)

[root@master2 opt]# mysqlbinlog --no-defaults --start-datetime='2019-11-27 20:15:16' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123   
##跳過錯誤節(jié)點,恢復(fù)最后一個正確的操作(從最后一個正確的操作時間點開始)
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@master2 opt]# mysql -uroot -p123123  ##進入數(shù)據(jù)庫
mysql: [Warning] Using a password on the command line interface can be insecure.

mysql> use school;   ##使用數(shù)據(jù)庫
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> select * from info;    ##查看表數(shù)據(jù),恢復(fù)了第二次正確操作,跳過了錯誤的操作
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | st01 |  88.0 |
|  2 | st02 |  77.0 |
|  3 | by01 |  66.0 |
|  4 | by02 |  99.0 |
+----+------+-------+
4 rows in set (0.00 sec)

5,基于位置點進行斷點恢復(fù)

mysql> delete from info where name='by01';    ##為實驗方便直接刪除
Query OK, 1 row affected (0.01 sec)

mysql> delete from info where name='by02';    ##刪除
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;  ##完全備份的初始狀態(tài)
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | st01 |  88.0 |
|  2 | st02 |  77.0 |
+----+------+-------+
2 rows in set (0.00 sec)

mysql> quit
Bye

[root@master2 opt]# mysqlbinlog --no-defaults --stop-position='1302' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123                           
##跳過錯誤操作的位置點從上一個位置點開始
[root@master2 opt]# mysql -uroot -p123123   ##進入數(shù)據(jù)庫
mysql: [Warning] Using a password on the command line interface can be insecure.

mysql> use school;    ##使用數(shù)據(jù)庫
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> select * from info;   ##查看表數(shù)據(jù),恢復(fù)了第一次正確的操作
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | st01 |  88.0 |
|  2 | st02 |  77.0 |
|  3 | by01 |  66.0 |
+----+------+-------+
3 rows in set (0.00 sec)

mysql> quit
Bye

[root@master2 opt]# mysqlbinlog --no-defaults --start-position='1405' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123   
##從錯誤的位置后一個位置點開始,跳過錯誤操作的位置點
[root@master2 opt]# mysql -uroot -p123123   ##進入數(shù)據(jù)庫
mysql: [Warning] Using a password on the command line interface can be insecure.

mysql> use school;   ##使用數(shù)據(jù)庫
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> select * from info;    ##查看表數(shù)據(jù),跳過錯誤操作,恢復(fù)第二次正確操作數(shù)據(jù)
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | st01 |  88.0 |
|  2 | st02 |  77.0 |
|  3 | by01 |  66.0 |
|  4 | by02 |  99.0 |
+----+------+-------+
4 rows in set (0.00 sec)

6,對于增量備份全部恢復(fù)

[root@master2 opt]# mysqlbinlog --no-defaults  /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p123123
##全部增量恢復(fù)

本文題目:MySQL——全量、增量備份與恢復(fù)(理論+實操)
URL網(wǎng)址:http://muchs.cn/article40/pgopeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、企業(yè)網(wǎng)站制作、移動網(wǎng)站建設(shè)手機網(wǎng)站建設(shè)、軟件開發(fā)網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司