Adatbázis: SQL, XML DB

MySQL differenciális backup / dump

Sziasztok!

Van egy (szerintem) nagyon jó feladatom számotokra. Adott 7 szerver, teljesen más-más adatbázisokkal. Valahol csak 2 DB van, van ahol 22. Van amelyik 10 MB, van ami 3 GB. Ki lett találva, hogy időspórolás és HW erőforrások megfelelő elosztása érdekében legyenek csak havonta teljes backup-ok, naponta viszont legyen differenciális backup. Na, én meg rábólintottam, hogy ez jó ötlet... csak épp nem tudtam, hogy a MySQL alapból nem tud ilyet és csak mókolt szkripteket találtam a Google segítségével.
A backup úgy készül jelenleg, hogy van egy Backup szerver aki X időközönként be SSH-zik a kliensekre, csinál egy SQL dumpot kompletten, csinál egy tar-gz fájlt a /var/www-ről majd ezt a 2 fájlt az rsnapshot szépen átmásolja a szerverre a megfelelő helyre. Ez addig szépen és jól ment míg el nem értük a gigás méreteket. :)

Kérdés: Ti hogyan csinálnátok minden adatbázisról különbözeti mentéseket? És, ha lehet nem növekvőt, hanem különbözetit. Szerintem az biztonságosabb, de cáfoljatok meg kérlek, ha nem. :)

A rendszerek amúgy CentOS 6-7 alapúak.

mysql replikálás nem a beépített SQL Thread-del

Szerintetek mennyire veszteséges egy mysql replikációt nem a mysqld saját beépített módján "etetni", hanem `mysqlbinlog relaylog.000001` -szerű parancsok kimenetét közvetlenül beletolni?

Az IO Thread mehet nyugodtan, az lehúzza a binlogokat,
viszont (mysqld verzió különbség miatt) az SQL Thread hibára szokott futni, ezért egysmás statement-et át kéne írni amit a SLAVE végrehajt.

Így arra gondoltam, hogy programatikusan átiratom a problémás részeket az olvasható binlog kimenetben és azt futtattatom le a SLAVE-vel.

Kérdés, hogy a bináris loghoz viszonyítva minden információ benne van-e a mysqlbinlog paranccsal visszakapott SQL szkriptben, vagy veszteséges; és az hogy alkalmazható-e ilyen formában:


mysqlbinlog relaylog.000001 | my_convert_script | mysql -h localhost

Ignorált adatbázis, tálba nincs, de több adatbázist is tartalmaz a binlog, és mixed formátumú (igaz, az átírkálásokat a statement formátumú részekben kell elvégezni).

Gyakorlati megvalósításképpen gondoltam arra is, hogy 1. minden binlog utasítást a fenti formában kapna, vagy 2. ha a SHOW SLAVE STATUS hibát jelez, az adott pozícióban lévő részt szedném csak ki a mysqlbinlog paranccsal és konvertálnám át és futtatnám le, utána a pozíció (és esetlegesen a relaylog fájl) léptetésével újra elindítanám a SLAVE-et.

update
nagyszerűen gyakorlatias és probléma-orientált a HUP közössége, segítőkészek vagytok a rendszerek rendszergazdabaráttá tételében, és a problémákat okozó folyamatok leghamarabbi ponton történő javításában.
ugyanakkor jelen kérdésemmel (és a legtöbb kérdésemmel, amit nem úgy kezdek, hogy "mit csináljak másképp") csupán a mysql és különböző verziói működésére vagyok kiváncsi egy olyan elméleti szituációban, amikor a replikáció SQL Threadjét kéne emulálni mysqlbinlog parancs kimenetének végrehajtásával.

PgSQL copy from csv (invalid input syntax)

Üdv!

Egy PgSQL táblába (pgsql-9.4, win7 x64) szeretnék importálni csv formában adatokat, de hibát ad.
A data.csv:

1;258;2
2;258;2
3;258;2
4;258;1
// ...stb

A pgadmin-ban:
copy data from 'd:/data.csv' with delimiter ';' csv;

A hiba:
ERROR: invalid input syntax for integer: "1"
SQL state: 22P02
Context: COPY data, line 1, column prodid: "1"

