成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

一文詳解如何快速遷移MySQL中的數據

本篇文章給大家帶來了關于MySQL的相關知識,其中主要跟大家聊聊怎么才能快速地遷移MySQL中的數據,感興趣的朋友下面一起來看一下吧,希望對大家有幫助。

一文詳解如何快速遷移MySQL中的數據

我們通常會遇到這樣的一個場景,就是需要將一個數據庫的數據遷移到一個性能更加強悍的數據庫服務器上。這個時候需要我們做的就是快速遷移數據庫的數據。

那么,如何才能快速地遷移數據庫中的數據呢?今天我們就來聊一聊這個話題。

數據庫的數據遷移無外乎有兩種方式,一種是物理遷移,另一種則是邏輯遷移

首先,我們生成 5 萬條測試數據。具體如下:

-- 1. 準備表 create table s1(   id int,   name varchar(20),   gender char(6),   email varchar(50) );  -- 2. 創建存儲過程,實現批量插入記錄 delimiter $$ create procedure auto_insert1() BEGIN     declare i int default 1;     while(i<50000)do         insert into s1 values(i,'shanhe','male',concat('shanhe',i,'@helloworld'));         set i=i+1;         select concat('shanhe',i,'_ok');     end while; END$$ delimiter ;  -- 3. 查看存儲過程 show create procedure auto_insert1G   -- 4. 調用存儲過程 call auto_insert1()
登錄后復制

邏輯遷移

邏輯遷移的原理是根據 MySQL 數據庫中的數據和表結構轉換成 SQL 文件。采用這一原理常用的遷移工具有 mysqldump

下面我們就來測試一下:

[root@dxd ~]# mysqldump -h172.17.16.2 -uroot -pTest123!  s1 s1 --result-file=/opt/s1.sql  [root@dxd ~]# ll /opt/ -rw-r--r--  1 root root 2684599 5月  10 00:24 s1.sql
登錄后復制

我們可以看到的是,生成了相應的 SQL 。現在我們通過生成的 SQL 遷移到另一個數據庫中。

mysql> use s2; Database changed  mysql> source /opt/s1.sql
登錄后復制

通過簡單的時間累加計算,大約消耗了 1 秒鐘的時間,但是隨著數據庫遞增,遷移的時長也會相應地增加。此時,如果需要遷移的數據表中的數據足夠大(假設上千萬條),mysqldump 很有可能會將內存撐爆進而導致遷移失敗。所以,在遷移這樣的數據表的時候,我們可以簡單優化一下 mysqldump ,具體如下。

  • --add-locks=0:這個參數表示在遷移數據的時候不加 LOCK TABLES s1.s1 WRITE;,也就是說在導入數據時不鎖定數據表。

  • --single-transaction:表示的是在導出數據時,不鎖定數據表。

  • --set-gtid-purged=OFF:表示在導入數據時,不輸出 GTID 相關的信息。

加上這三個參數主要是為了減少所有的操作導致不必要的 IO ,具體如下:

[root@dxd ~]# mysqldump -h172.17.16.2 -uroot -pTest123! --add-locks=0 --single-transaction --set-gtid-purged=OFF s1 s1 --result-file=/opt/s1.sql
登錄后復制

通過上面的案例,我們看最終結果,優化的效果微乎其微。所以,這種邏輯優化的方式,在數據量比較大的情況下(百萬條以上)不可取。

文件遷移

文件遷移顧名思義就是直接遷移數據庫的存儲文件。這種遷移方式相對于邏輯遷移的方式來說,性能上要高出很多,同時也很少會把內存撐爆;在面對數據量較大的場景下遷移數據,建議使用文件遷移的方式,具體如下:

mysql> select * from s1 into outfile '/var/lib/mysql-files/1.txt'; Query OK, 55202 rows affected (0.04 sec)
登錄后復制

我們可以看到的是,將 5 萬多條數據導出到文件中時,只花了 0.04 秒左右的時間。相比較 mysqldump 來說快了一倍多。

注意:這種方式導出的數據只能導出到 MySQL 數據庫的目錄中。配置這個目錄的參數是 secure_file_priv,如果不這樣做,數據庫會報一個 ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 的錯誤。

