मैंने ट्यूटोरियल के लिंक प्रदान किए। बस यह ध्यान रखें कि उबंटू पर, my.cnf फाइल /etc/mysql/my.cnf में है और /etc/my.cnf में नहीं है जैसे कि हॉफफॉगर ट्यूटोरियल में। अपने सेटअप में, मैंने READ LOCK के साथ FLUSH TABLES का उपयोग नहीं किया; गुरु पर। यदि आपके मास्टर सर्वर में बहुत अधिक लेखन गतिविधि है, तो आपको बैकअप लेने से पहले उस कमांड को चलाकर अपनी तालिकाओं को लॉक करना पड़ सकता है। यदि आप READ LOCK के साथ FLUSH TABLES का उपयोग करते हैं, तो आपके बैकअप के बाद, आप UNLOCK TABLES चलाना चाहेंगे। यदि आप किसी समस्या में भाग लेते हैं, तो मुझे बताएं।
यहाँ वह ट्यूटोरियल है जो मैंने हेटो फोर्ज पर पाया, जिसे रेडहैट / सेंटोस के लिए बनाया गया है:
http://www.howtoforge.com/mysql_database_replication
एक और ट्यूटोरियल जो उबंटू के लिए ठीक लग रहा था
http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
यहाँ विन्यास मैं इस्तेमाल किया है:
मास्टर सर्वर पर
मास्टर सर्वर कॉन्फ़िगर करें:
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
MySQL को पुनरारंभ करें:
/etc/init.d/mysql restart
Mysql के कंसोल से कनेक्ट करें: mysql -u root -ppassword
उपयोगकर्ता की प्रतिकृति बनाने के लिए अनुमतियाँ बनाएं और प्रदान करें।
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'ipaddressofslave' IDENTIFIED BY 'replicationuserpassword';
इस जानकारी को कहीं कॉपी करना सुनिश्चित करें या इसे दिखाई देना छोड़ दें
SHOW MASTER STATUS \G;
mysql> show master status \G;
File: mysql-bin.000001
Position: 100
Binlog_Do_DB:
Binlog_Ignore_DB:
mysql> quit
डेटाबेस को किसी फ़ाइल में डंप करें:
mysqldump -u root -p databasename > /tmp/databasename-backup.sql
यदि आप चाहें तो डेटाबेस डंप की प्रतिलिपि स्लेव सर्वर का उपयोग करें या एफ़टीपी का उपयोग करें:
scp /tmp/databasename-backup.sql root@ipaddressofslave:/tmp/
SLAVE सर्वर पर
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
MySQL को पुनरारंभ करें: /etc/init.d/mysql restart
बैकअप पुनर्स्थापित करें:
mysql -u root -ppassword nameofthedatabase < /tmp/databasename-backup.sql
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;
रन 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)
बाद में, ध्यान रखें कि प्रतिकृति विभिन्न कारणों से विफल हो सकती है। गुलाम पर, आप कमांड को रन करके स्थिति की निगरानी कर सकते हैं; या स्थिति की निगरानी और विफल होने पर ईमेल भेजने के लिए एक क्रॉन जॉब सेट करना। इस कमांड से आउटपुट के साथ फेमिलर प्राप्त करें। यदि प्रतिकृति सही ढंग से चल रही है, तो आपको "Slave_IO_State: ईवेंट के लिए मास्टर की प्रतीक्षा में" देखना चाहिए।
एक बार जब आप इस सेटअप को सही ढंग से प्राप्त कर लेते हैं, तो मैं आपको उस प्रतिकृति की निगरानी के लिए एक स्क्रिप्ट प्रदान कर सकता हूं।
यहाँ MySQL में त्रुटि लॉग की निगरानी के लिए एक स्क्रिप्ट है। यदि आप लाइन जोड़ते हैं
[Mysqld]
log-error = /var/log/mysql/mysql.err
पुनः आरंभ करें mysql: /etc/init.d/mysql पुनः आरंभ करें
तब आप लॉग फ़ाइल की निगरानी के लिए निम्न स्क्रिप्ट का उपयोग कर सकते हैं। यदि लॉग किसी भी तरह से बदलता है, तो आपको एक ईमेल प्राप्त होगा जो आपको सूचित करेगा कि दास सर्वर पर एक त्रुटि हुई है। यदि आप नियमित रूप से त्रुटि लॉग की जाँच करना चाहते हैं, तो आपको इस स्क्रिप्ट को अपने क्रॉस्टेब में जोड़ना होगा।
यहाँ एक नमूना स्क्रिप्ट है: /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 में जोड़ने के लिए।
स्क्रिप्ट को निष्पादन योग्य बनाएं:
chmod +x /somepath/monitor_mysql_log.sh
Crontab अपडेट करें:
crontab -e
* * * * * /somepath/monitor_mysql_log.sh
और स्क्रिप्ट को हर मिनट चलाया जाएगा।
मेरे द्वारा प्रदान की गई स्क्रिप्ट एक ऐसी स्क्रिप्ट है जिसे मैं बस जल्दी से एक साथ रखता हूं। इसके अलावा, आपके सर्वर को ईमेल भेजने में सक्षम होने के लिए, आपको पोस्टफ़िक्स या सेंडमेल जैसे कुछ स्थापित करने होंगे।