A 'data' tábla:
prodid integer NOT NULL,
pid integer NOT NULL,
qty double precision NOT NULL,

Valami olyasmit olvastam a neten, hogy a fájl elején "BOM" miatt lehet a probléma. Másoljam át egy editorral az adatokat, mentsem el egy új fájlba. De nem segített.

Van ötlete valakinek, hogy mi lehet a PgSQL gondja pontosan?

joomla: "Invalid Parent ID" cikk mentésekor

Sziasztok.

Most egy félig megoldott probléma után teszem fel a kérdést.

Adott localhoston egy joomla3.x.x, amire szerveroldalról lementett sql-ből toltam rá content-et kategóriákkal együtt. (az eredeti táblákat töröltem)

Látszólag minden rendben volt, adminoldalon bejöttek a cikkek, csakhogy mentéskor a tárgy szóban megadott szottyot írta ki:
Invalid Parent ID

Kicsit kutatva kiderült, hogy minden menüt és kategóriát az ún. "Újraépítés" gombbal újra kell építenem, majd ez nem elég, a menükezelőnél is meg kell mindezt ismételni. ( http://www.joomla-tips.org/joomla-troubleshooter/save-failed-with-the-f… )
Ekkor megkíséreltem egy cikk módosítás utáni mentését: nem ment, illetve mentés megvolt, de a degenerált hibaüzenet ott díszelgett még mindig.
Kiderült, hogy a kategóriák mindegyikét menteni kellett, külön-külön megnyitogatva őketparenttől a sublategoriákig.
Ezután már ment a cikkek mentése.

1. kérdés: Mi zajlott közben a háttérben? Valaminek az újraindexelése?

2. kérdés: ha cikkeken belül kereszthivatkozásaim vannak egy másik cikkre (ugyanazon weboldalon belül), az ID-k miért nem oda mutatnak ahova mutatnak? Minden egyes cikknél újra kell írnom ezeket a linkeket kézzel?

--------
Nos, kicsit érdekes a kérdés is, de nagyjából látszik mennyire nem értek hozzá. Eddig segítséget ebben a témában csak innen szereztem, így előre is kösz a javaslatokat

[SQL] Lehet ezt egyszerűbben?

Van egy MySQL adatbázisom, benne 2 tábla: transactions, parties. Utóbbin idegen kulcs az elsőre. Pénzügyi tranzakciók. A frontend listázni akarja a tranzakciókat egyik fél (party) szempontjából: max 50 sor/lap, egyenleg oszlop, az összes választható lapot mutatni kell, index a befoglaló dátum. Erre 2 select van: egyik a lapokat, másik az aktuális lap sorait listázza.Lapok listázása:


SELECT date_start, date_end, (@balance := @balance + sum_amount) - sum_amount AS start_balance
FROM (
  SELECT MAX(date) AS date_start, MIN(date) AS date_end, SUM(amount) AS sum_amount
  FROM (
    SELECT transactions.t_date AS date
    FROM transactions
    INNER JOIN parties ON parties.transaction_id = transactions.id
    WHERE parties.account_id = 12345
    ORDER BY transactions.t_date ASC, transactions.id ASC
  ) AS all_transactions
  JOIN (SELECT @rn := 0) i
  GROUP BY FLOOR(@rn := @rn + 1 / 51)
  ORDER BY date ASC;
) AS pages
JOIN (SELECT @balance := 0) i

Aktuális lap listázása:


SELECT transactions.*
FROM transactions
INNER JOIN `parties` ON `parties`.`transaction_id` = `transactions`.`id`
WHERE parties.account_id = 12345
ORDER BY transactions.t_date ASC, transactions.id ASC
LIMIT 50 OFFSET 50

Az aktuális lap kezdőegyenlege az első lekérdezésből származó start_balance lesz, a soronkénti számítást onnan már a frontend intézi.

Most azon kattogok, hogy nem-e lehetne egyszerűbben, kevesebb subselect használatával listázni a lapokat.
SQL guruk..?

(A t_date egy DATE oszlop, nyilván nem unique.)

PROGRESS database SQL92, java

Sziasztok, megörököltem egy Progress adatbázist használó ERP rendszert. Maga a program jól működik, de csak a 4GL rész van beállítva, az SQL92 kompatibilis mód nem elérhető. (Az installed komponensek között szerepel, de java gondjai vannak) Próbáltam utánajárni a szükséges lépéseknek(google, progress fórum), de ennek ellenére nem sikerült beállítani.
Az os SUSE 11.3, az adatbázis PROGRESS 9C.
Van esetleg valakinek ezzel kapcsolatban ismerete, tapasztalata?
A többit privátban, köszönöm előre is a segítségeteket!

UPDATE #1
A java telepítése megoldódott, a kérdés még mindig ugyanaz, van valaki itt a fórumozók között, akinek van ismerete, tapasztalata a PROGRESS adatbázissal kapcsolatban? Főleg az SQL92 része érdekelne...

könyvtári adatbázis

Sziasztok!

Egy könyvtári adatbázist szeretnék létrehozni minél egyszerűbb módon.
A következő struktúrára gondoltam. Van egy gyerek amihez tartozik egy osztály és azok a könyvek amik nála vannak.
Van erre több program, de nem tudom melyik lenne a legjobb, accesben nem szeretném megcsinálni.
Később jó lenne ha bővíthető lehetne.
Nem tudtok valami könnyen kezelhető programot amiben lehet ilyet létrehozni?

Előre is köszi a választ!

[megoldva] mysql import

Üdv!

Van egy mentésem 5 adatbázis tábláról egy sql fájlba.
De nincs benne create sor.
Hogy tudnám importálni?

a mysql -u*** -p*** < adatbazisok.sql ugye nem fut le, mert nincs create.

Hogy tudnám szétszedni vagy beimportálni?

köszi

pch

[megoldva] Oracle 11 deadlock: ORA-02049: timeout: distributed transaction waiting for lock

Oracle 11 deadlock: ORA-02049: timeout: distributed transaction waiting for lock

Eleg surgos segitseg kellene. Sajnos elment szabadsagra a dba es nem adott at semmit nekunk. Annyit ertek sql-hez, hogy elfelejtett jelszo reset, uj db letrehozas, user letrehozas es kb ennyi, linuxos vagyok :( Ezt holnap meg kellene oldanom :(
oracle userkent be tudok jelentkezni linux rendszeren, tehat sql prompt van. Innentol kellene help :(

14:38:51,030 ERROR [xx.busyness.confirm]|10.14.4.24| (ajp-/0.0.0.0:8009-24) Error getting record for update with case reference 3361: java.sql.SQLSyntaxErrorException: ORA-02049: timeout: distributed transaction waiting for lock
14:38:51,050 ERROR [ie.originalsolutions.caseflow.acas.ssbl.ExtendedBaseBackgroundJob]|10.14.4.24| (ajp-/0.0.0.0:8009-24) here again: {className="ie.originalsolutions.caseflow.xx.busyness.CaseCalculationsDAO" methodName="getRecord(line:425)" componentSequenceNumber=0 severity=13 errorType=-1 errorMessage="Error getting record for update with case reference 3361" nestedException.message="ORA-02049: timeout: distributed transaction waiting for lock

Amit kaptam infot regrol:
dba korabban torolte a database lockot es az megoldotta a problemat.

Tovabba ez alapjan: http://orababy.blogspot.co.uk/2013/09/ora-02049-timeout-distributed.html
megneztem a lock timeoutot nalunk is 60.

Gui-ban, ha megnezem milyen lockok vannak, user alatt nincs, system alatt van csomo. A db cluster 3 szerverbol all.

1. Hogy kell megnezni ezt a lockos d olgot es, hogy kell ezt a torlest megcsinalni, mik a parancsok es lepesek ?
2. Ha ujra kellene inditani, hogy kell ezt ? Ha egyenkent rebootolom a node-okat gondolom semmit nem er, mert failoverelni fog a masik kettore, ha nem jol gondolom javitsatok. GUI-ban van egy shutdown gomb, esetleg az lenne ? Vagy, hogy van egy helyes ujrainditas, hogy adatok ne seruljenek ?

Pls help :(