Ich habe Links zu Tutorials bereitgestellt. Beachten Sie jedoch, dass sich die Datei my.cnf unter Ubuntu in /etc/mysql/my.cnf und nicht wie im Tutorial in /etc/my.cnf befindet. In meinem Setup habe ich FLUSH TABLES WITH READ LOCK nicht verwendet. auf den Meister. Wenn Ihr Masterserver über viele Schreibaktivitäten verfügt, müssen Sie möglicherweise Ihre Tabellen sperren, indem Sie diesen Befehl ausführen, bevor Sie eine Sicherungskopie erstellen. Wenn Sie FLUSH TABLES WITH READ LOCK verwenden, möchten Sie nach der Sicherung UNLOCK TABLES ausführen. Wenn Sie auf Probleme stoßen, lassen Sie es mich wissen.
Hier ist das Tutorial, das ich in Howto Forge für Redhat / CentOS gefunden habe:
http://www.howtoforge.com/mysql_database_replication
Ein weiteres Tutorial, das für Ubuntu in Ordnung aussah
http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
Hier ist die Konfiguration, die ich verwendet habe:
Auf dem MASTER Server
Konfigurieren Sie den Master-Server:
vi /etc/mysql/my.cnf
[mysqld]
# bind-address = 127.0.0.1 (comment this out)
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
max_binlog_size = 100M
expire_logs_days = 1
Starten Sie MySQL neu:
/etc/init.d/mysql restart
Stellen Sie eine Verbindung zur Konsole von mysql her: mysql -u root -ppassword
Erstellen und erteilen Sie Berechtigungen für den Replikationsbenutzer.
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'ipaddressofslave' IDENTIFIED BY 'replicationuserpassword';
Stellen Sie sicher, dass Sie diese Informationen irgendwo kopieren oder sichtbar lassen
SHOW MASTER STATUS \G;
mysql> show master status \G;
File: mysql-bin.000001
Position: 100
Binlog_Do_DB:
Binlog_Ignore_DB:
mysql> quit
Dump die Datenbank in eine Datei:
mysqldump -u root -p databasename > /tmp/databasename-backup.sql
Kopieren Sie den Datenbankspeicherauszug mit scp auf den Slave-Server oder verwenden Sie ftp, wenn Sie möchten:
scp /tmp/databasename-backup.sql root@ipaddressofslave:/tmp/
Auf dem SLAVE Server
Bearbeiten Sie die MySQL-Konfiguration:
vi /etc/mysql/my.cnf
[mysqld]
# slave server configuration
server_id = 2
# this is optional, but I find it useful to specify where the relay logs go to control.
# Don't forget to create the /var/log/mysql directory and give mysql rights to it.
# chown mysql:mysql -R /var/log/mysql
# disk space
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
relay_log_space_limit = 2000M
Starten Sie MySQL neu: /etc/init.d/mysql restart
Stellen Sie die Sicherung wieder her:
mysql -u root -ppassword nameofthedatabase < /tmp/databasename-backup.sql
Stellen Sie eine Verbindung zu MySQL her:
mysql -u root -ppassword
stop slave;
# master log file and master_log_pos taken from show master status above
CHANGE MASTER TO master_host='ipaddressmaster', master_port=3306, master_user='replication', master_password='replicationuserpassword', master_log_file='mysql-bin.000001', master_log_pos=100;
start slave;
Ausführen SHOW SLAVE STATUS\G
:
mysql> show slave status\G;
Slave_IO_State: Waiting for master to send event
Master_Host: ipaddressmaster
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.0000001
Read_Master_Log_Pos: 100
Relay_Log_File: mysql-relay-bin.000001
Relay_Log_Pos: 1
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 17324288
Relay_Log_Space: 17324425
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.02 sec)
Beachten Sie anschließend, dass die Replikation aus verschiedenen Gründen fehlschlagen kann. Auf dem Slave können Sie den Status überwachen, indem Sie den Befehl SHOW SLAVE STATUS \ G ausführen. Oder richten Sie einen Cron-Job ein, um den Status zu überwachen und E-Mails zu senden, wenn dies fehlschlägt. Machen Sie sich mit der Ausgabe dieses Befehls vertraut. Wenn die Replikation ordnungsgemäß ausgeführt wird, sollte "Slave_IO_State: Warten auf das Senden des Ereignisses durch den Master" angezeigt werden.
Sobald Sie dieses Setup korrekt erhalten haben, kann ich Ihnen ein Skript zur Überwachung dieser Replikation bereitstellen.
Hier ist ein Skript zur Überwachung des Fehlerprotokolls in MySQL. Wenn Sie die Zeile hinzufügen
[mysqld]
log-error = /var/log/mysql/mysql.err
Starten Sie mysql neu: /etc/init.d/mysql restart
Dann können Sie das folgende Skript verwenden, um die Protokolldatei zu überwachen. Wenn sich das Protokoll auf irgendeine Weise ändert, erhalten Sie eine E-Mail, in der Sie darüber informiert werden, dass auf dem Slave-Server ein Fehler aufgetreten ist. Wenn Sie möchten, dass das Fehlerprotokoll regelmäßig überprüft wird, müssen Sie dieses Skript zu Ihrer crontab hinzufügen.
Hier ist ein Beispielskript: /somepath/monitor_mysql_log.sh
#! /bin/sh
MAIL_TO="addressemail@something.com"
# This is the log that will be monitored.
# If any changes occur to this, then take appropriate action.
MONITORED_LOG=/var/log/mysql/mysql.err
# We will need this log to see whether any changes occured to /tmp/goreb.log
TEMP_LOG=/tmp/.mysql.err.1
# This is a 1-time command i.e. create the log file if it does nto exist.
[ ! -f $TEMP_LOG ] && touch -r $MONITORED_LOG $TEMP_LOG
[ $MONITORED_LOG -nt $TEMP_LOG ] && echo "an error occurred in mysql" | mail -s "Error on MySQL" $MAILTO
# Update $TEMP_LOG with the new modified date of $MONITORED_LOG
touch -r $MONITORED_LOG $TEMP_LOG
Crontab hinzufügen.
Machen Sie das Skript ausführbar:
chmod +x /somepath/monitor_mysql_log.sh
Crontab aktualisieren:
crontab -e
* * * * * /somepath/monitor_mysql_log.sh
Und das Skript wird jede Minute ausgeführt.
Das Skript, das ich bereitgestellt habe, ist ein Skript, das ich gerade schnell zusammengestellt habe. Damit Ihr Server E-Mails senden kann, müssen Sie außerdem etwas wie Postfix oder Sendmail installieren.