導出數據之后,我們再將該文件中的數據導入到數據庫中,看一下效果,具體如下:

mysql> load data infile '/var/lib/mysql-files/1.txt' into table s3.s1; Query OK, 55202 rows affected (0.27 sec) Records: 55202  Deleted: 0  Skipped: 0  Warnings: 0
登錄后復制

注意:into outfile 是不會生成表結構的,因此在導入數據之前,需要手動創建表結構。

我們可以看出,導入花費的時間總共是0.27秒,相比較 mysqldump 而言,也要快兩倍多。

這種方式主要是將每一條數據都以n換行的方式直接保存在文件之中。

導入的時候,首先會判斷導入的數據表的字段是否與每一行的數據的列數一致,如果一致則一行一行地導入,如果不一致則直接報錯。

這里面有一個問題需要我們注意,如果我們的數據庫是主從架構的數據庫,這里很可能就會產生一個問題。講這個問題之前,我們得首先在這里稍微說明一下主從復制的原理。

主從復制的原理主要是依賴于 binlog 日志,binlog 日志具體步驟如下:

  • 主庫上執行 SQL ,并且把修改的數據保存在 binlog 日志之中;

  • 由主庫上的 dump 線程轉發給從庫;

  • 由從庫中的 IO 線程接收主庫發送過來的 binlog 日志;

  • 將 binlog 日志數據寫入中繼日志之中;

  • 通過從庫上的 SQL 線程從中繼日志中重放 binlog 日志,進而達到主從數據一致。

在這個過程之中,我相信仔細閱讀本小冊第 15 篇文章的朋友一定有一個疑問,當 binlog 日志的工作模式為 STATEMENT 時,在主庫上執行上面的 SQL load data infile '/var/lib/mysql-files/1.txt' into table s3.s1; 時,就會導致從庫無法重復上方 SQL 的結果,這是因為從庫中并沒有 /var/lib/mysql-files/1.txt 這個文件。具體步驟如下:

  1. 主庫執行 load data infile '/var/lib/mysql-files/1.txt' into table s3.s1;

  2. binlog 日志的工作模式如果是 STATEMENT 時,將在 binlog 中記錄上方的 SQL;

  3. 然后在從庫中重新執行 binlog 中記錄上方的 SQL。

很顯然,從庫上執行該 SQL 時,會立即報錯,這個時候怎么辦呢?

這個時候我需要再介紹上方 SQL 的 load 關鍵字:

  • 如果增加 local 關鍵字,則該條 SQL 會在本地尋找 /var/lib/mysql-files/1.txt

  • 如果不加 local 關鍵字,則該條 SQL 會在主庫端尋找 /var/lib/mysql-files/1.txt

所以,在主從架構中,要使用文件遷移的方式遷移數據,不加 local 關鍵字即可。

物理遷移

物理遷移也是遷移文件,所不同是物理遷移一般是直接遷移 MySQL 的數據文件。這種遷移方式性能很好但是操作過程麻煩,容易出錯。具體我們來詳細解釋一下

首先是非常干脆的遷移方式遷移,就是直接 MySQL 數據庫的數據文件打包遷移,下面我們做一個案例:

-- 我們將s1數據庫中的所有數據遷移到s4數據庫之中 [root@dxd mysql]# pwd /var/lib/mysql [root@dxd mysql]# cp -r s1 s4 [root@dxd mysql]# chown -R mysql.mysql s4  -- 重啟數據庫 [root@dxd mysql]# systemctl restart mysqld  -- 查看該表數據 mysql> select count(*) from s1; ERROR 1146 (42S02): Table 's4.s1' doesn't exist
登錄后復制

我們可以看到的是查詢數據的時候報了一個 1146 的錯誤,這是因為 INnoDB 存儲引擎中的數據表是需要在 MySQL 數據庫的數據字典中注冊的,我們直接將數據文件復制過去的時候并沒有在數據字典中注冊,換句話說就是在把數據復制過去之后,還需要在數據字典中注冊數據庫系統才能正常識別。

下面我們就來介紹一下在數據字典中該如何注冊,具體步驟如下。

