引言
我們把目光投向一切數(shù)據(jù)的基礎(chǔ)——數(shù)據(jù)庫。應(yīng)用程序設(shè)計的那么復(fù)雜,最終不過是為了在數(shù)據(jù)庫內(nèi)持久化數(shù)據(jù)。
在開發(fā)階段,如果需要導(dǎo)入一個SQL文件,里面存儲了SQL命令,包括建表,數(shù)據(jù)插入等等操作。如何在命令行中執(zhí)行呢?
學(xué)習(xí)時間
假如有一個文件,我們從其他服務(wù)器中的 phpMyAdmin 導(dǎo)出工具中導(dǎo)出,需要遷移到新的數(shù)據(jù)庫內(nèi)。有沒有類似下面這樣的指令呢?
database_name < file.sql
答案是肯定有的。在 MySQL中我們使用下面的方式:
mysql -u username -p database_name < file.sql
在服務(wù)器命令行上,運行 mysql 客戶端,并使用 username + password 進(jìn)行身份驗證,然后指定 database_name,使用 <,指明將sql文件導(dǎo)入該數(shù)據(jù)庫內(nèi)。
當(dāng)然了,file.sql 是我們虛擬的文件名,如果填寫絕對路徑,是非常可靠的。
如果要保留原始數(shù)據(jù)庫的 routines 和 triggers,就加上 -R 和 --triggers 選項。
如果導(dǎo)入的sql文件內(nèi),沒有 CREATE DATABASE 選項,你需要先手動創(chuàng)建數(shù)據(jù)庫,然后導(dǎo)入。這可能會是導(dǎo)出sql文件的時候,你勾選了“--no-create-db”/ "-n" 這個選項。
深入學(xué)習(xí)
備份數(shù)據(jù)庫,我們使用頻次最高的,還是 mysqldump 工具,這個幾乎是運維的標(biāo)配了。熟悉命令行操作的同學(xué),可以這樣導(dǎo)出數(shù)據(jù)庫:
mysqldump db_name > backup-file.sql
然后只需要按照上一節(jié)的方法,把 backup-file.sql 文件導(dǎo)入新的數(shù)據(jù)庫就可以了。
再說一個導(dǎo)入的上下文。就是假如你已經(jīng)進(jìn)入到 mysql 的 command line了,也手動創(chuàng)建了數(shù)據(jù)庫,這時導(dǎo)入操作是這樣的:
mysql> use db_name;
mysql> source backup-file.sql;
首先選定數(shù)據(jù)庫,然后使用source指定導(dǎo)入sql文件。
如果你擔(dān)心導(dǎo)入過程會出錯,或者出現(xiàn)數(shù)據(jù)不一致的情況,那就使用事務(wù)進(jìn)行控制:
mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
默認(rèn) MySQL 的 autocommit = true,是自動提交的。上面的方式,取消自動提交,改為手動整體提交。
寫在最后
通讀本文你可以掌握以下知識點,1)數(shù)據(jù)庫備份工具 mysqldump;2)bash環(huán)境,或命令行環(huán)境下,使用 < 重定向符導(dǎo)入sql文件到數(shù)據(jù)庫;3)手動控制導(dǎo)入sql的事務(wù)處理方式。
HAppy coding :-)
我是 @程序員小助手 ,持續(xù)分享編程知識,歡迎關(guān)注。