主在執行sql語句後,記錄一個二進制log檔案(bin-log),從連接配接主,并擷取到bin-log,存在到本地的relay-log上,并從上一次記錄的位置執行sql,當遇到錯誤則停止同步。
PS:主從并不是實時同步,存在瞬間連接配接;當在網絡斷開後,正常後批量同步;修改從上的資料容易導緻主上的bin-log錯誤而停止同步,是以從上的資料注意修改。
一,主從伺服器安裝Mysql,具體參考Mysql配置
二、配置主從
1.在從salve端配置vim /etc/my.cnf
datadir = /data/mysql ##此處為安裝時定義的位置
server-id=2
replicate-do-db=db1,db2 ##需要同步的庫
replicate-ignore-db=db1,db2 ##不需要同步的庫
##PS 同步庫的參數2選1,需對應主的my.cnf配置是哪個參數
屏蔽以下參數,不需要使用:
skip-bdb
skip-networking
log-bin=node1-bin
binlog-ignore-db=test,mysql
master-host=XXXXXXX
master-password=XXXXXX
master-connect-retry=XXX
mysql.server以及mysqld_safe子產品的内容屏蔽
##配置從的啟動配置檔案
vim /etc/init.d/mysqld ##修改2行參數
basedir=/usr/local/mysql
datadir=/data/mysql
2.在主master端,修改配置檔案vim /etc/my.cnf
##開啟以下參數:
server-id =1
log-bin=mysql-bin
binlog-do-db=db1,db2 ##需要同步的庫
binlog-ignore-db=db1,db2 ##不需要同步的庫
##同步庫的參數2選1,或可都不使用,按實際需求
##使用mysql指令,repl、ip、密碼均為為從slave的賬号、IP以及密碼I
grant replication slave on *.* to‘repl’@192.168.137.111’identified by‘123456’;
##建立後,可以測試slave端是否可以連結到主master端,在salve使用指令:
mysql -urepl–p123456–h主Master的IP
##若加上-P為指定端口,預設為3306
##回到主master端,鎖表
flush tables with read lock;
show master status; ##需記下file、Position列的值
quit
##備份資料庫db1為資料庫名稱,并cp到從slave上
mysqldump–uroot–p123456 db1 > 1.sql
scp–P36000 1.sql [email protected]:/root/ ##拷貝到從上的root目錄下-P為指定端口
3.在從slave端上:
##建立db1的庫
mysql -uroot -e“create database db1;”
mysql -urootdb1
##使用mysql指令,mysql操作
mysql
slave stop;
change master to master_host=’192.168.137.110’,master_port=3306,master_user=’repl’,master_password=’123456’, master_log_file=’主master端記錄的file列值’, master_log_pos=’主master端記錄的position的列值’
##PS如果這段運作報錯,把/data/mysql目錄的XXbinXX的檔案删掉即可回到slave stop繼續
slave start;
###回到主master端
mysql–uroot–e“unlock tables;”
###回到從slave端
mysql -uroot –e“show slave status\G;”
若Slave_IO_Running以及Slave_SQL_Running都為YES表示成功,否則為失敗
4.測試主從
在主端建立表、删除表等等,在從端可查詢
5.注意
主從配置起來很簡單,但是這種機制也是非常脆弱的,一旦我們不小心在從上寫了資料,那麼主從也就被破壞了。另外如果重新開機master,務必要先把slave停掉,也就是說需要在slave上去執行slave stop指令,然後再去重新開機master的mysql服務,否則很有可能就會中斷了。當然重新開機完後,還需要把slave給開啟slave start