最近學習了一下MySQL的叢集,發現MySQL的叢集有很多種方式,下面來介紹下學到的MySQL Master Slave配置
MySQL Master Slave 字面上理解,可以看出一個主和下屬的關係,他們能做什麼呢?我個人理解:當遇到高並發訪問資料庫的時候,可以讓查詢操作的SQL去訪問Slave伺服器,插入、修改、刪除、可以在Master伺服器來做,這樣就可以減輕伺服器的負擔。
Slave 會根據Master 進行資料以二進位流的方式快速同步。
這兩天在網上查了很多相關的配置,但都運行不了,最後結合多種配置加上自己的理解終於成功了,太開心了!
下面我來說說我是怎麼配置的吧! 爭取讓你按我的配置一次成功!我盡量詳細。
我的機器是XP系統,安裝的MySQL5.1.32-community-log,我的虛擬機器裡是Ubuntu10.10,MySQL5.1.49-1ubuntu8.1-log
Master :192.169.105.203 (XP系統)
Slave: 192.168.2.133(Linux系統)
1、XP系統中操作:
找到MySQL的安裝目錄,我的是:
D:\Program Files\MySQL\MySQL Server 5.1
修改D:\Program Files\MySQL\MySQL Server 5.1\my.ini檔案,找到[mysqld] 在下面寫:
server-id = 1
log_bin = d:/mysql/mysql-test-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_format =mixed
binlog_do_db = test_db
注意:d:/mysql/mysql-test-bin.log 這個目錄需要自己建立,log_bin的意思是 將資料庫的內容以二進位方式寫到檔案裡(Slave會根據這個檔案進行同步資料);
通常Master伺服器都配置 server-id=1 這個數字最好和IP最後一組數字一致,但要小於32,這裡配置為1。
binlog_do_db准許Slave同步的資料庫,我這裡要讓寫的是test_db用於測試的資料庫(Slave裡也要有相同的資料庫和表結構,否則無法同步),如果有多個資料庫可以多寫幾個binlog_do_db=**資料庫名。
重啟MySQL服務,net stop mysql 然後net start mysql
串連資料庫 mysql -uroot -p123456
mysql> show master status;
+-----------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------------+----------+--------------+------------------+
| mysql-test-bin.000001 | 106 | | |
+-----------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
這個就是產生的二進位檔案的資訊,Slave會根據這個同步資料。
設定 Replication Slave 許可權
我們必須要在 Master Server 上做設定,讓 Slave 具有可以從 Master Server 上 Copy 資料的許可權(正式的說法為 Replication Slave Priviledges)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'test_dbuser'@'192.168.2.133' IDENTIFIED BY '1234';
語句中的SLAVE是許可權名,*.*是可訪問任何資料庫,test_dbuser是使用者名稱,192.168.2.133是准許這個IP訪問,1234是密碼。
mysql> FLUSH PRIVILEGES; (使之生效)
--------------------------
2、下面是在Ubuntu下的操作,配置Slave:
MySQL的安裝我就不多說了,apt-get install mysql ……
先說明一下我的MySQL的路徑:
/etc/init.d/mysql 下是啟動和停止服務
/var/log/mysql/ 記錄日誌,相當於我在前面XP系統裡建立的d:/mysql/mysql-test-bin.log位置
/var/lib/mysql/ 存放資料庫。MySQL設定檔:/etc/mysql/my.cnf ,其中指定了資料檔案存放路徑,
datadir = /var/lib/mysql
如果你建立了一個名為 test 的資料庫,那麼這個資料庫的資料會存放到 /var/lib/mysql/test 目錄下。
Slave Server配置:
修改MySQL設定檔:/etc/mysql/my.cnf
找到[mysqld] 在下面加入:
server-id = 2
replicate-do-db =test_db
log_bin =/var/log/mysql/mysql-bin.log
relay_log =/var/log/mysql/mysql-relay-bin.log
master-connect-retry =1
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = test
#binlog_ignore_db = include_database_name
binlog_format = mixed
下面說明一下:
server-id=2就是個編號,如果有多個Slave伺服器,就依次向後排,3、5、6……
replicate-do-db=test_db是配置我要到Master伺服器同步的資料庫,我這裡配置的是test_db資料庫。
master-connect-retry=1 是1秒鐘同步一次,這個數值可根據不同需要配置。