資料庫遷移命令
① 簡單分析Flask 資料庫遷移詳情
1、使用 Flask-Migrate 實現資料庫遷移
db.create_all()不會重新創建表或是更新表,需要先使用db.drop_all()刪除資料庫中所有的表之後再調用db.create_all()才能重新創建表,但是這樣的話,原來表中的數據就都被刪除了,這肯定是不行的,這時就出現了資料庫遷移的概念。
在開發過程中,隨著需求的變化,有可能需要添加或修改表的一些欄位,但是原表中的數據不能刪除,此時就需要創建新表,並將舊表中的數據遷移至新表中,Flask-Migrate這個擴展就可以在不破壞數據的情況下更新資料庫表的結構,並完成數據從舊表到新表的遷移。
2、Flask-Migrate的使用
可以使用pip install flask-migrate進行安裝。在程序中,我們實例化 Flask_Migrate 提供的 Migrate 類,進行初始化操作。
實例化 Migrate 類陵培,需要傳入 Flask 實例 app 和 sqlAlchemy創建的實例 db。
2.1 資料庫的遷移過程
先定義 User 模答汪凱型類。
創建遷移環境
在開始遷移數據之前,需要先使用下面的命令創建一個遷移環境:
遷移環境只需創建一次,創建後會在項目根目錄下生成一個 migrations 目錄,其中包含了自動生成的配置文件和遷移版本目錄。
生成遷移腳本
使用如下命令自動生成遷移腳本:
-m 選項添加備注信息,執行後遷移版本目錄生成了遷移腳本。
遷移腳本內有兩個函數:
upgrade():把遷移中的改動應用到資料庫中
downgrade():將改動撤銷
自動生成的遷移腳本會根據模型定義和資料庫當前狀態的差異,生成upgrade()和downgrade()函數的內容,不一定完全正確,有必要再進行檢查一下。
更新資料庫
生成了遷移腳本後,使用flask db upgrade命令可完成對資料庫的更新。執行後即可生成資料庫及表。
如果之後我們需要改動 user 表中的欄位,比如添加一個mobile欄位,我們只需在清喚 User 模型類中添加該屬性,之後執行flask db migrate -m '注釋'和flask db upgrade命令即可。
如果想要回滾遷移的話,可以執行flask db downgrade命令。
3、總結
這里只是介紹如何在 Flask 中進行資料庫遷移,關於在生產環境下,是否需要使用遷移工具或者使用何種工具進行遷移,這里不做討論,至於我的話,在生產環境中,我沒有使用過Flask-Migrate,而是選擇編寫 SQL 腳本來處理資料庫及表的更新或改動,我覺得這樣更不容易出錯,其實各有各的好處,看自己選擇。
② CentOS7下mysql資料庫的遷移
想知道你的mysql裝在哪裡嗎?CentOS7一般是裝在/var/lib/mysql中的
在完成遷移之前,先用下面的指令來停止mysqld服務
service mysqld stop,或者直接點sudo systemctl stop mysqld
然後用df-h指令看伺服器上剩餘空間是多少,假設我們新掛了一塊500G的硬碟到/data上
那麼請把mysql整個文件夾拷貝到/data中,像下面這樣:
sudo cp -rf /var/lib/mysql /data/mysql,拷完以後原來的mysql文件夾就可以刪除了
然後再修改/etc/my.cnf,這個也是需要su的:
sudo vi /etc/my.cnf
裡面有一個欄位叫[mysqld],將datadir和socket修改成這樣:
datadir=/data/mysql
socket=/data/mysql/mysql.sock
接下來,有的人說要修改/etc/init.d/mysqld,但我的伺服器不需要,直接通過
service mysqld start就可以啟動SQL服務了,遠程也可以連接上,但是:
當你使用終端mysql -u root -p的時候,就會報下面這個錯:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
這個時候,你有兩種解決辦法,一種是造一個軟連接
ln -s /data/mysql/mysql.sock /var/lib/mysql/mysql.sock,原因是你已經刪掉之前的mysql目錄了
另外一種辦法,是在/etc/my.cnf下面新建一個新欄位:
[mysql]
socket=/data/mysql/mysql.sock
第一種方法不需要重啟mysql server,第二種方法需要重啟mysql server,
然後,你就可以成功地從終端里進入mysql了
敲黑板,不要在[mysql]下面自做主張地寫上datadir=/data/mysql,這樣會導致本地命令行登錄時報錯:Unknown Variable: datadir=/data/mysql
③ 如何在兩台伺服器之間安全遷移MySQL資料庫
遷移MySQL資料庫通常只需要幾個簡單的步驟,但是由於您要轉移的數據量可能比較龐大,因此一般耗時也會比較長。
下面的步驟將指導您如何從舊的伺服器上導出MySQL資料庫,對它進行安全加固;然後將其復制並導入到新的伺服器上,以保證數據的完整。
將MySQL資料庫導出至轉儲文件(mp file)
Oracle提供了一個名為mysqlmp的工具,允許您輕松地將資料庫結構和其數據導出到一個SQL的轉儲文件。您可以使用如下的命令:
1.mysqlmp -u root -p --opt [database name] > [database name].sql
不過,請注意如下幾點:
我們可以使用--single-transaction的標志,以避免資料庫在導出數據的過程中被鎖死。這樣能夠在將數據導出到轉儲文件的同時,您仍可繼續在舊的資料庫上更新數據。不過請注意,那些在導出進程已經開始之後被更新的數據,是不會被導入轉儲文件之中的。
在運行該命令之前,請務必將[database name]替換成您的實際資料庫名稱。
請輸入您自己的用戶名和相對應的密碼,並確保該用戶具有備份資料庫所需的許可權。
安全加固備份文件
在大多數情況下,數據是一家企業的最重要的資產。因此,我們不希望資料庫的各種備份被暴露在不受保護的伺服器上,因為這樣有可能會造成錯誤地泄露,甚至會出現被黑客竊取等更為糟糕的狀況。
因此,通常您可以嘗試的做法是:壓縮、加密文件,然後刪除原文件。在Linux操作系統上,請使用以下的命令對已壓縮文件進行加密:
1.zip --encrypt mp.zip db.sql
在壓縮開始之前,系統將提示您輸入密碼。
傳輸備份文件
至此,我們已經獲得了一個加密的轉儲文件。下面讓我們通過網路使用SCP命令,將其傳輸到新的伺服器上:
1.scp /path/to/source-file user@host:/path/to/destination-folder/
將MySQL轉儲導入新伺服器
通過上面一步,我們已將備份文件傳到了新的伺服器上,下面讓我們來進行解密和提取:
1.unzip -P your-password mp.zip
為了存儲空間和安全方面的原因,一旦文件導入成功,請記得刪除其對應的轉儲文件。
您可以使用以下的命令來導入文件:
1.mysql -u root -p newdatabase < /path/to/newdatabase.sql
在新伺服器上驗證導入的數據
現在我們在新伺服器上已經導入了資料庫,那麼我們就需要一種方法來驗證數據的真實存在,並確保沒有任何遺漏。
我建議您同時在舊的和新的資料庫上運行如下查詢,並將獲得的結果進行對比。
該查詢會在所有的表裡計算行數,以顯示出新、舊資料庫中的數據量。
1.SELECT
2.TABLE_NAME,
3.TABLE_ROWS
4.FROM
`
5.information_schema`.`tables`
6.WHERE
`
7.table_schema` = 'YOUR_DB_NAME';
此外,我建議您檢查各個表中數字列的MIN和MAX記錄,以確保數據本身是有效的,而不僅僅是看數據的總量(雖然這是查詢所唯一能夠讀出的值)。另一種可供測試的選擇是將資料庫從新的伺服器導出為SQL轉儲文件,並將其與舊伺服器的SQL轉儲文件做比較。
此外,在應用程序被遷移之前,我建議您先將一個應用程序的實例重定向到新的資料庫上,以確認一切運行正常。
另一種導出和導入的選項
我們之所以把該選項放在最後,是因為我們的確不建議您去使用它。
該方法實現起來非常的容易,因為它僅使用一個命令,便能一次性將轉儲文件導出、傳輸、並將其數據導入到新的資料庫之中。
而它的不足之處在於,一旦其網路鏈接斷掉,您就需要重新啟動它了。
因此,我們認為它並不值得被推薦,尤其是在大型資料庫中,可能會非常不適用。
當然,如果您非要嘗試一下的話,可以使用如下的命令:
1.mysqlmp -u root -pPassword --all-databases | ssh user@new_host.host.com 'cat - | mysql -u root -pPassword'
重要提示
請確保在新舊兩處,安裝有相同官方發行版本的MySQL伺服器。否則,你需要按照MySQL網站上的升級說明來進行統一(請參見(https://dev.mysql.com/doc/refman/5.7/en/upgrading.html)。
請確保您在舊的伺服器上擁有足夠的空間來保存轉儲文件和壓縮文件(應該有db_size×2的空間)。
請確保您在新的伺服器上擁有足夠的空間來保存加密的和解密的轉儲文件、並能導入資料庫(應該有db_size×3的空間)。
如果您曾經考慮過只是將datadir從一個資料庫轉移到另一個的話,我建議您最好不要這樣做。否則,您會搞亂資料庫的內部結構,而且會給將來可能的問題埋下隱患。
在新的伺服器配置中,請不要忘了配置諸如innodb_log_file_size這樣的重要標志。因為如果忘記了根據新伺服器的規格而更新配置的話,很可能會導致嚴重的性能問題。
在許多情況下,一般升級到新的資料庫伺服器的初衷是為了提高查詢性能。而如果此類升級沒有達到預期的改善,那麼您就應該考慮去優化SQL查詢,而不僅僅是升級硬體那麼簡單了
④ sw2020怎麼調出數據遷移命令
sw2020調出數據遷移命令的方法如下:答逗
1、打開sw2020,清正賣點擊文件菜單。
2、在下拉菜單中選擇數據遷清清移,可調出數據遷移窗口。
⑤ 如何復制MySQL資料庫或表到另外一台伺服器
1、如果系統和mysql版本都一致,你可以直接把mysql打個包,放到另一台伺服器上去後,啟動mysql即可使用
2、或者只復制資料庫目錄,但是得看錶用的哪種存儲結構,例如data/db01
3、或者只復製表,也得看錶用的哪種存儲結構,例如data/db01/user01.*
4、或者用mysqlmp導出數據,mysql導入數據,例如:
mysqlmp -uuser01 -p123456 db01 > db01.sql
恢復數據
mysql -uuser01 -p123456 -Ddb01 < db01.sql
⑥ 在下對MVC(EF)中的資料庫遷移不是很理解,(比如enable-migration add-mi
這些都是EF的命令, 就像 在cmd窗口輸入ping 123.123...這樣的命令
enable-migration 是開啟資料庫遷移的命令
add-migration 新增一個遷移項, 比如你新加一個類, 同時生成對應的表UserInfo:
[Table("UserInfo")]
public class 用戶
{
一堆的屬性
}
遷移命令就是 add-migration 用戶add, 這個命令執行完之後會 生成一個遷移文件(可修改),
然後執行命令update-database, 這個命令會根據遷移文件生成對應的表.
當然了, 新建類之後, 在update-database之前, 記得要把這個類在對應的DataContext中引用
更改類的屬性的命令是 add-migration 用戶change, 然後update-database
刪除類的命令是 add-migration 用戶delete, 然後update-database
⑦ MYSQL數據怎麼從一個電腦轉移到另一個電腦
1、找到my.ini文件,裡面有一行datadir=...的,就是資料庫文件目錄,關掉mysql服伏羨務,將這個目錄整個拷貝過去在那邊再配my.ini讓目錄吻合就行了。
2、把資料庫上的資料備份出來,到另外一個資料庫還原,有工具PHPMYADMIN;
也可以命令行導出,利用「mysqlmp -u 用戶名 -p databasename >exportfilename」導出資料庫到文件,導入:
進入MySQL Command Line Client,輸入密碼,進入到「mysql>」,輸入命令"show databases;",回車,看看有些什麼資料庫;建立你要還原的資料庫,輸入"create database voice;",回車;切換到剛建立的資料庫皮鏈,輸入燃廳孫"use voice;",回車;
導入數據,輸入"source voice.sql;
"回車,開始導入,再次出現"mysql>"並且沒有提示錯誤即還原成功。