主在執行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 -uroot db1 </root/1.sql
##使用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