Master-Master Replication mit MySQL 5 auf Fedora 8 - Seite 2

3.2 Log Verzeichnis auf beiden Systemen

Damit der MySQL Server Log-Dateien erstellen kann, müssen wir ein Verzeichnis anlegen und den Eigentum an MySQL übergeben.

mkdir /var/log/mysql/
chown mysql:mysql /var/log/mysql/

3.3 MySQL Konfiguration

In den nächsten zwei Schritten passen wir die MySQL Konfiguration auf beiden Systemen für die Master-Master Replication an.

3.3.1 System 1

vi /etc/my.cnf

Füge folgende Zeilen dem Bereich [mysqld] hinzu:

server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-host = 192.168.0.200
master-user = slave1_user
master-password = %mysql_slaveuser_password%
master-connect-retry = 60
replicate-do-db = exampledb

log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = exampledb

relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index

expire_logs_days = 10
max_binlog_size = 500M

Starte danach den MySQL Server neu.

/etc/init.d/mysqld restart


3.3.2 System 2

vi /etc/my.cnf

Füge folgende Zeilen dem Bereich [mysqld] hinzu:

server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-host = 192.168.0.100
master-user = slave2_user
master-password = %mysql_slaveuser_password%
master-connect-retry = 60
replicate-do-db = exampledb

log-bin= /var/log/mysql/mysql-bin.log
binlog-do-db = exampledb

relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index

expire_logs_days = 10
max_binlog_size = 500M

Starte danach den MySQL Server neu.

/etc/init.d/mysqld restart


3.4 Exportiere den MySQL Dump auf System 1

Nun erstellen wir einen dump der vorhandenen Datenbank und transferieren es zu System 2.

mysql -u root -p


USE exampledb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Die Ausgabe sollte wie folgt aussehen. Notiere Dir die Datei und Position - Du wirst beides später brauchen.

+------------------+----------+---------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+---------------------+------------------+
| mysql-bin.000004 | 98 | exampledb,exampledb | |
+------------------+----------+---------------------+------------------+
1 row in set (0.00 sec)

Öffne ein zweites Terminalfenster für System 1, erstelle einen dump und transferiere es zu System 2. Verlasse nicht die MySQL Kommandozeile - sonst verlierst Du die Schreibsperre.

cd /tmp/
mysqldump -u root -p%mysql_root_password% --opt exampledb > sqldump.sql
scp sqldump.sql root@192.168.0.200:/tmp/

Schließe danach das zweite Terminalfenster und wechsle zurück zum ersten. Entferne die Schreibsperre und verlasse die MySQL Kommandozeile.

UNLOCK TABLES;
quit;

3.5 Importiere den MySQL Dump auf System 2

Es wird Zeit den Datenbank dump auf System 2 zu importieren.

mysqladmin --user=root --password=%mysql_root_password% stop-slave
cd /tmp/
mysql -u root -p%mysql_root_password% exampledb < sqldump.sql

3.6 System 2 als Master

Nun benötigen wir Informationen über den Master Status auf System 2.

mysql -u root -p
USE exampledb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Die Ausgabe sollte wie folgt aussehen. Notiere die Datei und Position - Du wirst beides später brauchen.

+------------------+----------+---------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+---------------------+------------------+
| mysql-bin.000003 | 958 | exampledb,exampledb | |
+------------------+----------+---------------------+------------------+
1 row in set (0.00 sec)

Entferne danach die Schreibsperre.

UNLOCK TABLES;

Nun sind wir bereit Master für das System 1 zu werden. Ersetze %mysql_slaveuser_password% mit dem Passwort, welches Du ausgewählt hast und pass auf, dass Du die Werte für MASTER_LOG_FILE und MASTER_LOG_POS mit den Werten, die Du in Schritt 3.4 notiert hast, ersetzt!

CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave2_user', MASTER_PASSWORD='%mysql_slaveuser_password%', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=98;

Starte nun den Slave ...

START SLAVE;

... und sieh Dir den Slave Status an. Es ist sehr wichtig, dass beide, Slave_IO_Running und Slave_SQL_Running auf Yes gesetzt sind. Sind sie es nicht, ist etwas schief gelaufen und Du solltest Dir die Logs ansehen.

SHOW SLAVE STATUS;


+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ | Waiting for master to send event | 192.168.0.100 | slave2_user | 3306 | 60 | mysql-bin.000004 | 98 | slave-relay.000002 | 235 | mysql-bin.000004 | Yes | Yes | exampledb,exampledb | | | | | | 0 | | 0 | 98 | 235 | None | | 0 | No | | | | | | 0 | +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ 1 row in set (0.00 sec)
Verlasse danach die MySQL Kommandozeile.

quit;

3.7 System 1 als Master

Öffne eine MySQL Kommandozeile auf System 1 ...

mysql -u root -p

... und halte den Slave an.

STOP SLAVE;

Nun sind wir bereit Master für das System 2 zu werden. Ersetze %mysql_slaveuser_password% mit dem Passwort, das Du gewählt hast und pass auf, dass Du die Werte für MASTER_LOG_FILE und MASTER_LOG_POS mit den Werten, die Du in Schritt 3.6 notiert hast, ersetzt!

CHANGE MASTER TO MASTER_HOST='192.168.0.200', MASTER_USER='slave1_user', MASTER_PASSWORD='%mysql_slaveuser_password%', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=958;

Starte nun den Slave ...

START SLAVE;

... und sieh Dir den Slave Status an. Es ist sehr wichtig, dass beide, Slave_IO_Running und Slave_SQL_Running auf Yes. gesetzt sind. Sind sie es nicht, ist etwas schief gelaufen und Du solltest Dir die Logs ansehen.

SHOW SLAVE STATUS;


+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ | Waiting for master to send event | 192.168.0.200 | slave1_user | 3306 | 60 | mysql-bin.000003 | 958 | slave-relay.000002 | 235 | mysql-bin.000003 | Yes | Yes | exampledb,exampledb | | | | | | 0 | | 0 | 958 | 235 | None | | 0 | No | | | | | | 0 | +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+---------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ 1 row in set (0.00 sec)
Verlasse danach die MySQL Kommandozeile.

quit;

Wenn alles gut gegangen ist, funktioniert die Master-Master Replication nun. Überprüfe Deine Logs auf beiden Systemen falls Probleme auftreten sollten.

4 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte