1. 程式人生 > 資料庫 >Mysql匯入匯出時遇到的問題解決

Mysql匯入匯出時遇到的問題解決

背景

自從把我手上的任務全部轉換成docker執行和管理之後,遇到了一系列的坑,這次是mysql備份的問題。

原因是啟動mysql映象的時候沒有指定-v,導致一段時間之後docker很大,原來的磁碟不夠了,需要遷移到新磁碟。

在使用匯入匯出的時候出現了一些問題,浪費了很多時間去解決。

解決過程

定位mysql映象過大

檢視容器佔用的空間

```docker system df```

檢視詳細資訊

Local Volumes space usage:
VOLUME 
NAME               LINKS SIZE
3e764b0633ea2c3f3dc5b0bf79dc753055d7c09451b477d3015650c66ea4a5fb 0 0B
598a592e1f9d90d2564c7c52f45f6f6a96784ad0426ec60682299fa1a1b93b96 0 0B
5eb12b3b0091810bbe3c94c5801ad2f2ff51d79b69b0ac01eb37cf00d37d89f6 0 0B
admin_logs               0 0B
f42e3ef90e4c7b3658a0fb4a877e90b298b12cb58cd63f38d9b4ad5c2ab41d73 0 0B
3361b9c615e09708170018dc7d170b8d4b498dd83cbcb155a3d41234d08e8119 1 9.3G

此時根據上面返回的資訊,只有兩個容器有VOLUMES,一個是mysql,還一個是redis,所以使用docker inspect container_id命令檢視具體容器具體的資訊,發現確實是9.3G的那個Volume。

CONTAINER ID  IMAGE  COMMAND   LOCAL VOLUMES  SIZE 
cb76bbc211e6  mysql  "docker-entrypoint.s…" 1    7B

備份mysql到新掛的盤

```docker exec -it mysql mysqldump -u使用者名稱 -p密碼 資料庫 > /mnt/vdb/data/mysql/test_db.sql```
使用者名稱、密碼和資料庫自己修改

匯入mysql

1. 為了保證之前的資料還在,所以另起一個mysql容器,並且使用-v對映到宿主機。

2. 然後執行:docker exec -i mysqld mysql -uroot -proot federation < /mnt/vdb/data/mysql/fed_db.sql

錯誤來了

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the
right syntax to use near 'mysqldump: [Warning] Using a password on the

command line interface can be insec' at line 1

我搜索了很多的資料,都沒有效果,於是決定使用圖形化工具直接備份,於是使用navicat,備份,在新的映象匯入,並且匯入成功。

  • 這個裡面的Rows,和我匯入之後的顯示的不一樣
  • 這個裡面的Rows,和我匯入之後的顯示的不一樣
  • 這個裡面的Rows,和我匯入之後的顯示的不一樣

  • WTF?總數1688,只顯示1480?
  • 進入到docker容器裡面,使用命令列查詢,確實是1688,確實是展示的Rows不對,So...

總結

使用docker時,要考慮好需不需要外掛卷,一般資料庫的最好都外掛,備份遷移都很方便

不要過分依賴資料庫的GUI,命令列才是最證實可靠的

實在不行,你狂加硬碟吧,反正都是在伺服器上,但是要確保,伺服器不會蹦,否則資料容易丟失。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。