iT邦幫忙

0

如何「匯出」mysql的table?(不含table內的資料)

請教一個mysql問題

在本機windows內的mysql 表格裡面的「欄位」有異動、還有新增 新欄位了

而我也想更新 在ubuntu裡的mysql 的表格內欄位

以往我都採用 在本機windows 用phpmyadmin 將mysql 的db 整個「匯出」
然後我再「匯入」到ubuntu內的mysql

但這樣做的方式,會發生 ubuntu內的mysql 會「吃下」整個本機mysql的資料庫,而導致原本自己的資料都不見

有沒有什麼方法,可以將本機mysql裡的「table」都匯出,而不匯出本機mysql內的資料呢?

等於 我在ubuntu內的mysql 可以只「匯入」所有新的「table」就可以 而原本的資料都還可以存在

謝謝您

看更多先前的討論...收起先前的討論...
dragonH iT邦大師 1 級 ‧ 2019-11-19 23:03:22 檢舉
.
ccutmis iT邦高手 9 級 ‧ 2019-11-19 23:46:01 檢舉
Q: 有沒有什麼方法,可以將本機mysql裡的「table」都匯出,而不匯出本機mysql內的資料呢?

A:參考這個方法 運氣好的話可以一行搞定
C:\mysql\bin\mysqldump -u root -p --no-data yourDatabaseName > output_schema.sql

但是你在ubuntu內的mysql舊資料是不是只匯入新的table.sql就可以更新而且還保留原本資料我就不敢肯定了,沒作過這種傻事。。。
jerry168 iT邦新手 5 級 ‧ 2019-11-20 09:25:02 檢舉
非常謝謝您 給我線索,我剛搜尋到 這個指令 跟您的很像

匯出資料庫結構(不含資料)
mysqldump -u username -p -d dbname > dbname.sql

請問 我在本機windows 裡 要執行 mysqldump 這個指令 是一定要到 mysql的安裝目錄底下 好像是「 bin」底下 去執行 才可以 對嗎?
jerry168 iT邦新手 5 級 ‧ 2019-11-20 09:37:32 檢舉
剛又查到 這個指令
o export a MySQL database to a dump file without any data, you can use —no-data in mysqldump:

mysqldump -u <user_name> -h <server> -p --no-data <db_name> > schema.sql

請問 這裡的 -h <server> 我是不是輸入 localhost呢?
ccutmis iT邦高手 9 級 ‧ 2019-11-20 10:00:07 檢舉
在windows裡面,先確定mysql服務有開(運作中),然後開命令列模式,把目錄移到mysql安裝路徑裡的bin再執行mysqldump指令即可,另外用mysql -uroot 可以用命令模式對資料庫作存取(功能就像是phpmyadmin一樣,不過是在dos底下執行)我比較推薦你練一下這個部份,學會了就不需要phpmyadmin了。詳情請上google搜'mysql命令 教學'

Q:請問 這裡的 -h <server> 我是不是輸入 localhost呢?
A: 如果你的mysql是在本地端的話 -h 127.0.0.1 或 -h localhost 是可以省略的

Q:請問 我在本機windows 裡 要執行 mysqldump 這個指令 是一定要到 mysql的安裝目錄底下 好像是「 bin」底下 去執行 才可以 對嗎?
A: 大致對。你進到bin資料夾裡面直接執行mysqldump最簡單好懂,因為mysqldump檔案就在那裡面,但是其實也是可以寫完整路徑執行的例如:
C:\mysql\bin\mysqldump....略...
打的字愈多愈有機會出錯,甚至路徑中包含空白字元的也可能會出錯,保險起見還是進bin裡面執行了,一般會教你進bin執行多半是這個用意。
jerry168 iT邦新手 5 級 ‧ 2019-11-21 11:41:09 檢舉
我剛 執行 有dump下來schema了
那如果 要將此schema 匯入 到另一個mysql 內的testDB 是否可以用 source指令呢?ex:
source /home/jerry/testDB_schema.sql

