我有 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的資料結構欄位呢?
謝謝您
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
那個功能,是另外的用途.不是標題那樣的防止誤刪.
這個是很早以前就有的定義了,而且還有專書在探討.
我們沒必要在這裡討論,因為這樣會零零落落的.
隔10天來問相同的問題
會有不同的答案嗎?
見鬼了
還真的有不同的答案
海綿寶寶
這種現象很多啊,有些人根本不會聽下去建議的.心理已經認定,就是要用哪招.
因為 mariadb 直到 10.3 才有這個功能,我之前為了做出類似功能,弄得天昏地暗,效果也不儘理想,現在內建了,總算鬆一口氣。
聽您的意思,postgresql 很早就有相同的功能囉?
這種功能,有時挺實用的,客戶亂改亂刪,硬說我們的計算有錯,和他之前的答案不一樣;又不承認有動過資料,有這樣的機制,隨時可以當做呈堂證供。
變動紀錄的功能用 trigger 做就可以了.
這個不管是 Oracle, Postgresql, MySQL 都可以
做到,但是 trigger 使用的語法不同.
table 版本的功能是另外的,這個是另外有書在探討,
這個就不要在這串討論下去了.這裡討論的位置很小,
又不能有其他功能,我們另外討論,不然就是反反
覆覆,效果又不好. 同樣的話不要一直講,然後重點
又沒有聚焦.
一級屠豬士
感謝您提供的方向,我正在實驗中
但我的workbench8.0 的tab上找不到synchronize的選項,可否請問您知道為何嗎?
如圖:https://uploadpie.com/2JyB8W
謝謝幫忙^^
File->New Model, 在 MySQL Model (頁籤)
然後 database 會出現選項
一級屠豬士
我已有先連線進一個database了
然後才發覺 上面tab 的database裡面沒有synchronize的選項
我正再繼續尋找原因中....><
https://uploadpie.com/pi5kwK
圖片裡有顯示目前已連線的database
仔細觀察一下官方文件 是在 Chapter 9 Database Design and Modeling.
MySQL Workbench 是有資料庫設計功能的強大工具.
這段是屬於規劃設計.
一級屠豬士
是否在 tab裡File→Open Model
我必須先開啟一個model ,然後就可以 synchronize呢?
先開啟(建立)一個model.之後還可以存檔,以後繼續使用.
mysqldump -u root -p --no-data testDB > testDB_schema.sql
匯出的 sql 檔裡,你要的資料都在還嗎?
您這種做法,一定是這種結果,沒法只變更結構而保留下資料。
要做到這點,目前以我所知,最好的工具是 navicat【結構同步】
它有試用版,您可以拿來試用,不過,我是建議花錢買一套吧,會常用到它的。