mysql將數(shù)據(jù)庫中所有表結(jié)構(gòu)和數(shù)據(jù)導(dǎo)入到另一個(gè)庫的方法(親測有效)
一、問題描述
- 在本地開發(fā)一個(gè)功能,需要結(jié)合具體數(shù)據(jù)測試代碼是否正確,但服務(wù)器上的數(shù)據(jù)不可隨便修改。此時(shí)則需要將服務(wù)器上某個(gè)數(shù)據(jù)庫的表批量導(dǎo)入到本地、而后進(jìn)行測試。
- 將數(shù)據(jù)庫db1中的所有表及數(shù)據(jù)(如table1、table2),批量導(dǎo)入到另一個(gè)數(shù)據(jù)庫db2中。
二、解決方案
剛開始自己一直嘗試用DataGrip、Navicat的sql/csv格式導(dǎo)入導(dǎo)出,總有錯(cuò)誤或者遺漏,比如報(bào)錯(cuò)中止、50張表卻只導(dǎo)入32張等,可能是操作方式有誤或者數(shù)據(jù)格式有問題。也試過用sql語句,但仍失敗。經(jīng)查閱資料、嘗試多次,終于成功,記錄如下。
1.使用mysqldump命令備份數(shù)據(jù)庫
首先使用mysqldump命令來備份源數(shù)據(jù)庫。mysqldump是MySQL自帶的命令行工具,可通過在cmd(windows)或 Linux終端(Linux)中執(zhí)行如下命令來備份整個(gè)數(shù)據(jù)庫:
mysqldump -u <username> -p <database_name> > backup.sql
其中,是數(shù)據(jù)庫的用戶名,<database_name>是要備份的數(shù)據(jù)庫的名稱,backup.sql是備份文件的名稱。執(zhí)行完該命令后,會在當(dāng)前目錄生成一個(gè)名為backup.sql的文件,該文件包含了源數(shù)據(jù)庫的所有表結(jié)構(gòu)和數(shù)據(jù)。其他的一些導(dǎo)出語句,可參考以下:
//導(dǎo)出完整數(shù)據(jù)庫結(jié)構(gòu)和數(shù)據(jù) mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 > 導(dǎo)出的文件名 //導(dǎo)出數(shù)據(jù)庫結(jié)構(gòu) mysqldump -u 用戶名 -p -d 數(shù)據(jù)庫名 > 導(dǎo)出的文件名 //導(dǎo)出一個(gè)表,包括表結(jié)構(gòu)和數(shù)據(jù) mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 表名> 導(dǎo)出的文件名 //導(dǎo)出一個(gè)表結(jié)構(gòu) mysqldump -u 用戶名 -p -d數(shù)據(jù)庫名 表名> 導(dǎo)出的文件名
注:建議使用mysqldump備份數(shù)據(jù)庫,能完整保留源數(shù)據(jù)庫的結(jié)構(gòu)和數(shù)據(jù)。DataGrip、Navicat的導(dǎo)入導(dǎo)出,由于兩個(gè)數(shù)據(jù)庫之間可能存在差異,數(shù)據(jù)結(jié)構(gòu)、格式會發(fā)生改變,導(dǎo)致復(fù)制失敗。
2.創(chuàng)建目標(biāo)數(shù)據(jù)庫
需要在目標(biāo)數(shù)據(jù)庫中創(chuàng)建對應(yīng)的數(shù)據(jù)庫,可以使用MySQL的命令行工具登錄到目標(biāo)數(shù)據(jù)庫,執(zhí)行以下命令來創(chuàng)建數(shù)據(jù)庫:
create database <database_name>;
其中,<database_name>是目標(biāo)數(shù)據(jù)庫的名稱。
3.導(dǎo)入數(shù)據(jù) 到目標(biāo)數(shù)據(jù)庫
有了源數(shù)據(jù)庫的備份文件和目標(biāo)數(shù)據(jù)庫,可以使用MySQL的命令行工具將備份的sql語句導(dǎo)入到目標(biāo)數(shù)據(jù)庫。進(jìn)入backup.sql所在目錄(如果是從服務(wù)器導(dǎo)入到本機(jī) 可將服務(wù)器上生成的backup.sql文件下載到本地),在目標(biāo)數(shù)據(jù)庫的終端執(zhí)行以下命令:
mysql -u <username> -p <database_name> < backup.sql
其中,是目標(biāo)數(shù)據(jù)庫的用戶名,<database_name>是目標(biāo)數(shù)據(jù)庫的名稱,backup.sql是源數(shù)據(jù)庫的備份文件。
執(zhí)行完該命令后,目標(biāo)數(shù)據(jù)庫將包含與源數(shù)據(jù)庫完全相同的所有表結(jié)構(gòu)和數(shù)據(jù)。
三、補(bǔ)充知識
3.1 mysqldump命令介紹
[root@localhost ~]# mysqldump -help Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] For more options, use mysqldump --help
登錄選項(xiàng)
1.登錄選項(xiàng): -u user:指定用戶 -h host:指定主機(jī) -p:表示要使用密碼 -E, --events: 備份事件調(diào)度器 -R, --routines: 備份存儲過程和存儲函數(shù) 2.備份選項(xiàng): --all-databases:備份所有數(shù)據(jù)庫 --databases db1 db2:備份指定的數(shù)據(jù)庫 --single-transaction:對事務(wù)引擎執(zhí)行熱備 --flush-logs:更新二進(jìn)制日志文件 --master-data=2 1:每備份一個(gè)庫就生成一個(gè)新的二進(jìn)制文件(默認(rèn)) 2:只生成一個(gè)新的二進(jìn)制文件 --quick:在備份大表時(shí)指定該選項(xiàng)
3.2 常用備份命令
//導(dǎo)出命令 #導(dǎo)出包括系統(tǒng)數(shù)據(jù)庫在內(nèi)的所有數(shù)據(jù)庫(all.sql默認(rèn)保存在bin文件夾下面) mysqldump -u username -p --all-databases > filename.sql #導(dǎo)出指定數(shù)據(jù)庫表結(jié)構(gòu)和數(shù)據(jù) mysqldump -u username -p dbname [tbname...] > filename.sql #導(dǎo)出多個(gè)數(shù)據(jù)庫: mysqldump -u username -p --databases db1 db2 ...> filename.sql #導(dǎo)出多張表: mysqldump -u username -p --databases db1 --tables t1 t2> filename.sql #只導(dǎo)出表結(jié)構(gòu)不導(dǎo)表數(shù)據(jù),添加“-d”命令參數(shù) mysqldump -u username -p -d dbname [tbname...] > filename.sql #只導(dǎo)出表數(shù)據(jù)不導(dǎo)表結(jié)構(gòu),添加“-t”命令參數(shù) mysqldump -u username -p -t dbname [tbname...] > d:/user.sql #只導(dǎo)出db1數(shù)據(jù)庫的表結(jié)構(gòu) 導(dǎo)出:mysqldump -u root -p --no-data --databases db1 > backup.sql 導(dǎo)入:mysql -u root -p db1 < backup.sql #系統(tǒng)行導(dǎo)入命令 mysql -u username -p dbname < d:XX.sql(路徑) mysql -u root -p db_name < d:/backup.sql #source導(dǎo)入 mysql> use db_name; mysql> source /backup/mysqldump/backup.sql(路徑)
參數(shù)說明:
- username:表示用戶名稱;
- dbname:表示需要備份的數(shù)據(jù)庫名稱;
- tbname:表示數(shù)據(jù)庫中需要備份的數(shù)據(jù)表,可以指定多個(gè)數(shù)據(jù)表。省略該參數(shù)時(shí),會備份整個(gè)數(shù)據(jù)庫;
- 右箭頭“>”:用來告訴 mysqldump 將備份數(shù)據(jù)表的定義和數(shù)據(jù)寫入備份文件;
- filename.sql:表示備份文件的名稱,文件名前面可以加絕對路徑。通常將數(shù)據(jù)庫備份成一個(gè)后綴名為.sql的文件。
注意:mysqldump 命令必須在 cmd 窗口下執(zhí)行,不能登錄到 MySQL 服務(wù)中執(zhí)行。
輸入密碼后,Mysql就會進(jìn)行備份了。
總結(jié)
到此這篇關(guān)于mysql將數(shù)據(jù)庫中所有表結(jié)構(gòu)和數(shù)據(jù)導(dǎo)入到另一個(gè)庫的方法的文章就介紹到這了,更多相關(guān)mysql所有表結(jié)構(gòu)數(shù)據(jù)導(dǎo)入另一個(gè)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL查詢數(shù)據(jù)庫所有表名以及表結(jié)構(gòu)其注釋(小白專用)
- MySQL數(shù)據(jù)庫線上修改表結(jié)構(gòu)的方法
- 利用Python批量導(dǎo)出mysql數(shù)據(jù)庫表結(jié)構(gòu)的操作實(shí)例
- mysql如何比對兩個(gè)數(shù)據(jù)庫表結(jié)構(gòu)的方法
- MYSQL數(shù)據(jù)庫表結(jié)構(gòu)優(yōu)化方法詳解
- 詳解 linux mysqldump 導(dǎo)出數(shù)據(jù)庫、數(shù)據(jù)、表結(jié)構(gòu)
- mysql如何將數(shù)據(jù)庫中的所有表結(jié)構(gòu)和數(shù)據(jù)導(dǎo)入到另一個(gè)庫
相關(guān)文章
mysql 數(shù)據(jù)庫中my.ini的優(yōu)化 2G內(nèi)存針對站多 抗壓型的設(shè)置
mysql數(shù)據(jù)庫中my.ini的優(yōu)化,2G內(nèi)存,針對站多,抗壓型的設(shè)置.大家可以借鑒下。2009-08-08mysql server 5.7.20 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql server 5.7.20 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09Mysql備份多個(gè)數(shù)據(jù)庫代碼實(shí)例
這篇文章主要介紹了Mysql備份多個(gè)數(shù)據(jù)庫代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12MySQL實(shí)現(xiàn)自動化部署腳本的詳細(xì)教程
在當(dāng)前的DevOps環(huán)境中,自動化部署已成為提升運(yùn)維效率的核心手段,本教程將手把手教你編寫一個(gè)智能化的MySQL部署腳本,感興趣的小伙伴跟著小編一起來看看吧2025-03-03