注:物理遷移數據表數據實際上最主要的就是遷移表空間,因為對于 InnoDB 存儲引擎來說,數據是存儲在數據表空間中的,也就是.idb文件。

我們在遷移到的數據庫中創建與需要遷移的數據表完全相同的數據表。

mysql> create database t1; Query OK, 1 row affected (0.01 sec) mysql> use t1; Database changed mysql> CREATE TABLE s1 (
登錄后復制

->   `id` int(11) DEFAULT NULL, ->   `name` varchar(20) DEFAULT NULL, ->   `gender` char(6) DEFAULT NULL, ->   `email` varchar(50) DEFAULT NULL -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
登錄后復制

Query OK, 0 rows affected (0.04 sec)
登錄后復制

刪除新創建的數據表的表空間,這是因為新創建的數據庫的表空間沒有數據且會跟遷移過來的數據表空間沖突,我們提前刪除,具體刪除步驟如下:

mysql> alter table t1.s1 discard tablespace; Query OK, 0 rows affected (0.01 sec)
登錄后復制

創建一個原有數據表的配置文件,這樣做的目的是將原有數據表的一些配置復制過來(注意:這一步會自動將數據表上鎖)。

mysql> use s1; Database changed mysql> flush table s1 for export; Query OK, 0 rows affected (0.01 sec)
登錄后復制

查看是否已經創建 .cfg 文件

[root@dxd mysql]# pwd /var/lib/mysql [root@dxd mysql]# ll s1/
登錄后復制

總用量 12312

-rw-r——- 1 mysql mysql 65 5月 10 00:26 db.opt -rw-r——- 1 mysql mysql 520 5月 10 15:15 s1.cfg -rw-r——- 1 mysql mysql 8652 5月 10 00:27 s1.frm -rw-r——- 1 mysql mysql 12582912 5月 10 00:27 s1.ibd
登錄后復制

將配置文件和表空間文件遷移至新的數據庫。

復制文件的方式可以靈活多變

[root@dxd mysql]# cp s1/s1.cfg t1/ [root@dxd mysql]# cp s1/s1.ibd t1/
登錄后復制

設置權限,很重要,如果權限不一致會導致數據讀取表空間數據失敗

[root@dxd mysql]# chown -R mysql.mysql t1/
登錄后復制

將原有數據表解鎖。

mysql> use s1; Database changed mysql> unlock tables; Query OK, 0 rows affected (0.00 sec)
登錄后復制

載入新的表空間。

mysql> use t1; mysql> alter table s1 import tablespace; Query OK, 0 rows affected (0.09 sec)
登錄后復制

測試。

mysql> select count( ) from s1; +—————+ | count( ) | +—————+ | 55202 | +—————+ 1 row in set (0.03 sec)
登錄后復制

我們看到此時就實現了數據遷移。

這種數據遷移雖然性能很好,但是過程非常麻煩,很容易出現操作失誤的情況。

總結

今天,我們介紹了三種數據庫遷移的方式,分別是:邏輯遷移、文件遷移和物理遷移。

邏輯遷移的方式主要是使用 mysqldump 命令進行遷移,其原理主要是將數據庫中的數據和結構生成 SQL 文件,再導入即可。這種遷移方式主要適用于數據量比較小且服務器性能較好的場景下,例如數據連少于 500 萬條以下的場景。

文件遷移的方式其實也算是邏輯遷移的范疇,它主要通過命令將數據保存在文件中,然后再導入數據庫即可,這種遷移方式是不會遷移表結構的,所以在導入數據之前需要手動創建表結構,其原理跟邏輯遷移的方式相同。

物理遷移的方式適用于數據量比較大的場景,這種場景不易導致服務器因資源占用過多而宕機,但是操作過程麻煩且會鎖定原數據表。

在實際應用過程中,我們通常選擇使用 mysqldump 的方式進行數據遷移;如果數據量大,我們首選方式應該是提升服務器的性能,以至于它能夠承載處理相應數據量的性能;如果必須遷移,可以考慮使用第三方專業的數據遷移工具。

推薦學習:《MySQL視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久久国产精华液| 乱人伦精品视频在线观看| 国精品无码一区二区三区左线| 好爽又高潮了毛片免费下载| 精品精品国产高清A级毛片| 久久久精品人妻人人澡| 蜜臀AV一区二区三区四区| 女生会把隐私透露给异性朋友| 琪琪电影网WWW888DVDC| 色婷婷亚洲十月十月色天| 无码人妻精品一区二区| 亚洲AV无码不卡国产精品| 亚洲色大成网站WWW永久网站| 与亲女洗澡伦了东北| YY6090青苹果影院| 高清拍拍拍无挡国产精品| 国产熟女乱子视频正在播放| 精品无人区一区二区三区在线| 麻豆精品一卡2卡三卡4卡免费观 | 人妻熟妇乱又伦精品视频APP| 色综合久久综合欧美综合网| 亚洲AV成人片在线观看香蕉资源| 一本久道视频无线视频| 99久久精品无码专区| 富婆推油偷高潮叫嗷嗷叫| 国偷自产AⅤ一区二区三区| 久久夜色精品国产亚洲| 人妻无码视频一区二区三区| 无人高清视频免费观看在线 | Chinese老女人老熟妇69| 国产AV导航大全精品| 久久AV无码AⅤ高潮AV喷吹| 欧美乱妇高清无乱码在线观看| 天堂√中文最新版在线| 亚洲午夜性春猛交ⅩXXX| WWW久久久天天COM| 国产偷窥熟女精品视频| 猫咪AV成人永久网站| 色综合天天综合网天天小说| 亚洲欧美成人在线观看| 锕锕锕锕锕锕锕好疼免费看网站| 国产无套粉嫩白浆在线| 末成年女AV片一区二区| 天天躁日日躁狠狠躁午夜剧场| 亚洲欧洲无码精品ⅤA| А√天堂资源地址在线| 国精产品999永久中国有限公司 | 天美传媒MV在线看免费| 亚洲综合久久一本久道| 吃瓜网最新官网地址| 久久99国产精品久久99软件| 秋霞A级毛片在线看| 亚洲AⅤ无码精品一区二区三区| 中文在线无码高潮潮喷在线播放| 国产★蜜臀AV无码8MAV| 老旺大肉蟒进进出出电影免费| 少妇高潮太爽了在线观看欧美| 亚洲香蕉成人AV网站在线观看| 丁香五月缴情网站| 久久久久精品无码观看不卡| 少妇高潮XXXⅩ白浆699| 一面膜上边一面膜下边53分钟 | 视频一区麻豆国产传媒| 又大又粗又爽的少妇免费视频| 国产成人剧情AV麻豆映画| 麻花传媒剧国产MV在线观看| 午夜性影院爽爽爽爽爽爽| AV在线播放无码线| 精品久久久久久天美传媒| 色噜噜AV亚洲色一区二区| 一本一道波多野毛片结衣AV黑人| 国产成人无码一区二区在线播放| 妺妺窝人体色www婷婷| 亚洲AV成人片在线观看香蕉资源| YY111111少妇影院无码老| 久久精品成人免费国产片| 玩弄人妻热妇性色Av少妇| BBW下身丰满18XXXX| 久久国产精品成人免费| 无码午夜福利视频一区| 锕锕锕锕锕锕锕好疼免费看网站 | 国产放荡对白视频在线观看| 欧美XXXxX高潮喷水| 亚洲精品亚洲人成在线观看| 国产爆乳无码一区二区麻豆| 欧美VIDEOS另类色HDFR| 亚洲欧美日韩国产综合V| 国产成人AV乱码在线观看| 欧美性白人极品1819HD| 野花韩国视频免费高清3| 国产美女精品自在线拍免费| 日本高清视频色WWW色| 中国BBW50成熟| 黑人玩弄人妻中文在线| 天天躁日日躁狠狠躁欧美老妇小说 | 色噜噜狠狠狠狠色综合久一| 91人妻人人揉人人躁人人| 精品无码人妻夜人多侵犯18 | 欧美日韩久久中文字幕| 曰韩免费无码AV一区二区| 狠狠色狠狠色综合| 无码无遮挡又大又爽又黄的视频 | 色欲AV永久无码精品无码| CAOPORN视频在线观看| 久久亚洲AV成人无码国产电影| 亚洲AV永久无码精品放毛片一| 国产VA免费精品高清在线| 人与畜禽共性关系的重要性有哪些 | XXX片黑人又大又粗又长| 免费看AV在线网站网址| 野外做受又硬又粗又大视频√| 国产在线看片无码人精品| 无码H黄肉动漫在线观看| 粉嫩大学生无套内射无码卡视频 | 久久精品国产99精品国产亚洲性| 亚洲AV片不卡无码一| 国产精品爽爽VA在线观看网站| 色婷婷综合久久久中文字幕| 部长的夫人的味道中字| 人妻少妇AV无码一区二区| CHINESE熟女熟妇1乱| 女人浓毛巨茎ⅩXXOOO毛绒绒| 制服 丝袜 有码 无码 中文| 久久男人AV资源网站无码| 亚洲熟妇无码八AV在线播放| 精品人妻无码区二区三区密桃| 亚洲精品~无码抽插| 精品国产一区二区三区无码| 亚洲国产精品无码7777一线| 妓女院18禁止观看| 亚洲乱色熟女一区二区三区丝袜 | 亚洲精品沙发午睡系列| 黑人巨大粗物挺进了少妇| 亚洲插肏熟女人妇的屄网址 | 末发育娇小性色XXXX| 97久久综合亚洲色HEZYO| 男人GAY自慰吞精网站| 777琪琪午夜理论电影网| 欧美黑人巨大手机在线观看| AV在线亚洲AV 是全亚洲| 欧美性猛交XXXXXⅩXX| 啊~用力CAO我CAO死我视频| 人人妻人人玩人人澡人人爽| 吃奶呻吟打开双腿做受视频免费 | 欧美 日韩 高清 国产AⅤ一区| 7777色情ⅩXXX欧美色妇| 欧美日韩精品视频一区二区三区 | 一本一道AV无码中文字幕﹣百度 | 国产偷V国产偷V亚洲高清| 亚洲国产成人精品福利在线观看| 久草玖玖玖爱在线资源| 余生请多指教在线观看免费全集 | 97久久人人超碰国产精品| 欧美极品性饥渴少妇大战黑人 | 亚洲日韩精品无码AV一区二区三| 久久人人妻人人爽人人爽| 中文字幕人成无码免费视频| 欧洲S码亚洲M码精品一区| 成人午夜无码国产| 铜铜铜铜铜铜铜铜好痛好深色板| 国产熟女亚洲精品麻豆| 亚洲色播爱爱爱爱爱爱爱| 美女扒开腿让男人桶爽网站| WWW.一区二区三区在线 || 日韩日韩日韩日韩日韩| 国产精品一区理论片| 亚洲日本乱人伦片中文| 嫩草院一区二区乱码| 成人白浆超碰人人人人| 午夜精品久久久久久毛片| 色欲色香天天天综合WWW| 中文字幕乱人伦高清视频| 人妻丰满熟妇AV无码| 国产MV高清砖码2022| 亚洲AV中文无码乱人伦| 久久伊人色AV天堂九九| WWWXXX国产| 无码人妻啪啪一区二区| 久草玖玖玖爱在线资源| 1688.COM成品网站入口| 日本少妇人妻XXXXⅩ18| 国产乱码精品一区三上| 一本加勒比HEZYO无码专区| 强开小婷嫩苞又嫩又紧视频| 国产成人亚洲综合无码精品| 亚洲熟妇丰满XXXXX国语| 欧洲乱码一卡2卡三卡4卡高清| 国产嗷嗷叫高潮快点再用力 | 国产精品亚洲综合网熟女| 亚洲色成人中文字幕网站 | 娇妻系列交换27部多P小| 50多岁岳不让我戴套| 熟妇高潮一区二区精品视频| 精品日韩亚洲AV无码| А√天堂资源官网在线资源| 亚洲AV麻豆AⅤ无码电影| 美女脱精光手不挡图片| 国产产无码乱码精品久久鸭| 亚洲一区波多野结衣在线APP| 日本肉体裸交XXXXBBBB|