成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL Dump詳解,你學會了嗎?

數據庫 其他數據庫
本文將圍繞著mysqldump的使用,工作原理,以及對于InnoDB和MyISAM兩種不同引擎如何實現數據一致性這三個方面進行介紹。

在進行數據庫備份的時候主要分為了邏輯備份和物理備份這兩種方式。在數據遷移和備份恢復中使用mysqldump將數據生成sql進行保存是最常用的方式之一。

本文將圍繞著mysqldump的使用,工作原理,以及對于InnoDB和MyISAM兩種不同引擎如何實現數據一致性這三個方面進行介紹。

一.mysqldump 簡介

mysqldump是MySQL自帶的邏輯備份工具。
它的備份原理是通過協議連接到 MySQL數據庫,將需要備份的數據查詢出來,
將查詢出的數據轉換成對應的insert語句,當我們需要還原這些數據時,
只要執行這些insert語句,即可將對應的數據還原。

二.備份的命令

2.1命令的格式

1.mysqldump [選項] 數據庫名 [表名] > 腳本名
2.mysqldump [選項] --數據庫名 [選項 表名] > 腳本名
3.mysqldump [選項] --all-databases [選項] > 腳本名

2.2選項說明

參數名

縮寫

含義

--host

-h

服務器IP地址

--port

-P

服務器端口號

--user

-u

MySQL 用戶名

--pasword

-p

MySQL 密碼

--databases


指定要備份的數據庫

--all-databases


備份mysql服務器上的所有數據庫

--compact


壓縮模式,產生更少的輸出

--comments


添加注釋信息

--complete-insert


輸出完成的插入語句

--lock-tables


備份前,鎖定所有數據庫表

--no-create-db/--no-create-info


禁止生成創建數據庫語句

--force


當出現錯誤時仍然繼續備份操作

--default-character-set


指定默認字符集

--add-locks


備份數據庫表時鎖定數據庫表

三.還原的命令

3.1系統行命令

mysqladmin -uroot -p create db_name 
mysql -uroot -p db_name < /backup/mysqldump/db_name.db

注:在導入備份數據庫前,db_name如果沒有,是需要創建的; 而且與db_name.db中數據庫名是一樣的才可以導入。

3.2source方式

mysql > use db_name;
mysql > source /backup/mysqldump/db_name.db;

四.mysqldump實現的原理

4.1備份流程如下

1.調用FWRL(flush tables with read lock),全局禁止讀寫
2.開啟快照讀,獲取此期間的快照(僅僅對innodb起作用)
3.備份非innodb表數據(*.frm,*.myi,*.myd等)
4.非innodb表備份完畢之后,釋放FTWRL
5.逐一備份innodb表數據
6.備份完成

圖片

4.2執行mysqldump,分析備份日志

#  執行語句
[root@localhost backup]# mysqldump -uroot -proot -h127.0.0.1 --all-databases --single-transaction --routines --events --triggers --master-data=2 --hex-blob --default-character-set=utf8mb4 --flush-logs --quick > all.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~]# tail -f  /var/lib/mysql/localhost.log
第一步:
FLUSH /*!40101 LOCAL */ TABLES
# 這里是刷新表


第二步:
FLUSH TABLES WITH READ LOCK
# 因為開啟了--master-data=2,這時就需要flush tables with read lock鎖住全庫,
記錄當時的master_log_file和master_log_pos點
這里有一個疑問?
執行flush tables操作,并加一個全局讀鎖,那么以上兩個命令貌似是重復的,
為什么不在第一次執行flush tables操作的時候加上鎖呢?
簡而言之,是為了避免較長的事務操作造成FLUSH TABLES WITH READ LOCK操作遲遲得不到
鎖,但同時又阻塞了其它客戶端操作。


第三步:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
# --single-transaction參數的作用,設置事務的隔離級別為可重復讀,
即REPEATABLE READ,這樣能保證在一個事務中所有相同的查詢讀取到同樣的數據,
也就大概保證了在dump期間,如果其他innodb引擎的線程修改了表的數據并提交,
對該dump線程的數據并無影響,然而這個還不夠,還需要看下一條


第四步:
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
# 獲取當前數據庫的快照,這個是由mysqldump中--single-transaction決定的。
# WITH CONSISTENT SNAPSHOT能夠保證在事務開啟的時候,第一次查詢的結果就是
事務開始時的數據A,即使這時其他線程將其數據修改為B,查的結果依然是A。簡而言之,就是開啟事務并對所有表執行了一次SELECT操作,這樣可保證備份時,
在任意時間點執行select * from table得到的數據和
執行START TRANSACTION WITH CONSISTENT SNAPSHOT時的數據一致。
【注意】,WITH CONSISTENT SNAPSHOT只在RR隔離級別下有效。

