MySQL Master/Slave Master/Master

xingfei80發表於2012-06-08
MySQL Master/Slave原理分析:
單向同步是基於MySQL的二進位制日誌的(binlog),所以要開啟二進位制日誌功能(預設開啟)。MySQL將所有更新的內容記錄到二進位制日誌中,Master/Slave透過三個執行緒來完成同步。在Master上有一個執行緒,用來傳送二進位制日誌,在Master上show processlistG可以檢視執行緒的名字(Binlog Dump)。在Slave上有兩個執行緒,I/O執行緒用來連線Master,接受來自Master的更新二進位制日誌,並把它儲存到中繼日誌(relay log)中,SQL執行緒用來讀取中繼日誌中SQL語句並執行更新操作。
Master/Slave優點:
系統服務穩定:當Master當機時,可以切換Slave服務。
系統服務速率加快:更新操作在Master上進行,查詢操作在Slave上進行,達到了負載均衡的效果,減輕了Master的負載,加快服務響應時間。
系統資料易備份、恢復:資料備份可以在Slave上進行而不干擾Master的服務。
注意:
一切更新操作要在Master上進行,否則會造成Master/Slave同步衝突。
兩個資料庫版本要相同,或者slave比master版本高!
[@more@]
MySQL安裝過程可以參考附件指令碼。
Master:192.168.10.21
Slave:192.168.10.22
Master:
建立同步賬戶,並給予許可權
grant all on test.* to mysql@192.168.10.22 identified by 'mysql';
flush privileges;
配置/etc/my.cnf
在[mysqld]下新增配置引數
log-bin=mysql-bin 啟動二進位制日誌系統,預設啟動binlog-do-db=test 二進位制需要同步的資料庫名
server-id=1binlog-ignore-db=mysql 避免同步 mysql 使用者配置,以免不必要的麻煩
/etc/init.d/mysql restart
Slave:
配置 /etc/ my.cnf 檔案
在[mysqld]下新增一下引數
server-id=2 從伺服器 ID 號,不要和主 ID 相同,
如果設定多個從伺服器,每個從伺服器必
須有一個唯一的server-id值,必須與主服
務器的以及其它從伺服器的不相同。可以
認為server-id值類似於IP地址:這些ID值
能唯一識別複製伺服器群集中的每個服務
器例項。
master-host=192.168.10.21 指定主伺服器 IP 地址
master-user=mysql 指定在主伺服器上可以進行同步的使用者名稱
master-password=mysql 密碼
master-port=3306 同步所用的埠
master-connect-retry=60 斷點重新連線時間
replicate-ignore-db=mysql 遮蔽對 mysql 庫的同步,以免有麻煩
replicate-do-db=test 同步資料庫名稱
/etc/init.d/mysqld restart
在Master上執行 show master satus;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000011 | 196 | test | mysql |
+------------------+----------+--------------+------------------+
在Slave上執行show slave statusG
.......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
........
說明資料正在同步,如果執行結果是empty,執行以下操作
在slave上執行以下命令:
slave stop;
change master to master_host='192.168.10.21', master_user='mysql',
master_password='mysql, master_log_file='mysql-bin.000011',
master_log_pos=196;
slave start;
測試方法:在Master上更新test資料庫,檢視Slave test資料庫的內容是否更新。
搭建雙向同步
其實原理很簡單,只需要把Master/Slave變成 Master/Master就行。配置簡單,倒著順序再配置一遍就行
在Master配置新增:
master-host=192.168.10.22
master-user=mysql
master-password=mysql
master-port=3306
master-connect-retry=60
replicate-ignore-db=mysql
replicate-do-db=test
/etc/init.d/mysqld restart
在Slave執行操作:
grant all on test.* to mysql@192.168.10.21 identified by 'mysql';
flush privileges;
配置新增:
log-bin=mysql-bin
binlog-do-db=test
binlog-ignore-db=mysql 避免同步 mysql 使用者配置,以免不必要的麻煩
/etc/init.d/mysqld restart
首先實現Master/Slave的第一個優點:資料備份可以在Slave上進行而不干擾Master的服務
採用scp服務進行備份
192.168.10.16是檔案伺服器
192.168.10.22是Slave
首先需要開啟ssh服務,在Slave上使用ssh-keygen生成公鑰檔案id_rsa.pub
ssh-copy-id -i .ssh/id_rsa.pub westos@192.168.10.16
Slave採用ssh登入檔案伺服器不需要密碼了
測試:ssh westos@192.168.10.16
發現直接進入檔案伺服器
備份指令碼見附件
備份週期
crontab -e 每天凌晨備份資料庫
0 0 * * * /opt/mysqldump.sh(備份指令碼)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14663377/viewspace-1058460/,如需轉載,請註明出處,否則將追究法律責任。

相關文章