cancer's blog

It's a star sign, not disease ;)

Witajcie po krótkiej przerwie. Chciałem opisać moją delegację przez większość północnej Polski, jednak po powrocie okazało się, że przywitał mnie padnięty mysql, a że przy okazji dało się go w miarę szybko naprawić to będzie to znakomity tutorial :)

Mam system helpdeskowy o nazwie bugzero. To trochę pokręcony konfig ponieważ jest napisany w javie, wymaga tomcata i javy, java na NetBSD działa w emulacji linuxowej, a wszystko przechowywane jest w bazie. Tak czy owak powyższy konfig działa bardzo stabilnie, a od czasu update’u do 4.0 nie miałem z nim problemu przez prawie 140 dni :)

11:15AM up 139 days, 13:05, 2 users, load averages: 0.07, 0.39, 0.70

Dzisiaj jednak strona do logowania się wyświetliła i po kliknięciu przycisku do zalogowania nic się nie stało a przeglądarka cały czas łączyła się. Trwało to dość długo więc zacząłem szukać przyczyny.

Nauczony za czasów 3.0, że tomcat lubił się powiesić zrestartowałem go, nie pomogło to, a właściwie pogorszyło sparwę bo juz nie można nawet było wyświetlić okienka logowania. Jako drugi do sprawdzenia mysql. Stopował się ze dwie minuty ale w końcu mu się udało bez ingerencji kill :) Przy próbie wystartowania dostałem komunikat:

/var: write failed, file system is full

Aha, jest winowajca. Faktycznie /var ponad pełny 102% :) Zrobiłem trochę miejsca (głownie logi mysqla i snorta) i wystartowałem mysql jeszcze raz, tym razem poszło gładko. Próba logowania się do bugzero jednak zakończyła się komunikatem „Load issues/bugs from the database failed”.

No to pięknie baza się rozjechała. Na szczęście mysql ma narzędzia aby to naprawić. Usterka okzała się na tyle mała, że obyło się bez żmudnego wpisywania do bazy czegokolwiek.

Po pierwsze należy sprawdzić w których tabelach jest błąd. Najprościej zrobić to narzędziem mysqlcheck

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mysqlcheck -uroot -p bugzero

bugzero.PrimaHelpdesk2007_entry
warning  : Table is marked as crashed
warning  : 8 clients are using or haven't closed the table properly
error    : Size of indexfile is: 69632        Should be: 70656
error    : Corrupt
bugzero.PrimaHelpdesk2007_file
warning  : 2 clients are using or haven't closed the table properly
status   : OK
bugzero.PrimaHelpdesk2007_filter
warning  : 2 clients are using or haven't closed the table properly
status   : OK
bugzero.PrimaHelpdesk2007_query
warning  : 2 clients are using or haven't closed the table properly
status   : OK
bugzero.PrimaHelpdesk2007_trail
warning  : 8 clients are using or haven't closed the table properly
status   : OK
bugzero.PrimaHelpdesk2007_trigger                  OK
bugzero.SEQUENCE
warning  : 7 clients are using or haven't closed the table properly
status   : OK

Ok, mamy jedna tabele uszkodzoną i kilka innych z warningami. Wchodzimy do mysql i naprawiamy tabele:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
mysql -uroot -p bugzero

mysql> repair table PrimaHelpdesk2007_entry
    -> ;
+---------------------------------+--------+----------+----------+
| Table                           | Op     | Msg_type | Msg_text |
+---------------------------------+--------+----------+----------+
| bugzero.PrimaHelpdesk2007_entry | repair | status   | OK       |
+---------------------------------+--------+----------+----------+
1 row in set (1.10 sec)

mysql> repair table PrimaHelpdesk2007_file;
+--------------------------------+--------+----------+----------+
| Table                          | Op     | Msg_type | Msg_text |
+--------------------------------+--------+----------+----------+
| bugzero.PrimaHelpdesk2007_file | repair | status   | OK       |
+--------------------------------+--------+----------+----------+
1 row in set (0.68 sec)

mysql> repair table PrimaHelpdesk2007_filter;
+----------------------------------+--------+----------+----------+
| Table                            | Op     | Msg_type | Msg_text |
+----------------------------------+--------+----------+----------+
| bugzero.PrimaHelpdesk2007_filter | repair | status   | OK       |
+----------------------------------+--------+----------+----------+
1 row in set (0.04 sec)

mysql> repair table PrimaHelpdesk2007_query;
+---------------------------------+--------+----------+----------+
| Table                           | Op     | Msg_type | Msg_text |
+---------------------------------+--------+----------+----------+
| bugzero.PrimaHelpdesk2007_query | repair | status   | OK       |
+---------------------------------+--------+----------+----------+
1 row in set (0.14 sec)

mysql> repair table PrimaHelpdesk2007_trail;
+---------------------------------+--------+----------+----------+
| Table                           | Op     | Msg_type | Msg_text |
+---------------------------------+--------+----------+----------+
| bugzero.PrimaHelpdesk2007_trail | repair | status   | OK       |
+---------------------------------+--------+----------+----------+
1 row in set (1.88 sec)

mysql> repair table PrimaHelpdesk2007_trigger;
+-----------------------------------+--------+----------+----------+
| Table                             | Op     | Msg_type | Msg_text |
+-----------------------------------+--------+----------+----------+
| bugzero.PrimaHelpdesk2007_trigger | repair | status   | OK       |
+-----------------------------------+--------+----------+----------+
1 row in set (0.07 sec)

Jak widać poszło sprawnie i szybko (czego niestety nie można powiedzieć o bazie snorta :/

Po powyższej operacji jeszcze raz sprawdzamy strukturę tabel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysqlcheck -uroot -p bugzero

bugzero.PrimaHelpdesk2007_entry                    OK
bugzero.PrimaHelpdesk2007_file                     OK
bugzero.PrimaHelpdesk2007_filter                   OK
bugzero.PrimaHelpdesk2007_query                    OK
bugzero.PrimaHelpdesk2007_trail                    OK
bugzero.PrimaHelpdesk2007_trigger                  OK
bugzero.SEQUENCE                                   OK
bugzero.accesscode                                 OK
bugzero.assignment                                 OK
bugzero.fieldname                                  OK
bugzero.fieldset                                   OK
bugzero.groupcode                                  OK
bugzero.mailbox                                    OK
bugzero.person                                     OK
bugzero.project                                    OK
bugzero.reminder                                   OK
bugzero.workflow                                   OK

Tym razem próba logowania zakończyła się pełnym sukcesem :)

Dla porównania naprawa bazy snorta:

1
2
3
4
5
6
7
mysql> repair table snort.data;
+------------+--------+----------+----------+
| Table      | Op     | Msg_type | Msg_text |
+------------+--------+----------+----------+
| snort.data | repair | status   | OK       |
+------------+--------+----------+----------+
1 row in set (5 min 24.55 sec)

trochę dłużej :)




VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.17_1161]
Rating: 0 (from 0 votes)
pixel MySQL crash

Popularity: 4% [?]

© odwiedź stronę http://maciejewski.org po więcej fajnych postów!

Brak podobnych postów

  1. No comments so far. Share your thoughts!

Leave a Response

CommentLuv badge

  • RSS
  • Blip
  • Twitter
  • Facebook
  • GoldenLine
  • LinkedIn
  • Flickr