iT邦幫忙

2

Mysql如何匯入純Schema資料結構的異動?

我有 A電腦(win系統)、B電腦(Ubuntu系統)

目前A電檔內的mysql內的 testTable內有新增許多欄位,所以我使用mysql指令

mysqldump -u root -p --no-data testDB > testDB_schema.sql

將「資料結構」都備份下來。

然後我到B電腦,直接在終端機內輸入指令
mysql -u root -p testDB < testDB_schema.sql

然後B電腦內的mysql資料結構schema也都有更新成功, 但結果B電腦內Mysql內所有table的原本的「資料」全部不見了 @@

請問以上 我有那裡有做錯的嗎? 該如何做,才能保留住B電腦內mysql的原本data,而只有更新table的資料結構欄位呢?

謝謝您

2
一級屠豬士
iT邦高手 1 級 ‧ 2019-11-30 15:12:14
最佳解答

Oracle 買了 MySQL 以後,有免費提供一個強大的工具, MySQL Workbench

裡面有 同步
https://dev.mysql.com/doc/workbench/en/wb-database-synchronization.html

差異報告

https://dev.mysql.com/doc/workbench/en/wb-database-diff-report.html

看更多先前的回應...收起先前的回應...
ckp6250 iT邦新手 3 級 ‧ 2019-11-30 15:39:08 檢舉

那個功能,是另外的用途.不是標題那樣的防止誤刪.
這個是很早以前就有的定義了,而且還有專書在探討.
我們沒必要在這裡討論,因為這樣會零零落落的.

隔10天來問相同的問題
會有不同的答案嗎?

見鬼了
還真的有不同的答案
/images/emoticon/emoticon06.gif

海綿寶寶
這種現象很多啊,有些人根本不會聽下去建議的.心理已經認定,就是要用哪招.

ckp6250 iT邦新手 3 級 ‧ 2019-11-30 16:54:12 檢舉

一級屠豬士

  因為 mariadb 直到 10.3 才有這個功能,我之前為了做出類似功能,弄得天昏地暗,效果也不儘理想,現在內建了,總算鬆一口氣。

  聽您的意思,postgresql 很早就有相同的功能囉?

  這種功能,有時挺實用的,客戶亂改亂刪,硬說我們的計算有錯,和他之前的答案不一樣;又不承認有動過資料,有這樣的機制,隨時可以當做呈堂證供。

變動紀錄的功能用 trigger 做就可以了.
這個不管是 Oracle, Postgresql, MySQL 都可以
做到,但是 trigger 使用的語法不同.
table 版本的功能是另外的,這個是另外有書在探討,
這個就不要在這串討論下去了.這裡討論的位置很小,
又不能有其他功能,我們另外討論,不然就是反反
覆覆,效果又不好. 同樣的話不要一直講,然後重點
又沒有聚焦.

/images/emoticon/emoticon47.gif

一級屠豬士

這種現象很多啊,有些人根本不會聽下去建議的.心理已經認定,就是要用哪招.

說的對
祝他好運

jerry168 iT邦新手 5 級 ‧ 2019-12-02 11:53:12 檢舉

一級屠豬士
感謝您提供的方向,我正在實驗中
但我的workbench8.0 的tab上找不到synchronize的選項,可否請問您知道為何嗎?

如圖:https://uploadpie.com/2JyB8W

謝謝幫忙^^

File->New Model, 在 MySQL Model (頁籤)
然後 database 會出現選項

jerry168 iT邦新手 5 級 ‧ 2019-12-02 12:08:04 檢舉

一級屠豬士
我已有先連線進一個database了
然後才發覺 上面tab 的database裡面沒有synchronize的選項
我正再繼續尋找原因中....><
https://uploadpie.com/pi5kwK

圖片裡有顯示目前已連線的database

仔細觀察一下官方文件 是在 Chapter 9 Database Design and Modeling.

MySQL Workbench 是有資料庫設計功能的強大工具.
這段是屬於規劃設計.

jerry168 iT邦新手 5 級 ‧ 2019-12-02 12:23:40 檢舉

一級屠豬士
是否在 tab裡File→Open Model
我必須先開啟一個model ,然後就可以 synchronize呢?

先開啟(建立)一個model.之後還可以存檔,以後繼續使用.

1
阿展展展
iT邦好手 1 級 ‧ 2019-11-30 14:14:43

mysqldump -u root -p --no-data testDB > testDB_schema.sql
匯出的 sql 檔裡,你要的資料都在還嗎?

看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2019-11-30 14:20:30 檢舉

他說了這個

將「資料結構」都備份下來。

然後

B電腦內Mysql內所有table的原本的「資料」全部不見了

ckp6250 iT邦新手 3 級 ‧ 2019-11-30 14:30:08 檢舉

  我是覺得,怪來怪去要怪 mysql , 這種【同步結構】的需求很常見地,它應該要提供內建指令才對,類似這樣的東東:

  sync stru|data 192.168.0.1 test1 192.168.0.2 test2

  不過,話說回來,它也沒有收我們的錢錢,又不好意思要求太多。

/images/emoticon/emoticon10.gif

小魚 iT邦大師 1 級 ‧ 2019-11-30 17:08:55 檢舉

MySql有叢集,
如果用叢集就可以同步結構跟資料了.

0
小魚
iT邦大師 1 級 ‧ 2019-11-30 14:18:49

要改之前記得先備份,

從刪庫到跑路,

如果是測試資料庫就算了...

0
ckp6250
iT邦新手 3 級 ‧ 2019-11-30 14:21:08

  您這種做法,一定是這種結果,沒法只變更結構而保留下資料。

要做到這點,目前以我所知,最好的工具是 navicat【結構同步】

它有試用版,您可以拿來試用,不過,我是建議花錢買一套吧,會常用到它的。
jerry168 iT邦新手 5 級 ‧ 2019-11-30 14:41:59 檢舉

ckp6250
我目前還在花時間找 看有沒有以下這種方法....
步驟:
(1)先將A電腦內的testDB的schema匯出,就是用mysqlsump --no-data 的指令匯出
(2)將匯出的schema放入到B電腦,然後先將B電腦內mysql的testDB的「資料」都匯出,但不包含schema
(3)在B電腦內mysql去匯入 testDB.schema,然後再將步驟(2)事先匯出的testDB「資料」再「匯入」進去B電腦內mysql

目前我還沒查到 可行的指令
以上的邏輯 行的通嗎?
謝謝您

ckp6250 iT邦新手 3 級 ‧ 2019-11-30 14:51:35 檢舉

https://ithelp.ithome.com.tw/upload/images/20191130/20119662LXoQDW5opJ.jpg

jerry168 iT邦新手 5 級 ‧ 2019-11-30 14:53:24 檢舉

ckp6250
您附上的這個「圖片」沒有顯示出來喔

我要發表回答

立即登入回答