真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL的備份與恢復(fù)詳解

在公司中備份的策略并不是千篇一律的,而是根據(jù)每個企業(yè) 的實際生產(chǎn)環(huán)境與業(yè)務(wù)需求制定合適的備份策略。無論是選擇完全備份還是增量備份,都需要考慮它們的優(yōu)缺點,是否適合當(dāng)前的生產(chǎn)環(huán)境。同時為了保證恢復(fù)的完整性,建議開啟二進(jìn)制日志功能,二進(jìn)制日志文件給恢復(fù)工作帶來了很大的靈活性,可以基于時間點或位置進(jìn)行恢復(fù),考慮到數(shù)據(jù)庫性能,可以將二進(jìn)制日志文件保存在其他安全的硬盤中。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、七星關(guān)區(qū)網(wǎng)站維護(hù)、網(wǎng)站推廣。

在進(jìn)行熱備時,備份操作和應(yīng)用服務(wù)在同時運行,這樣十分消耗系統(tǒng)資源,導(dǎo)致數(shù)據(jù)庫服務(wù)性能下降,這就要求我們選擇一個合適的時間(一般在應(yīng)用負(fù)擔(dān)很小的時候)再來進(jìn)行備份操作。

需要注意的是,不是備份就萬事大吉了,最好確認(rèn)備份是否可用,所以備份之后的恢復(fù)測試是非常有必要的。同時備份時間也要靈活調(diào)整,如:

  1. 數(shù)據(jù)更新頻繁,則應(yīng)該頻繁地備份。
  2. 數(shù)據(jù)的重要性,在有適當(dāng)更新時進(jìn)行備份。
  3. 在數(shù)據(jù)庫壓力小的時間段進(jìn)行備份,如一周一次完全備份,每天進(jìn)行增量備份。
  4. 中小公司,完全備份一般一天一次即可。
  5. 大公司可每周進(jìn)行一次完全備份,每天進(jìn)行一次增量備份。
  6. 盡量為企業(yè)實現(xiàn)主從復(fù)制架構(gòu),以增加數(shù)據(jù)的可用性。

數(shù)據(jù)庫備份類型可以從兩個角度來看待:

1、從物理與邏輯的角度:

物理備份是對數(shù)據(jù)庫操作系統(tǒng)的物理文件(如數(shù)據(jù)文件、日志文件等)的備份。這種類型的備份適用于在出現(xiàn)問題時需要快速恢復(fù)的大型重要數(shù)據(jù)庫。

物理備份有可以分為以下幾種類型:

①、冷備份:在數(shù)據(jù)庫關(guān)閉狀態(tài)下進(jìn)行備份操作;

②、熱備份:在數(shù)據(jù)庫處于運行狀態(tài)時進(jìn)行備份操作,該備份方法依賴數(shù)據(jù)庫的日志文件;

③、溫備份:數(shù)據(jù)庫鎖定表格(不可寫入,但可讀取)的狀態(tài)下進(jìn)行備份;

邏輯備份是對數(shù)據(jù)庫邏輯組件(如表等數(shù)據(jù)庫對象)的備份,表示為邏輯數(shù)據(jù)庫結(jié)構(gòu)(create database、create table語句)和內(nèi)容(insert語句或分隔文本文件)的信息。這種類型的備份使用于可以編輯數(shù)據(jù)值或表結(jié)構(gòu)較小的數(shù)據(jù)量,或者在不同的機器體系上重新創(chuàng)建數(shù)據(jù)。

2、從數(shù)據(jù)庫的備份策略角度:

從數(shù)據(jù)庫的備份策略角度,數(shù)據(jù)庫的備份可分為完全備份、差異備份和增量備份。其中呢,完整備份是實現(xiàn)差異、增量備份的基礎(chǔ)。

  1. 完整備份:每次對數(shù)據(jù)進(jìn)行完整的備份,即對整個數(shù)據(jù)庫的備份。備份與恢復(fù)的操作非常簡單,但是數(shù)據(jù)存在大量的重復(fù),會占用大量的磁盤空間,備份的時間也很長。
  2. 差異備份:備份那些自從上次完全備份之后被修改過的所有文件,備份的時間點是從上次完整備份起,備份數(shù)據(jù)會越來越大,恢復(fù)數(shù)據(jù)時,只需恢復(fù)上次的完全備份和最近的一次差異備份。
  3. 增量備份:只有在那些在上次完全備份或增量備份后被修改的文件才會被備份,以上次完整備份或上次增量備份的時間為時間點,僅僅備份這之間的數(shù)據(jù)變化,因而備份的數(shù)據(jù)量也小,占用空間小,備份速度快,但恢復(fù)時,需要從上一次的完整備份開始到最后一次增量備份之間的所有增量依次恢復(fù),一旦中間的數(shù)據(jù)發(fā)生損壞,將導(dǎo)致數(shù)據(jù)的丟失。

來幾個備份實例:

1、物理冷備份與恢復(fù):


[root@localhost ~]# tar zcf /backup/MySQL_$(date +%F).tar.gz /usr/local/mysql/data  #直接tar打包數(shù)據(jù)庫文件
[root@localhost ~]# cd /backup/
[root@localhost backup]# ls
mysql_2019-05-16.tar.gz              #備份后的文件
[root@localhost backup]# 

2、mysqldump備份與恢復(fù):

1)備份某一個表:

[root@localhost backup]# mysqldump -u root -p mysql user > mysql-user.sql          #備份mysql庫中的user表
Enter password:              #輸入密碼
[root@localhost backup]# ls                  #查看備份文件
mysql-user.sql

2)恢復(fù)mysql數(shù)據(jù)庫中的user表(注意路徑問題):

[root@localhost backup]# mysql -u root -p mysql < mysql-user.sql 
Enter password: 

3)備份mysql庫:

[root@localhost backup]# mysqldump -u root -p --databases mysql > mysql.sql            #備份mysql庫
Enter password:              #輸入密碼
[root@localhost backup]# ls             #查看備份文件
mysql.sql

4)恢復(fù)mysql庫:

[root@localhost backup]# mysql -u root -p < mysql.sql 
Enter password: 

5)備份所有的庫(當(dāng)導(dǎo)出的數(shù)據(jù)量較大時,可以添加“--opt”選項以優(yōu)化執(zhí)行速度):

[root@localhost backup]# mysqldump -u root -p --opt --all-databases > all-data.sql         #備份所有庫
Enter password:            #輸入密碼
[root@localhost backup]# ls              #查看備份文件
all-data.sql

3、MySQL增量備份與恢復(fù):

與完全備份不同,增量備份沒有重復(fù)數(shù)據(jù),備份量不大,時間段,但其恢復(fù)比較麻煩,需要上次完全備份及完全備份之后的所有增量備份之后才能恢復(fù),而且要對所有增量備份逐個反推恢復(fù)。MySQL沒有提供直接的增量備份辦法,所以一般是通過MySQL提供的二進(jìn)制日志來間接實現(xiàn)增量備份。

要進(jìn)行MySQL的增量備份,那么首先需要開啟二進(jìn)制日志功能:

[root@localhost ~]# mkdir /usr/local/mysql/logs      #創(chuàng)建專門存放二進(jìn)制日志文件的目錄
[root@localhost ~]# chown mysql:mysql /usr/local/mysql/logs           #更改目錄歸屬,使其擁有寫入權(quán)限
[root@localhost ~]# vim /etc/my.cnf        #編輯MySQL的主配文件
[mysqld]
log-bin=/usr/local/mysql/logs/mysql-bin            #寫入該行,指定二進(jìn)制日志的存放位置
[root@localhost ~]# systemctl restart mysqld             #重啟服務(wù)
[root@localhost ~]# ls -l /usr/local/mysql/logs                #然后即可看到目錄下自動生成的日志文件
-rw-rw----. 1 mysql mysql 120 5月  16 14:16 mysql-bin.000001
-rw-rw----. 1 mysql mysql  39 5月  16 14:16 mysql-bin.index

現(xiàn)在所有對數(shù)據(jù)庫的修改,都將記錄mysql-bin.000001文件中,當(dāng)執(zhí)行“mysqladmin -u root -p flush-logs”刷新二進(jìn)制日志后,將會繼續(xù)生成一個名為mysql-bin.000002的文件,之后所有的更改又將存在mysql-bin.000002文件中,以此類推.......

接下來對下面test庫中的user_info這個表進(jìn)行備份:

mysql> select * from user_info;
+---------+----------+---------+
| gonghao | xingming | xingbie |
+---------+----------+---------+
|       1 | zhangsan | nan     |
|       2 | lisi     | nan     |
|       3 | wangwu   | nan     |
+---------+----------+---------+

1)先進(jìn)行一次完全備份:

[root@localhost ~]# mysqldump -u root -p test user_info >/backup/user_info_$(date +%F).sql;    #完全備份
Enter password:                 #輸入密碼
[root@localhost ~]# ls /backup/              #查看備份生成的文件
user_info_2019-05-16.sql

2)刷新二進(jìn)制文件:

[root@localhost ~]# mysqladmin -u root -p flush-logs             #刷新日志文件
Enter password: 
[root@localhost ~]# ls -l /usr/local/mysql/logs/           查看,每次刷新后,都會多出一個日志文件,
之后所有的修改,都將保存在這個日志文件中
-rw-rw----. 1 mysql mysql 1007 5月  16 14:36 mysql-bin.000001
-rw-rw----. 1 mysql mysql  120 5月  16 14:36 mysql-bin.000002
-rw-rw----. 1 mysql mysql   78 5月  16 14:36 mysql-bin.index

