Access als Daten-Hub für mehrere WordPress-Mandanten mit getrennter MySQL-Instanz

Warum ich Access dafür nutze

Wenn Du für mehrere Mandanten arbeitest, laufen oft auch mehrere WordPress-Installationen – jede mit eigener Datenbank.
Ein zentrales BI-System ist zu groß.
Access reicht, um Daten zu sammeln, zu prüfen und gezielt weiterzugeben.
Ich zeige Dir, wie ich Access als Hub zwischen den Instanzen nutze.

Architektur: Was liegt wo

KomponenteAufgabe
WordPress Mandant 1eigene MySQL-DB, z. B. Kundenportal
WordPress Mandant 2eigene MySQL-DB, z. B. Bewerbersystem
WordPress Mandant 3eigene MySQL-DB, z. B. Ticketing
Accesszieht alle Daten zusammen

Vorbereitung: ODBC-Verbindungen

Installiere den MySQL ODBC 8.0 Unicode Driver

Für jede Instanz legst Du eine eigene System-DSN an:

  • WP_Kunden
  • WP_Bewerber
  • WP_Tickets

Alle DSNs müssen auf dem gleichen Access-Rechner eingerichtet sein.

Tabellenstruktur in Access

Ich nutze pro Quelle eine Roh-Tabelle:

  • import_kunden
  • import_bewerber
  • import_tickets

Und eine gemeinsame Zieltabelle:

CREATE TABLE staging_wp_events (
    quelle TEXT(50),
    event_id LONG,
    user_email TEXT(255),
    timestamp DATETIME,
    status TEXT(50),
    sync_datum DATETIME
)

Damit kannst Du später Auswertungen pro Mandant fahren.

1. Daten abrufen per SQL

Beispiel: Rohdaten aus wp_posts bei Mandant „Kunden“

INSERT INTO import_kunden (post_id, user_email, datum, status)
SELECT ID, post_author, post_date, post_status
FROM [ODBC;DSN=WP_Kunden;].wp_posts
WHERE post_type = 'event'

Dasselbe machst Du für die anderen Mandanten, mit angepasstem DSN.

2. Einheitliche Übernahme ins zentrale Modell

Jetzt vereinheitlichst Du die Rohdaten in die Staging-Tabelle.

INSERT INTO staging_wp_events (quelle, event_id, user_email, timestamp, status, sync_datum)
SELECT 'kunden', post_id, user_email, datum, status, Now()
FROM import_kunden

UNION ALL

SELECT 'bewerber', post_id, user_email, datum, status, Now()
FROM import_bewerber

UNION ALL

SELECT 'tickets', post_id, user_email, datum, status, Now()
FROM import_tickets

Damit hast Du eine konsolidierte Sicht.

3. Automatisierung mit VBA

Sub AlleMandantenAktualisieren()
    Importiere "WP_Kunden", "import_kunden"
    Importiere "WP_Bewerber", "import_bewerber"
    Importiere "WP_Tickets", "import_tickets"
    
    VereinheitlicheDaten
End Sub

Sub Importiere(dsnName As String, zielTabelle As String)
    Dim sql As String
    sql = "INSERT INTO " & zielTabelle & _
          " (post_id, user_email, datum, status) " & _
          "SELECT ID, post_author, post_date, post_status " & _
          "FROM [ODBC;DSN=" & dsnName & ";].wp_posts " & _
          "WHERE post_type = 'event'"
    DoCmd.SetWarnings False
    DoCmd.RunSQL sql
    DoCmd.SetWarnings True
End Sub

Sub VereinheitlicheDaten()
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE FROM staging_wp_events"
    DoCmd.RunSQL CurrentDb.QueryDefs("qry_staging_union").SQL
    DoCmd.SetWarnings True
End Sub

qry_staging_union ist ein gespeicherter Union-Query wie oben beschrieben.

4. Beispiel: Bericht über alle Mandanten

SELECT quelle, Count(*) AS AnzahlEvents,
       Min(timestamp) AS Erste, Max(timestamp) AS Letzte
FROM staging_wp_events
GROUP BY quelle
ORDER BY quelle

Damit erkennst Du z. B. inaktive Mandanten oder Synchronisationsprobleme.

5. E-Mail-Benachrichtigung bei Problemen

Beispiel: kein Eintrag in den letzten 3 Tagen

Function CheckAktivität()
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT quelle FROM staging_wp_events GROUP BY quelle HAVING Max(timestamp) < Date()-3")

    Do While Not rs.EOF
        Call SendeWarnung(rs!quelle)
        rs.MoveNext
    Loop
End Function

Sub SendeWarnung(mandant As String)
    Dim olApp As Object, olMail As Object
    Set olApp = CreateObject("Outlook.Application")
    Set olMail = olApp.CreateItem(0)

    olMail.To = "admin@firma.de"
    olMail.Subject = "Keine Daten von " & mandant
    olMail.Body = "Seit mehr als 3 Tagen keine Daten von WordPress-Mandant '" & mandant & "' erhalten."
    olMail.Send
End Sub

So ein Access als Zentrale kann auch für viele andere Wartungsaufgaben in verschiedenen WordPress Instanzen eingesetzt werden. Ich nutze es z.B. zur automatischen SEO-Optimierung mit ChatGPT.

Kategorien:

Schlagwörter:

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert