Tôi đã cung cấp các liên kết đến các hướng dẫn. Chỉ cần lưu ý rằng trên Ubuntu, tệp my.cnf nằm trong /etc/mysql/my.cnf chứ không phải trong /etc/my.cnf như trong hướng dẫn howtoforge. Trong thiết lập của tôi, tôi đã không sử dụng BẢNG XÓA B READNG ĐỌC KHÓA; về chủ. Nếu máy chủ chính của bạn có nhiều hoạt động ghi, bạn có thể cần phải khóa các bảng của mình bằng cách chạy lệnh đó trước khi sao lưu. Nếu bạn sử dụng BẢNG BẢNG VỚI ĐỌC LOCK;, thì sau khi sao lưu, bạn sẽ muốn chạy BẢNG UNLOCK. Nếu bạn gặp phải bất kỳ vấn đề, hãy cho tôi biết.
Đây là hướng dẫn mà tôi đã tìm thấy về cách rèn, được tạo cho Redhat / CentOS:
http://www.howtoforge.com/mysql_database_Vplication
Một hướng dẫn khác có vẻ ổn đối với Ubuntu http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ub Ubuntu-master-to-
slave /
Đây là cấu hình tôi đã sử dụng:
Trên máy chủ MASTER
Cấu hình máy chủ chính:
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
Khởi động lại MySQL:
/etc/init.d/mysql restart
Kết nối với bảng điều khiển của mysql: mysql -u root -ppassword
Tạo và cấp quyền cho người dùng sao chép.
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'ipaddressofslave' IDENTIFIED BY 'replicationuserpassword';
Đảm bảo sao chép thông tin này ở đâu đó hoặc để nó hiển thị
SHOW MASTER STATUS \G;
mysql> show master status \G;
File: mysql-bin.000001
Position: 100
Binlog_Do_DB:
Binlog_Ignore_DB:
mysql> quit
Kết xuất cơ sở dữ liệu vào một tệp:
mysqldump -u root -p databasename > /tmp/databasename-backup.sql
Sao chép kết xuất cơ sở dữ liệu vào máy chủ nô lệ bằng scp hoặc sử dụng ftp nếu bạn muốn:
scp /tmp/databasename-backup.sql root@ipaddressofslave:/tmp/
Trên máy chủ SLAVE
Chỉnh sửa cấu hình 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
Khởi động lại MySQL: /etc/init.d/mysql restart
Khôi phục bản sao lưu:
mysql -u root -ppassword nameofthedatabase < /tmp/databasename-backup.sql
Kết nối với 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;
Chạy 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)
Sau đó, hãy nhớ rằng nhân rộng có thể thất bại vì nhiều lý do. Trên nô lệ, bạn có thể theo dõi trạng thái bằng cách chạy lệnh SHOW SLAVE STATUS \ G; Hoặc thiết lập một công việc định kỳ để theo dõi trạng thái và gửi email nếu thất bại. Nhận gia đình với đầu ra từ lệnh này. Nếu sao chép đang chạy chính xác, bạn sẽ thấy "Slave_IO_State: Đang chờ chủ để gửi sự kiện".
Khi bạn nhận được thiết lập này một cách chính xác, tôi có thể cung cấp cho bạn một tập lệnh để theo dõi bản sao đó.
Đây là một kịch bản để theo dõi nhật ký lỗi trong MySQL. Nếu bạn thêm dòng
[mysqld]
log-error = /var/log/mysql/mysql.err
khởi động lại mysql: /etc/init.d/mysql khởi động lại
Sau đó, bạn có thể sử dụng đoạn script sau để theo dõi tệp nhật ký. Nếu nhật ký thay đổi theo bất kỳ cách nào, bạn sẽ nhận được một email thông báo cho bạn rằng đã xảy ra lỗi trên máy chủ nô lệ. Nếu bạn muốn kiểm tra nhật ký lỗi một cách thường xuyên, bạn sẽ cần thêm tập lệnh này vào crontab của mình.
Đây là một tập lệnh mẫu: /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
Để thêm vào crontab.
Làm cho tập lệnh thực thi:
chmod +x /somepath/monitor_mysql_log.sh
Cập nhật crontab:
crontab -e
* * * * * /somepath/monitor_mysql_log.sh
Và kịch bản sẽ được chạy mỗi phút.
Kịch bản tôi cung cấp là một kịch bản mà tôi vừa nhanh chóng kết hợp lại. Ngoài ra, để máy chủ của bạn có thể gửi email, bạn phải cài đặt một cái gì đó như postfix hoặc sendmail.