背景
同事一個項目數據庫mysql跑在docker容器裏,一日前臺報錯,查詢後發現mysql掛掉,他自己嘗試重啓docker start mysql
,但是多次嘗試並沒有啓動成功,同事在沒有任何備份的情況下采用了,重裝鏡像的方法docker rm mysql
把mysql的容器刪掉,然後啓動mysql容器,這次可是起來了,但是之前mysql的數據全部不在了。
解決
1. 查找之前mysql的 docker volume ls
local 0487ad80915eecf7c359ffb41252eee21a143c72659499aeb4c38c02fc8b11b8
local 15ad72288f508459aeef97055cee2c434ed0bc3e96996153af69a1a3d5fdad5c
local 16ff913b883171684432e9262928b554bd29a71b4e55305f468db024730d1027
local 22f450440bf32618caa98abac1bb88264e876af442323ab60c655a251de0a552
local 25ed0130b04cdf6d52cfd065bf3b6a205e9585e7c4e7554c51ba63cecfabfd41
local 3f95d8b53af73d107ee28108a161d9852c5ef46d30c3eb5dd32ff7e73e7d3e33
local 43e64eb9148cc56acf0ab031c54ba8db9ef16541483a09f33e55c6f56c370c2e
local 453f66b593f5d0edc4c7f84bec3b0f69d3d3a01c4d23d406be1c5fd8352bc547
local 66fdffd9a6ebdcf71861bb73d3d6e80f454f371a1c995cd33f583a31c7cb9c71
local 789433e2a933e6d7e16da176b09ced439682cb3e315e2b751b02cc8237637860
local 7ef5d002450ff2bf2743e03ee89c6ef5dc7d372aa9980fe5a9f3c72365c70fa0
local 908138a280e4ae0563a3cf5310aec15884a167013f199d121abc4d1dffaa2ed0
local 972d2c05e53c0d212e514ffaace7fe4a87957242d512088feb46bfd46abc40ea
local a06b5c6486f686916dd4e039678e75093fdf72592c57842992c8493bae03ec32
local c6d356a923acad9b7b6c728f3a2ef24da0812f7a438f2e90571e7b6bd41cbcde
local cc0400f89957c591b1f74b94a3a9b424a32267557e6bacf818f171cd40c0d22a
local cd0f2de757da9c7a8b2377456cfb6b4e4c12c511756abe5d8dbb0e9a68916f98
local cd5a5747e9fab0cc9112f8e321319c70bdf7d284ef884777733cfe73c8dca52e
local d4c6ed2e2d763966dcf28db8edb1bd4952e6c5e016dec10eadea86d5fd33abf8
2.查找volume路徑 docker inspect c6d356a923acad9b7b6c728f3a2ef24da0812f7a438f2e90571e7b6bd41cbcde
[
{
"CreatedAt": "2020-06-11T10:28:23+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/c6d356a923acad9b7b6c728f3a2ef24da0812f7a438f2e90571e7b6bd41cbcde/_data",
"Name": "c6d356a923acad9b7b6c728f3a2ef24da0812f7a438f2e90571e7b6bd41cbcde",
"Options": {},
"Scope": "local"
}
]
3.去Mountpoint路徑查找,由於太多volume只能逐個進入查看是不是之前的mysql volume
cd /var/lib/docker/volumes/cd0f2de757da9c7a8b2377456cfb6b4e4c12c511756abe5d8dbb0e9a68916f98/_data
ls //查看這個數據卷很像我們需要的
auto.cnf binlog.000005 binlog.000007 blog ca.pem client-key.pem ibdata1 ib_logfile1 #innodb_temp mysql.ibd private_key.pem server-cert.pem sys undo_002
binlog.000004 binlog.000006 binlog.index ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 ibtmp1 mysql performance_schema public_key.pem server-key.pem undo_001
4.新建一個volume docker volume create yylmysqldata
5.docker inspect yylmysqldata
[
{
"CreatedAt": "2020-06-15T10:31:01+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/yylmysqldata/_data",
"Name": "yylmysqldata",
"Options": {},
"Scope": "local"
}
]
6重新啓動一個mysql
docker run -d -p 3306:3306 -v yylmysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name yylmysql mysql
7.cd /var/lib/docker/volumes/yylmysqldata/ 進入新mysql的volume 刪除 rm -rf _data/*
8.把之前的volume拷貝過來 cp -r /var/lib/docker/volumes/cd0f2de757da9c7a8b2377456cfb6b4e4c12c511756abe5d8dbb0e9a68916f98/_data ./
9.重啓mysql
docker stop yylmysql
docker start yylmysql