[erledigt] mySQL auf Windows Server 2012, nach Stromausfall 100% CPU Last durch mySQL

Begonnen von Frank_Huber, 17 Oktober 2019, 20:38:25

Vorheriges Thema - Nächstes Thema

Frank_Huber

Hi,

Heute Mittag hatten wir Stromausfall.
Dannach kam der mySQL nicht mehr hoch.
Durch [mysqld]innodb_force_recovery = 4 in der my.ini war er wieder gestartet, hat aber 100% CPU Last. Dies auch über Stunden hinweg.
LogDB in fhem (unter Raspbian) meldet mir
DBD::mysql::st execute_array failed: Table 'history' is read only [err was 1036 now 2000000000]

Gibt es hier ein "best practice" um den mySQL wieder zum Leben zu erwecken?
ein "check" unter dem mySQL Admin hat ihn wieder crashen lassen.

zur Not habe ich ein Backup von ca 03:00 heute Nacht.

DS_Starter

Es gibt bestimmt verschiedene Wege.
Aber ich würde in dieser Situation den Restore wählen.

Zunächst LogDB auf asynchron setzen, falls noch nicht passiert und dann "reopen = 86400". Damit ist die DB für einen Tag weg vom FHEM, die Events laufen in der Zeit im Speicher auf (vorausgesetzt du hast genügend).

Dann den Restore durchführen. Kommt jetzt darauf an wie er erstellt wurde.
Wenn fertig -> set ... reopen.

Wenn alles sauber läuft werden die Events nachgefahren und alles ist wieder schick.

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Frank_Huber

Zitat von: DS_Starter am 17 Oktober 2019, 20:49:17
Es gibt bestimmt verschiedene Wege.
Aber ich würde in dieser Situation den Restore wählen.

Zunächst LogDB auf asynchron setzen, falls noch nicht passiert und dann "reopen = 86400". Damit ist die DB für einen Tag weg vom FHEM, die Events laufen in der Zeit im Speicher auf (vorausgesetzt du hast genügend).

Dann den Restore durchführen. Kommt jetzt darauf an wie er erstellt wurde.
Wenn fertig -> set ... reopen.

Wenn alles sauber läuft werden die Events nachgefahren und alles ist wieder schick.
danke Heiko,

async stehen alle Instanzen. den Reopen 86400 setzt ich gleich mal ab.

Die Backups mache ich aus FHEM heraus mit set logdb_DbRep dumpMySQL serverSide

Die DB ist ja jetzt readonly. Wie bekomme ich denn da das Backup am besten rein?
bekomm ich das auch im mySQL Admin unter Windows hin?
Habe selbst nichts gefunden um den readonly zu entfernen.

DS_Starter

Es ist ja "nur" die Tabelle history readonly. Sollte ein einfaches Restore


set logdb_DbRep restoreMySQL


funktionieren. Auswahl des Files über die Dropdown.

Bevor du restorest könntest du noch ein


mysql> REPAIR TABLE history;


auf Betriebssystemebene oder deinem SQL-Client probieren. REPAIR habe ich leider noch nicht im DbRep drin. -> nehme ich auf die ToDo.


Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Habe nochwas gefunden. Wenn nach dem REPAIR noch writeonly kommt, kannst auch noch die permissions der files checken


If you're still getting "read only" messages, check the file permissions in /var/lib/mysql/dbname/tbl_name (assuming your database is in /var/lib/mysql).

    # ls -alh /var/lib/mysql/dbname/
    total 209M
    drwx------   2 mysql mysql  16K Jul 20 10:42 .
    drwxr-xr-x 187 mysql mysql 4.0K Jul 11 12:22 ..
    -rw-r--r--   1 root  root 1.0K Jun 28 06:14 tbl_name.MYI
    -rw-r--r--   1 root  root 8.4K Jun 28 06:14 tbl_name.frm

