記一次mysql故障處理過程

背景

同事一個項目數據庫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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章