Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2025-05-09, 23:09x



Odpowiedz w temacie  [ Posty: 3 ] 
[MSSQL] Synchronizacja SQL z MYSQL w czasie rzeczywistym 
Autor Wiadomość

Rejestracja: 2010-11-25, 09:46
Posty: 456
Pomógł: 9
Post [MSSQL] Synchronizacja SQL z MYSQL w czasie rzeczywistym
Witam wykonywał ktoś synchronizację w czasie rzeczywistym między lokalnym serwerem sql a zdalnym mysql ? Która metoda najlepiej sprawdza się w przypadku symfoni ?
Będę próbował przez Linked Server tak podpowiada chatgpt


2025-03-10, 11:33
Wyświetl profil
Autor Wiadomość
 


Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4011
Pomógł: 450
Post Re: [MSSQL] Synchronizacja SQL z MYSQL w czasie rzeczywistym
My to robimy za pomocą Api po stronie MySQL i rApi po stronie MSSQL.
Śledzimy zmiany i wysyłamy do API żeby updatowały się w MySQL

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2025-03-10, 11:39
Wyświetl profil

Rejestracja: 2010-11-25, 09:46
Posty: 456
Pomógł: 9
Post Re: [MSSQL] Synchronizacja SQL z MYSQL w czasie rzeczywistym
Ta wiadomość była pomocna.(1)
ok ogarnięte

dodałem change_tracking w sql potem prosty skrypt php który wykonuje zrzut do bazy zdalnej z strukturą 1:1 (create, update, delete)

Kod:
public function executeXt(): Response
    {
        // Połączenie do MSSQL (default)
        $mssql = \Cake\Datasource\ConnectionManager::get('symfonia');
       
        // Połączenie do MySQL (baza240)
        $mysql = \Cake\Datasource\ConnectionManager::get('zdalna');
       
        // Sprawdzamy wersję zmian w MSSQL dla tabeli Xt
        try {
            $result = $mssql->execute("SELECT CHANGE_TRACKING_CURRENT_VERSION() AS version")->fetch('assoc');
            $currentVersion = (int)($result['version'] ?? 0);
        } catch (\Exception $e) {
            return $this->response->withType('json')->withStringBody(json_encode([
                'status' => 'error',
                'message' => "Błąd podczas wykonywania zapytania: " . $e->getMessage()
            ]));
        }
       
        // Pobieramy zmienione rekordy z MSSQL (tabela Xt)
        try {
            $changedXt = $mssql->execute("
                SELECT CT.id
                FROM CHANGETABLE(CHANGES [HM].[Xt], ?) AS CT
            ", [0])->fetchAll('assoc');
        } catch (\Exception $e) {
            return $this->response->withType('json')->withStringBody(json_encode([
                'status' => 'error',
                'message' => "Błąd podczas pobierania zmienionych rekordów: " . $e->getMessage()
            ]));
        }
       
        if (empty($changedXt)) {
            return $this->response->withType('json')->withStringBody(json_encode([
                'status' => 'info',
                'message' => 'Brak zmian w tabeli Xt od ostatniej synchronizacji.'
            ]));
        }
       
        // Rozpoczynamy transakcję w MySQL
        $mysql->begin();
       
        try {
            // Synchronizacja zmienionych rekordów z MSSQL do MySQL
            foreach ($changedXt as $change) {
                $row = $mssql->execute("SELECT * FROM [HM].[Xt] WHERE id = ?", [$change['id']])->fetch('assoc');
               
                if ($row) {
                    // Używamy backticków dla kolumn, które mogą być zarezerwowanymi słowami
                    $columns = array_keys($row);
                    $placeholders = implode(', ', array_map(fn($col) => ":$col", $columns));
                    $columnList = implode(', ', array_map(fn($col) => "`$col`", $columns));  // Dodajemy backticky
   
                    $sql = "REPLACE INTO Xt ($columnList) VALUES ($placeholders)";
                    $mysql->execute($sql, $row);
                }
            }
   
            // Zatwierdzamy transakcję w MySQL
            $mysql->commit();
        } catch (\Exception $e) {
            // W razie błędu, wycofujemy transakcję
            $mysql->rollback();
           
            return $this->response->withType('json')->withStringBody(json_encode([
                'status' => 'error',
                'message' => "Błąd podczas synchronizacji: " . $e->getMessage()
            ]));
        }
       
        // Zapisujemy wersję synchronizacji
        try {
            file_put_contents(LOGS . 'xt_sync_version.txt', $currentVersion);
        } catch (\Exception $e) {
            return $this->response->withType('json')->withStringBody(json_encode([
                'status' => 'error',
                'message' => "Błąd podczas zapisywania wersji synchronizacji: " . $e->getMessage()
            ]));
        }
   
        return $this->response->withType('json')->withStringBody(json_encode([
            'status' => 'success',
            'message' => 'Synchronizacja tabeli Xt zakończona.',
            'currentVersion' => $currentVersion
        ]));
    }


Obrazek


i wszystko puszczone w CRON co 5 minut


2025-04-17, 12:41
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 3 ] 
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. Stany magazynowe w czasie.

w Programowanie

Simon123

4

5344

2016-09-07, 11:11

Simon123 Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Wykres sprzedaży w czasie

w Programy Handlowe

LidiaGJ

1

3512

2015-11-27, 16:15

Wiktoria Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. HMP + mysql

w Programowanie

maciek_ch

5

4235

2018-10-16, 13:32

kat Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Widziane okresy w czasie wprowadzania dokumentu

w Programy Księgowe

carus12

3

3816

2008-06-25, 13:21

carus12 Wyświetl najnowszy post



Kto jest online

Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 2 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant