1 . 介紹
MySQL 支持單向、異步復制,復制過程中一個服務器充當主服務器,而一個或多個其
它服務器充當從服務器。主服務器將更新寫入二進制日志文件,並維護文件的一個索
引 以跟蹤日志循環。這些日志可以記錄發送到從服務器的更新。當一個從服務器連接
主服務器時,它通知主服務器從服務器在日志中讀取的最后一次成功更新的位置。 從
服務器接收從那時起發生的任何更新,然后封鎖並等待主服務器通知新的更新。
請注意當你進行復制時,所有對復制中的表的更新必須在主服務器上進行。否則,你
必須要小心,以避免用戶對主服務器上的表進行的更新與對從服務器上的表所進行的
更新之間的沖突。
單向復制有利於健壯性、速度和系統管理:
· 主服務器/從服務器設置增加了健壯性。主服務器出現問題時,你可以切換到
從服務器作為份。
· 通 過在主服務器和從服務器之間切分處理客戶查詢的負荷,可以得到更好的
客戶響應時間。SELECT查詢可以發送到從服務器以降低主服務器的查詢處理負
荷。但 修改數據的語句仍然應發送到主服務器,以便主服務器和從服務器保持同
步。如果非更新查詢為主,該負載均衡策略很有效,但一般是更新查詢。
· 使用復制的另一個好處是可以使用一個從服務器執行備份,而不會干擾主服務
器。在備份過程中主服務器可以繼續處理更新。
MySQL 提供了數據庫的同步功能,這對我們實現數據庫的冗災、備份、恢復、負載均
衡等都是有極大幫助
2. 環境
RHEL 6.5
master 172.25.49.1
slave 172.25.49.2
配置安裝
mysql的配置安裝 上一篇博客中已經講述過了
在server1上 源碼編譯安裝MySQL
1、將server1上的mysql發送到server2上,以下操作在server1上進行。
scp -r mysql/ root@172.25.23.2:/usr/local/lnmp/
2、 /etc/init.d/mysqld start #開啟服務
3、mysql -pwestos
create database test;
use test
create table westos (
username varchar(25) not null,
password varchar(35) not null
);
(3)select * from westos;
(4)insert into westos value('lalalala','654321');
(5)insert into westos value('wangjing','123456');
(6) select * from westos;
(7)show master status;
(8)desc westos;
(9) GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO zty@'172.25.49.%' IDENTIFIED BY 'westos'; ##創建同步帳戶,並給予權限
4、 vim /etc/my.cnf
57 server-id = 1 #必須為1到232–1之間的一個正整數值
58 binlog_do_db=test #二進制需要同步的數據庫名
59 binlog_ignore_db=mysql #避免同步 mysql 用戶配置,以免不必要的麻煩
mysql> show master status;
+------------------+--------- -+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+--------- -+--------------+------------------+
| mysql-bin.000017 | 107 | test | mysql |
+------------------+----------+--------------+------------------+
###########################################################################
以下操作在server2 上進行。
1、查看server1上mysql用戶的ID,在server2上創建。
groupadd -g 27 mysql
useradd -u 27 -g mysql -d /usr/local/lnmp/mysql/data/ -M mysql
2、將/usr/local/lnmp/mysql/下目錄用戶組改為mysql
chgrp mysql * -R
chown mysql data/ -R
3、 cd support-files/
cp my-medium.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysqld
4、vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
#添加環境變量
source /root/.bash_profile
5、 vim /etc/my.cnf
57 server-id = 2 ###每台服務器的id不能相同,從服務器 ID 號,不要和主 ID 相同,如果設置多個從服務器,每個從服務器必須有一個唯一的server-id值,必須與主服務器的以及其 它從服務器的不相同。可以認為server-id值類似於IP地址:這些ID值能唯一識別復制服務器群集中的每個服務器實例。
mysql -pwestos #登陸數據庫
mysql> change master to master_host='172.25.49.1',master_user='zty',master_password='westos',master_log_file='mysql-bin.000017',master_log_pos=107;
mysql> slave start
mysql> show slave status\G *************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.49.1
Master_User: zty
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000017
Read_Master_Log_Pos: 107
Relay_Log_File: server2-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000017
Slave_IO_Running: Yes
Slave_SQL_Running: Yes #當出現兩個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: 107
Relay_Log_Space: 411
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
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
