# DB-Replikation

## Einrichtung

### Master

1. MySQL Konfigurationsdatei anpassen:

```bash
[mysqld]
server-id = <eindeutige ID zB 10>
log-bin = mysql-bin
binlog-format = ROW

```

2. Neustarten des MySQL-Dienstes auf dem Master-Server
3. Benutzer für die Replikation erstellen und Berechtigungen erteilen:

```sql
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'secure_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;

```

4. Erstellen eines Snapshot-Backups:  
    Dies ist notwendig, um sicherzustellen, dass der Slave-Server mit den aktuellen Daten startet.

```sql
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
-- Notieren Sie sich den Wert von 'File' und 'Position' 
-- für die spätere Verwendung auf dem Slave-Server.

```

<p class="callout info">==&gt; Backup erstellen (mysqldump) und auf dem Slave-Server ablegen.</p>

 5. Tabellen wieder entsperren:

```sql
UNLOCK TABLES;

```

### Slave

1. MySQL Konfigurationsdatei anpassen:

```bash
[mysqld]
server-id = <eindeutige ID zB 11>
relay-log = mysql-relay-bin

```

2. Neustarten des MySQL-Dienstes auf dem Slave-Server
3. <p class="callout info">Datenbank-Dump auf dem Slave-Server importieren</p>
4. Slave-Server konfigurieren, um mit dem Master zu synchronisieren:

```sql
CHANGE MASTER TO
    MASTER_HOST='master_host_ip',
    MASTER_USER='replica_user',
    MASTER_PASSWORD='secure_password',
    MASTER_LOG_FILE='mysql-bin.000001', -- Wert von SHOW MASTER STATUS
    MASTER_LOG_POS=1234; -- Wert von SHOW MASTER STATUS

```

5. Replikation starten:

```sql
START SLAVE;

```

6. Status der Replikation überprüfen:

```sql
SHOW SLAVE STATUS\G;

```