3)現(xiàn)在數(shù)據(jù)庫中又多了兩條數(shù)據(jù):

mysql> select * from user_info;
+---------+----------+---------+
| gonghao | xingming | xingbie |
+---------+----------+---------+
|       1 | zhangsan | nan     |
|       2 | lisi     | nan     |
|       3 | wangwu   | nan     |
|       4 | zhaoliu  | nan     |
|       5 | sunqi    | nan     |
+---------+----------+---------+

4)如果現(xiàn)在這個表被誤刪了,那么可以這樣恢復(fù):

[root@localhost ~]# mysqladmin -u root -p flush-logs    #刷新日志
Enter password: 

[root@localhost ~]# mysql -u root -p test < /backup/user_info_2019-05-16.sql          #先恢復(fù)完全備份
Enter password: 
[root@localhost ~]# mysql -u root -p -e ' select * from test.user_info;'             #完全備份的內(nèi)容恢復(fù)成功
Enter password: 
+---------+----------+---------+
| gonghao | xingming | xingbie |
+---------+----------+---------+
|       1 | zhangsan | nan     |
|       2 | lisi     | nan     |
|       3 | wangwu   | nan     |
+---------+----------+---------+

在恢復(fù)增量備份時,--no-defaults選項必須要有,否則會報錯:

[root@localhost ~]# mysqlbinlog --no-defaults /usr/local/mysql/logs/mysql-bin.000002 | mysql -u root -p    #恢復(fù)增量備份
Enter password: 
[root@localhost ~]# mysql -u root -p -e ' select * from test.user_info;'         #查看是否恢復(fù)成功
Enter password: 
+---------+----------+---------+
| gonghao | xingming | xingbie |
+---------+----------+---------+
|       1 | zhangsan | nan     |
|       2 | lisi     | nan     |
|       3 | wangwu   | nan     |
|       4 | zhaoliu  | nan     |
|       5 | sunqi    | nan     |
+---------+----------+---------+

恢復(fù)成功了,那么還有基于位置、時間的恢復(fù),命令格式如下:

[root@localhost ~]# mysqlbinlog --no-defaults /usr/local/mysql/logs/mysql-bin.000002    #使用工具查看日志文件

........................
# at 199       #199即為一個動作的位置,接下來就是這個動作的時間
#190516 14:39:47 server id 1  end_log_pos 322 CRC32 0x5339b5bd  Query   thread_id=5 exec_time=0 error_code=0
use `test`/*!*/;
SET TIMESTAMP=1557988787/*!*/;
insert into user_info values('4','zhaoliu','nan')
/*!*/;
# at 322
#190516 14:39:47 server id 1  end_log_pos 353 CRC32 0x873df67e  Xid = 54
COMMIT/*!*/;               #該字樣表示為提交
# at 353
#190516 14:39:57 server id 1  end_log_pos 432 CRC32 0xcd2543f7  Query   thread_id=5 exec_time=0 error_code=0
SET TIMESTAMP=1557988797/*!*/;
BEGIN
/*!*/;
# at 432
#190516 14:39:57 server id 1  end_log_pos 553 CRC32 0xc1300526  Query   thread_id=5 exec_time=0 error_code=0
SET TIMESTAMP=1557988797/*!*/;
insert into user_info values('5','sunqi','nan')
/*!*/;
# at 553
#190516 14:39:57 server id 1  end_log_pos 584 CRC32 0xebb496fb  Xid = 55
COMMIT/*!*/;

......................

[root@localhost ~]# mysqlbinlog --no-defaults --start-position='353' /usr/local/mysql/logs/mysql-bin.000002 | mysql -u root -p      
Enter password: 

--start-position='353':表示為從位置353開始恢復(fù),該日志文件353之前的數(shù)據(jù)不會恢復(fù);

以上選項可更改為下面類型:

--stop-position='353':表示恢復(fù)到位置353就停止,該日志文件353之后的數(shù)據(jù)不會恢復(fù);

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

--start-datetime='2019-05-16 14:39:47':表示恢復(fù)該時間之后的數(shù)據(jù);

--stop-datetime='2019-05-16 14:39:47':表示僅恢復(fù)該時間之前的數(shù)據(jù);

切記,所有類型的增量恢復(fù)之前,都必須先執(zhí)行最近一次的完全恢復(fù)。


分享文章:MySQL的備份與恢復(fù)詳解
網(wǎng)頁地址:http://weahome.cn/article/igcjep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部