记一次mysql故障处理过程

    技术2024-01-03  97

    背景

    同事一个项目数据库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
    Processed: 0.018, SQL: 9