Saya memberikan tautan ke tutorial. Ingatlah bahwa pada Ubuntu, file my.cnf ada di /etc/mysql/my.cnf dan tidak di /etc/my.cnf seperti di tutorial howtoforge. Dalam pengaturan saya, saya tidak menggunakan FLUSH TABLES WITH READ LOCK; pada tuan. Jika server master Anda memiliki banyak aktivitas menulis, Anda mungkin perlu mengunci tabel Anda dengan menjalankan perintah itu sebelum membuat cadangan. Jika Anda menggunakan FLUSH TABLES WITH READ LOCK ;, lalu setelah pencadangan Anda, Anda ingin menjalankan UNLOCK TABLES. Jika Anda mengalami masalah, beri tahu saya.
Berikut adalah tutorial yang saya temukan di howto forge, dibuat untuk Redhat / CentOS:
http://www.howtoforge.com/mysql_database_replication
Tutorial lain yang terlihat bagus untuk Ubuntu
http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
Berikut ini konfigurasi yang saya gunakan:
Di Server MASTER
Konfigurasikan server master:
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
Mulai ulang MySQL:
/etc/init.d/mysql restart
Terhubung ke konsol mysql: mysql -u root -ppassword
Buat dan berikan izin kepada pengguna replikasi.
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'ipaddressofslave' IDENTIFIED BY 'replicationuserpassword';
Pastikan untuk menyalin informasi ini di suatu tempat atau membiarkannya tetap terlihat
SHOW MASTER STATUS \G;
mysql> show master status \G;
File: mysql-bin.000001
Position: 100
Binlog_Do_DB:
Binlog_Ignore_DB:
mysql> quit
Buang database ke file:
mysqldump -u root -p databasename > /tmp/databasename-backup.sql
Salin dump database ke server slave menggunakan scp atau gunakan ftp jika Anda suka:
scp /tmp/databasename-backup.sql root@ipaddressofslave:/tmp/
Di Server BUDAK
Edit konfigurasi mysql:
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
Mulai ulang MySQL: /etc/init.d/mysql restart
Pulihkan cadangan:
mysql -u root -ppassword nameofthedatabase < /tmp/databasename-backup.sql
Terhubung ke MySQL:
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;
Jalankan 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)
Setelah itu, perlu diingat bahwa replikasi dapat gagal karena berbagai alasan. Pada slave, Anda dapat memonitor status dengan menjalankan perintah SHOW SLAVE STATUS \ G; Atau mengatur tugas cron untuk memonitor status dan mengirim email jika gagal. Dapatkan familar dengan output dari perintah ini. Jika replikasi berjalan dengan benar, Anda akan melihat "Slave_IO_State: Menunggu master mengirim acara".
Setelah Anda mendapatkan pengaturan ini dengan benar, saya dapat memberi Anda skrip untuk memantau replikasi itu.
Berikut ini skrip untuk memonitor kesalahan log di MySQL. Jika Anda menambahkan baris
[mysqld]
log-error = /var/log/mysql/mysql.err
restart mysql: /etc/init.d/mysql restart
Kemudian Anda dapat menggunakan skrip berikut untuk memantau file log. Jika log berubah dengan cara apa pun, Anda akan menerima email yang memberi tahu Anda bahwa ada kesalahan pada server slave. Jika Anda ingin log kesalahan diperiksa secara teratur, Anda harus menambahkan skrip ini ke crontab Anda.
Berikut ini contoh skrip: /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
Untuk menambah crontab.
Jadikan skrip dapat dieksekusi:
chmod +x /somepath/monitor_mysql_log.sh
Perbarui crontab:
crontab -e
* * * * * /somepath/monitor_mysql_log.sh
Dan skrip akan dijalankan setiap menit.
Skrip yang saya sediakan adalah skrip yang saya buat dengan cepat. Selain itu, agar server Anda dapat mengirim email, Anda harus menginstal sesuatu seperti postfix atau sendmail.