然後 我有查到 如果要 匯出 某個table的schema 可下指令:
mysqldump -u username -p -d dbname tablename > tablename.sql

那如果 我將此table的schema 匯入到另一個mysql內的 testDB內的 testTable 指令該如何下呢?

謝謝您
0
小魚
iT邦大師 1 級 ‧ 2019-11-19 23:12:37

可以考慮使用HeidiSQL. (推坑

如果還要包含欄位異動的話,
學學Laravel的migration吧! (繼續推坑

0
浩瀚星空
iT邦大師 1 級 ‧ 2019-11-20 02:31:03

匯出單純節構的資料表倒是不難做到。
倒是匯入會比較麻煩就是了。
畢竟同名的情況下。一定會清掉你的資料。

一般會用兩種做法。在匯出表時做前綴處理。
先匯入有前綴名的表。後再做內部的資料轉移。

不過另外一種安全的方式是做資料安全欄位設定處理就好。
也就是你只要找出有變的欄位去做更新就行了。

0
ckp6250
iT邦新手 3 級 ‧ 2019-11-20 05:10:47

花錢消災,
我所知最好的工具是 navicat
它有一個【結構同步】功能,可以100%安全無虞地達到您想要的結果。
因為我常用!

0
海綿寶寶
iT邦大神 1 級 ‧ 2019-11-20 09:50:39

更改 table 欄位這種事,如果沒有事前設計配套程式自動化,最好是「手動」慢慢改。
為了幾個欄位的變化,要整個資料庫 delete/define,實在有點小題大作也有風險

有沒有什麼方法,可以將本機mysql裡的「table」都匯出,而不匯出本機mysql內的資料呢?


在phpmyAdmin中
1.選擇原始「資料庫」(不要點任何一個資料表)後
2.選「匯出」
3.匯出方式選「自訂」
4.格式選「SQL」
5.把「資料」部份的勾勾拿掉
6.產生的 SQL 檔案即是所要的結果
即可,如下圖
https://ithelp.ithome.com.tw/upload/images/20191120/20001787HFhNChzpl5.png

等於 我在ubuntu內的mysql 可以只「匯入」所有新的「table」就可以 而原本的資料都還可以存在

不可以(原因見後舉例)
正確的做法是
1.選擇目的「資料庫」(不要點任何一個資料表)後
2.選「匯出」
3.匯出方式選「自訂」
4.格式選「SQL」
5.把「結構」部份的勾勾拿掉
6.產生的 SQL 檔案即是「原來的所有資料」

最關鍵的部份來了
1.選擇目的「資料庫」(不要點任何一個資料表)後
2.選「匯入」
3.格式選「SQL」
4.匯入「由原始資料庫匯出的 sql 檔案」,建立所有資料表
5.匯入「由目的資料庫匯出的 sql 檔案」,匯入「原來的所有資料」
6.第5步驟會發生一些因為資料表結構不同的錯誤,要靠你自己手動修改後再重新匯入
7.匯入成功則大功告成

看到這裡
你應該會覺得「還是手動改一改就好了,比較簡單」

選我正解

不可以的原因舉例如下:
有一個5x5的書櫃放了一些書
現在修改書櫃的格局
例如:改成6x5(或4x4)、其中有些格子要細分成2,3格
不太可能「書本還在書櫃裡就施工」
因此,施工的順序就是
1.把書全部搬出來
2.改格局
3.把書全部塞回去(塞回去新的格局)

ckp6250 iT邦新手 3 級 ‧ 2019-11-20 11:36:29 檢舉

  恕小弟失禮,您的還不能算是完全正解,只能算是在有和沒有之間。

  我是覺得,花錢能解決的事,還是花錢最好,

  navicat 的【結構同步】,才是最好的方法。

  如果一套dbtabase中,有10個table的欄位要異動,包括觸發,聯外,索引,character,collate,會搞死人。

  萬一還有procedure 和 function 呢,要如何同步?

  風吹鴨蛋殼,財散人安樂。

MySQL Workbench , Oracle 官方出的,免費.
有逆向工程功能....

我要發表回答

立即登入回答