사실 데이터베이스 오류가 발생할 즈음에, 전기요금이 너무 많이 나온다 싶어서. 일부러 꺼두었긴 했습니다. 어느새 2022년도 여름이 가고, 아이들 여름방학도 끝나갈 시점이 되니 밤공기도 나름 시원 혹은 살짝 옷차림에 비해서 쌀쌀한 느낌이 들기 시작하네요. 그래서 복구했습니다. 잠시 방치해둔채였기에 여전히 워드프레스 가동시 데이터 베이스 오류가 발생하고 있어서 여기저기 찾아보면서 다시금 복구 하는 방법들을 조사하고 실행해 봤는데. 가장 갈끔한건 아래 절차인것 같네요.
- 백업. 일단 백업부터, mysqldump -u ~ -p –all-databases > alldb.sql
이러면 mysql DB까지 몽땅 백업이 됩니다. 보통 mysql까지 터져버리는 일은 없을텐데.. 엉망진창 뭔지 모르겠다 싶으면 이것도 도움이 되는 것 같습니다. 그리고 제 경우는 실제로 이 정도가 필요했던 듯 합니다. 혹시 모르니 생성된 백업용 sql을 또 다른 곳에 바로 백업을 해두세요. 시스템을 포맷하고 재설치하더라도 데이터는 살려야죠. - /etc/mysql/my.cnf 에 mysql을 복구 모드로 설정하고 껐다가, 재부팅(service mysql start)
[mysqld]
innodb_force_recovery = 4
보통 정상 0 에서부터 1~6까지 복구단계가 있다고 하는데, 4정도면 거의 초기화에 준하는 것 같습니다. 따라서 백업해두지 않았다면 절대 하면 안되겠고요. 1번에서 백업이 잘 되었다면(믿어야합니다.) 다시 시작할 준비가 되었다고 보면 되겠습니다.
아니면 단계 1로 해놓고 자동으로 잘 복구가 되기를 바래보는 것도 좋겠습니다. 근데 전 안되었어요. T.T - 재시동 전에 DB오염 방지를 위해서, 아파치는 꺼둡시다. service stop apache2. 이제 service mysql restart하여 다시 켜면 되는데 제 경우, 여기저기 문제가 나옵니다.
- DB복구 시도(mysql -u ~ -p < alldb.sql).. 뭔가 에러가 나면, 에러 나는 줄을 찾아서 sql파일을 수정해야할 수 있음.
제경우 sql에서 column중복이 떠서, 수동으로 일부 내용을 수정했습니다.
그래도 안될 경우, 다시 2번 상태에서 아래의 파일들을 깔끔하게 지워줍니다. 주로 tablespace에 이미 지정되어 있다는거라고 나오는 경우라서, 원래 2번다계에서 지워주는게 더 좋긴한데.. 저만 당할 수 없기에 –;;;
rm /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1
위 첫번째 파일이 DB본체라 저거 날아가면 다 날아가는겁니다. 오로지 백업을 믿고 하는거고요. ib_logfile? 요건 복구에서 사용되기도 하고, 지워서 복구하는 경우도 있기도 한 글들이 있는데. 이미 전 뭘해도 안되었던터라.. 깔끔하게 싹~
그리고 복구중에 tablesapce뭐라뭐라하면 더 지울게
rm /var/lib/mysql/mysql/table* 등등의 파일까지 손댈 수가 있습니다.
DB로 들어가서 직접 command로 뭔가 조작하고 청소하면 좋아보이겠지만… 이미 망했어요. 백업 덤프만이 살길입니다… - 비슷한 사례가 아래분의 절차와 비슷해보이네요. 아래분은 mysql까지 털지는 않으시고, zabbix DB만청소하신듯합니다. 제경우에는 wordpress DB가 있겠고요.
https://parkbrother.tistory.com/entry/MySQL-ibdata1-%EC%9A%A9%EB%9F%89-%ED%81%B4%EB%A6%AC%EC%96%B4-%EC%9E%91%EC%97%85-with-Zabbix