第五步:
SHOW MASTER STATUS
# 這個是由--master-data決定的,記錄了開始備份時,binlog的狀態信息,
包括MASTER_LOG_FILE和MASTER_LOG_POS

這里需要特別區分一下master-data和dump-slave
master-data:
--master-data=2表示在dump過程中記錄主庫的binlog和pos點,并在dump文件中注釋掉這一行;
--master-data=1表示在dump過程中記錄主庫的binlog和pos點,并在dump文件中不注釋掉這一行,即恢復時會執行;
dump-slave
--dump-slave=2表示在dump過程中,在從庫dump,mysqldump進程也要在從庫執行,
記錄當時主庫的binlog和pos點,并在dump文件中注釋掉這一行;
--dump-slave=1表示在dump過程中,在從庫dump,mysqldump進程也要在從庫執行,
記錄當時主庫的binlog和pos點,并在dump文件中不注釋掉這一行;

第六步:
UNLOCK TABLES
# 釋放鎖。

五.mysqldump對InnoDB和MyISAM兩種存儲引擎進行備份的差異。

5.1對于支持事務的引擎如InnoDB,參數上是在備份的時候加上 –single-transaction 保證數據一致性

–single-transaction 實際上通過做了下面兩個操作 :

① 在開始的時候把該 session 的事務隔離級別設置成 repeatable read ;

② 然后啟動一個事務(執行 begin ),備份結束的時候結束該事務(執行 commit )

有了這兩個操作,在備份過程中,該 session 讀到的數據都是啟動備份時的數據(同一個點)。可以理解為對于 InnoDB 引擎來說加了該參數,備份開始時就已經把要備份的數據定下來了,
備份過程中的提交的事務時是看不到的,也不會備份進去。

5.2對于不支持事務的引擎如MyISAM,只能通過鎖表來保證數據一致性,這里分兩種情況:

1)導出全庫:加 –lock-all-tables 參數,這會在備份開始的時候啟動一個全局讀鎖 
(執行 flush tables with read lock),其他 session 可以讀取但不能更新數據,
備份過程中數據沒有變化,所以最終得到的數據肯定是完全一致的;

2)導出單個庫:加 –lock-tables 參數,這會在備份開始的時候鎖該庫的所有表,
其他 session 可以讀但不能更新該庫的所有表,該庫的數據一致;
責任編輯:武曉燕 來源: GreatSQL社區
相關推薦

2022-12-06 07:53:33

MySQL索引B+樹

2024-02-04 00:00:00

Effect數據組件

2024-01-02 12:05:26

Java并發編程

2022-07-13 08:16:49

RocketMQRPC日志

2022-04-26 08:41:54

JDK動態代理方法

2023-03-08 08:44:47

2023-05-05 06:54:07

MySQL數據查詢

2024-12-31 00:08:37

C#語言dynamic?

2024-09-10 10:34:48

2024-01-19 08:25:38

死鎖Java通信

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2023-03-09 07:38:58

static關鍵字狀態

2024-10-12 10:25:15

2024-08-12 08:12:38

2023-05-18 09:01:11

MBRGPT分區

2023-11-01 07:28:31

MySQL日志維護

2023-07-03 07:20:50

2024-01-02 07:04:23

2023-08-01 12:51:18

WebGPT機器學習模型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 风间由美一区二区三区在线观看 | 久久91精品国产一区二区三区 | 国产精品久久久久久久免费大片 | 天天拍天天操 | 一区二区三区高清 | 久久国产欧美日韩精品 | 欧美视频第二页 | 中文成人无字幕乱码精品 | 91文字幕巨乱亚洲香蕉 | 国产黄色大片在线免费观看 | 免费国产一区 | 国内自拍偷拍 | 日韩中文字幕 | 国产一区二区 | 亚洲综合五月天婷婷 | 亚洲国产精品一区二区三区 | 亚洲视频二区 | 久久久免费 | 免费视频一区 | 黑人久久久 | 91在线观看视频 | 超碰综合 | 久草欧美 | 久久久www成人免费无遮挡大片 | 成人精品一区二区 | 欧美精品综合在线 | 国产精品久久久久久久毛片 | 亚洲视频www| 欧美精品一区二区蜜桃 | 国产欧美日韩在线播放 | 亚洲精品一区二区三区蜜桃久 | 欧洲高清转码区一二区 | 一二三四在线视频观看社区 | 国产欧美在线视频 | 国产精品美女久久久 | 日韩在线观看网站 | 国产美女视频黄 | 日韩在线精品视频 | av网站在线播放 | 一区在线播放 | 涩涩鲁亚洲精品一区二区 |