1. 程式人生 > 資料庫 >解決docker重啟redis,mysql資料丟失的問題

解決docker重啟redis,mysql資料丟失的問題

官方文件:

解決docker重啟redis,mysql資料丟失的問題

所以 mysql應如下啟動:

docker run -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD=密碼 -v /windows碟符/指定的資料夾路徑:/var/lib/mysql mysql:5.7

redis:

docker run -p 6379:6379 -d -v /windows碟符/指定的資料夾路徑:/data redis:5.0 redis-server --appendonly yes

多看官方文件,裡面有詳細的說明

補充知識:docker 掛載進容器的檔案修改後沒有改變需要重啟

今天發現一個很奇怪的現象,就是我在宿主機上的檔案掛載進docker後,主機上刪除了檔案,並且重新上傳重新命名為相同名字的檔案,容器中的沒有同步.

先來說下Linux,Linux儲存是分為iNode和block的,iNode儲存的是檔案的屬行資訊,例如大小,在磁碟的什麼位置,block是4k大小的一個塊,儲存的是檔案的實際資訊,不足4k大小的檔案也會佔用掉4k的空間.

瞭解了上面,再來說docker,掛載進docker的檔案,實際上是docker記住了一個iNode,他可以通過這個iNode找到block,也就是實際的檔案資訊.如果是用 > 追加重定向寫入檔案,是可以同步到docker的,但是如果是rm 重新命名的,檔案的iNode就改變了,但是docker中的iNode還是指向了之前的磁碟位置,所以檔案沒有改變.

rm 原理:rm只是刪除了iNode,沒有了iNode通過正常方式,找不到磁碟上的block,看起來就是刪除了,但是檔案資訊還在,檔案資訊會在下次寫入到這裡的時候覆蓋掉,所以資料被刪除還有恢復的方法,但是,如果刪除的時候檔案是開啟的,檔案也不會被刪除

同樣的還有vim,vim 檔案的時候,是基於現有的檔案copy了一份,同級目錄下會有一個 .開頭swp結尾的檔案,當你儲存退出的時候,vim 會刪掉原始檔,將這個檔案重新命名為原始檔的名字,iNode自然也就改變了.

以上這篇解決docker重啟redis,mysql資料丟失的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。