The files should be owned by "mysql" with the group "mysql", if your MySQL is running as the mysql user. Stop the MySQL daemon, change the ownership and restart your MySQL.

    # /etc/init.d/mysqld stop
    Stopping MySQL:                                            [  OK  ]
    # chown mysql.mysql /var/lib/mysql/dbname/*
    # /etc/init.d/mysqld start
    Starting MySQL:                                            [  OK  ]


Ach Unsinn ... du bist doch auf Windows   :o
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Frank_Huber

"The storage engine for this table doesn't support repair"

"errortext DBD::mysql::st execute failed: Table 'history' is read only at ./FHEM/93_DbRep.pm line 7845"

muss erst den readonly raus bekommen. wo kann der denn versteckt sein?

ohne innodb_force_recovery = 4 fährt der mySQL auch gar nicht hoch.

DS_Starter

Geht denn ein


mysql -u root --password
use <deine DB>
mysql> DROP TABLE history;


Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Frank_Huber

Zitat von: DS_Starter am 17 Oktober 2019, 21:24:24
Geht denn ein


mysql -u root --password
use <deine DB>
mysql> DROP TABLE history;


nein. :(

mysql> use fhem;
Database changed
mysql> DROP TABLE history;
ERROR 1036 (HY000): Table 'tablespace_files' is read only
mysql>

bartman121

Das readonly ist drin, weil das recovery noch läuft.

Geh erstmal ins Bett und warte bis morgen, das recovery kann durchaus sehr lang dauern.

Wieviele Daten sind denn drin? (wie groß ist das dumpfile?)

DS_Starter

Eine Info würde mich noch interessieren. Was sagt denn ein:


set logdb_DbRep sqlCmd  SELECT @@global.read_only;


Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Frank_Huber

Zitat von: bartman121 am 17 Oktober 2019, 21:29:57
Das readonly ist drin, weil das recovery noch läuft.
Geh erstmal ins Bett und warte bis morgen, das recovery kann durchaus sehr lang dauern.
Wieviele Daten sind denn drin? (wie groß ist das dumpfile?)

das dumpfile hat 1,87GB. 

sehe ich das irgendwo dass der recovery läuft?
Alles was ich sehe ist die CPU Last.

DS_Starter

Zitatsehe ich das irgendwo dass der recovery läuft?

Möglicherweise im DbRep mit


get ... procinfo
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

bartman121

Zitat von: Frank_Huber am 17 Oktober 2019, 21:35:51
das dumpfile hat 1,87GB. 

sehe ich das irgendwo dass der recovery läuft?
Alles was ich sehe ist die CPU Last.

Die knapp 2GB werden sicher viele Stunden recovery verursachen.

Keine Ahnung ob man das recovery irgendwo sieht... Guck dich im mysql admin ein bissl um. Ich denke aber das Problem löst sich von selbst, wenn das recovery durch ist.

BTW... Du solltest dein logging einschränken, so viele Daten braucht man doch nicht wirklich.

Frank_Huber

Zitat von: DS_Starter am 17 Oktober 2019, 21:34:50
Eine Info würde mich noch interessieren. Was sagt denn ein:


set logdb_DbRep sqlCmd  SELECT @@global.read_only;

sqlCmd SELECT @@global.read_only 2019-10-17 21:38:28
sqlResultNumRows 1 2019-10-17 21:38:28

Wo sehe ich denn das Ergebnis?


mysql> SELECT @@global.read_only;
+--------------------+
| @@global.read_only |
+--------------------+
|                  0 |
+--------------------+
1 row in set (0.00 sec)

mysql>

Frank_Huber

Zitat von: DS_Starter am 17 Oktober 2019, 21:38:05
Möglicherweise im DbRep mit


get ... procinfo


ID   USER   HOST   DB   CMD   TIME_Sec   STATE   INFO   PROGRESS
4   event_scheduler   localhost      Daemon   356   Waiting on empty queue   

18   fhemuser   FHEM-PI-KG:54648   fhem   Sleep   73      
22   fhemuser   FHEM-PI-KG:54710   fhem   Query   0   starting   show full processlist