今天使用mysqldump命令備份數據的時候出現了一個問題。
一開始遷移 Discuz 7 論壇的 mysql 數據庫時,采用 mysqldump 命令的時候一切順利,但導入的時候卻遇到了
ERROR 1062 (xxxxx) at line 1262: Duplicate entry 'XXX' for key 'XXX‘ 錯誤,并停在原地。
對于遇到相同錯誤的朋友千萬別第一時間就嘗試用 –force 參數強行導入(除非你原來的數據庫已經崩潰)。因為這樣做的話,即使導入了,也會有一大片數據丟失!
這時候你可以嘗試以下2個方法:
一、mysqldump 備份的時候使用 --extended-insert=false 參數。
原理如下:
使用MySqldump命令導出數據時的注意
在使用Mysql做基礎數據庫時,由于需要將庫B的數據導入庫A,而A,B庫又包含大量相同的數據,需要使用mysqldump導出腳本.
通常的命令會是
| mysqldump -t 'dbName' > 'scriptName.sql'mysql -f 'dbName' < 'scriptName.sql' |
而使用如下命令導入到A庫時不會成功,現象是報出幾個Duplicate key error后就完畢了,并未將其余正確的數據插入到A庫中.
搗鼓了好一會,發現在使用mysqldump導出的腳本命令中,insert語句采用是multiline insert synax.而不是采用single insert synax.原來是這個問題. 多行的插入語法在第一個主健重復錯誤后就不執行后續的對應表的插入語句了.
于是再加參數 --extended-insert=false,完整的命令是
| mysqldump --extended-insert=false dbname > scriptname.sql |
二、手工把表中username里存在重復的值刪除
使用數據庫工具 Navicat 之類的,執行查詢:
| Select username,Count(*) From cdb_members Group By username Having Count(*) > 1 |
結果中就能顯示出表中存在重復的字段, 你會看到2個或者多個完全一模一樣重復的用戶名。刪除其中一行的記錄,保存后再導出數據庫。
這里需要特別注意:備份的時候,把表結構跟數據分開!
以下是 mysqldump 的一些使用參數
備份數據庫:
| #mysqldump 數據庫名 >數據庫備份名#mysqldump -A -u用戶名 -p密碼 數據庫名>數據庫備份名#mysqldump -d -A --add-drop-table -uroot -p >xxx.sql |
1.導出結構不導出數據
| mysqldump -d 數據庫名 -uroot -p > xxx.sql |
2.導出數據不導出結構
| mysqldump -t 數據庫名 -uroot -p > xxx.sql |
3.導出數據和表結構
| mysqldump 數據庫名 -uroot -p > xxx.sql |
4.導出特定表的結構
| mysqldump -uroot -p -B數據庫名 --table 表名 > xxx.sql#mysqldump [OPTIONS] database [tables] |
mysqldump支持下列選項:
新聞熱點
疑難解答