Premiär! Fyndchans i SweClockers Månadens Drop
Permalänk
Medlem

MySql uppdatera databasen

Har bekymmer med att uppdatera en databas, loggar elmätaren på stugan med hjälp av en raspberry pi och varje timma så kopplar den upp sig med hjälp av ett 3G modem för att kör mysqldump på hela databasen sen skickas filen till mitt webbhotell där jag uppdaterar mysqldatabasen för att kunna generar en graf över elförbrukningen.

Nu funderar jag på hur jag ska gå till väga för att inte skicka hela databasen utan kanske bara de senaste 100 posterna som är sparade. (har bara 0,25GB att leka med)
Försökte med
mysqldump -uxx -pxx --where "1=1 ORDER BY Id DESC LIMIT 100" Databas Tebell | gzip -9 > /var/www/senaste 100.sql.gz

men när jag skulle inportera detta till webhotellets mysqldatabase så försvann alla data och kvar blev bara de senaste 100 posterna.

Hur gör jag för att låta webhotellets databas bara bli uppdaterad med de senaste 100 posterna ?

/Fidde

Permalänk
Hedersmedlem

Hur gjorde du importen? Du ska undvika att göra saker som troligen benämns som "TRUNCATE", då det är ett "kodord" för att rensa hela tabellinnehållet. Ibland vill man göra detta för att undvika dubblettrader (t ex som när du tidigare importerade en full kopia av tabellen varje gång), men det blir tråkigt om man gör inkrementella uppdateringar.

Det kan bli lite bekymmersamt att ta de sista 100 posterna rakt av. Det känns som att du riskerar att få dubblettposter, om du inte råkar hinna med exakt 100 mätvärden mellan varje överföring. Bättre vore kanske att ta de värden som har `Id` större än den senast inlagda raden på ditt webbhotell; antingen kan du spara detta värde varje gång du för över/importerar en fil, eller så kan du (troligen mer robust) plocka det direkt ur databasen på webbhotellssidan när det är dags att extrahera data från din Raspberry Pi.

Ett annat alternativ vore att skriva data direkt till webbhotellets databas kontinuerligt (det lär inte bli speciellt många kB), men det är möjligt att anslutningen är för instabil för detta.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Kan du inte skapa ett mysql konto till webhotellets för din RPI och lägga in direkt? Istället för att köra mysqldump kan du ju annars bara skapa en insert query som sätter in de senaste?

Du skulle kunna ge lite mer information om hur din databas ser ut och hur du loggar värdena. Är lite intresserad, vad är det för typ av elmätare?

Permalänk
Medlem

Tack för svaren, de sätte fart på knoppen och kom på att det går ju att ta reda på den sista raden i de båda tabellerna och på så vis bara dumpa ut den data som saknas i webhotellets databas, fundera på att döpa om tabellen på webhotellet för att inte rensa den befintliga tabellen utan få en "ny" tabell, då kan jag kanske använda mig av join och ta bort de rader som blir dubbletter.... anledningen till att dumpa det i en fil är för att få en liten backup om nått skulle skita sig, samt att slippa hålla igång modemet hela tiden.

Prylarna jag använder kommer från m.nu
DS9490R usb
samt en räknare DS9493P och ett litet öga.

Databasens mysql tabell innehåller följande
Id, Datum, Matare, Forbrukat

Elmätaren är en Landis +Gyr Domestic och visa 1000 impulser per kWh så bara till och ta minutvärdet * 60 för att få fram momentan förbrukning.

Permalänk
Medlem

Kanske har missat något, men det låter som det är smidigare att logga alla värden i en csv-fil som du sedan skickar och läser in på webbhotellet, sen raderar du filen. Då slipper du filtrera ut datan och filen blir minimal.

Visa signatur

MacBook Pro 14" | M1 Pro 10/16-Core | 32GB | 1TB
Legion Pro 16" | Ryzen 7 5800H | 16 GB | 1TB | GeForce RTX 3060