1. 程式人生 > >MySQl複製---基於行的複製

MySQl複製---基於行的複製

一、環境:

主庫(master)和從庫(slave)均為剛剛安裝好,且都是預設的資料庫,也就是說兩臺伺服器上的資料均相同

二、MySQl實際複製過程概述:

1)在主庫上把資料更改記錄到二進位制日誌(Binary log),這些記錄被稱為二進位制日誌事件

2)備庫將主庫上的日誌複製到自己的中繼日誌(Relay Log)

3)備庫讀取中繼日誌中的事件,將其重放到備庫資料之上

二進位制日誌:用於儲存節點自身產生的事件,每次重啟服務,都會產生一個,/var/lib/mysql/下面.

中繼日誌:用於儲存接受自其他節點的事件(也是二進位制格式)

整個過程:master將改變記錄到二進位制(binary log)

,slavemasterbinaryt log event拷貝到

它的中繼日誌中,重做中繼日誌中的事件.

中繼日誌的管理交給slave(從動裝置),從動裝置會啟用兩個程序分別為:IO_thread(會與主庫建立一個普通的客戶端連線,此時主庫上的二進位制轉儲程序被喚醒,將主庫上的二進位制日誌讀給slave,slave會派IO_thread程序處理接受到的二進位制資料(接受和儲存二進位制資料到中繼日誌),slave的另外一個程序SQL_thread執行中繼日誌裡的sql,這樣就能達到複製的效果了.

小提示:

 select user,host,password from mysql.user;

 delete from user where user=””這裡刪除匿名使用者,不然建立的使用者無法登陸

 delete from mysql.user where user=shenge1 刪除shenge1使用者

 mysql -u shenge1 -h 192.168.200.155 --password=lin*****(客戶端連線伺服器)

三、具體操作:

1.在主伺服器上建立複製賬號

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.*

註釋:加了%ip必須要用單引號括起來,%匹配任意

grant 許可權 on 資料庫物件

to 使用者

許可權:REPLICATION SLACE,REPLICATION CLIENT

資料庫物件:*.*(*.*說明資料庫.表名)

使用者:repl 那個%號是萬用字元,表示使用者relp能在192.168.200.1~192.168.200.254所在的服務登入密碼:p4ssowrd

2.配置主庫和備庫

主庫:

假設主庫是server1,需要開啟二進位制日誌並指定一個獨一無二的服務ID(server ID),在主庫的/etc/my.cnf檔案中增加或修改如下:

[mysqld]

log_bin=mysql-bin

Server_id =10

然後重啟mysqld來重新讀取配置檔案/etc/my.cnf,

show variables like log_bin; #這條語句能檢視/etc/my.cnf裡的選項的值例如show variables like 'server_id';等

show master status;

備庫:

/etc/my.cnf中新增

[mysql]

log_bin=mysql-bin

server_id=2

relay_log=/var/lib/msyql/mysql-relay-bin

read_only=1

3.啟動複製

這一步是告訴備庫如何連線到主庫並重放其二進位制日誌,這一步不需要修改my.cnf來配置,而是使用CHANGE MASTER TO語句,改語句完全替代了my/cnf中相應的設定,並且允許以後指向別的主庫時無須重啟備庫

在備庫端,vi  01.sql

change master to master_host=192.168.200.155,

master_user=repl,

master_password=p4ssword,

master_log_file=mysql-bin.000001,

master_log_pos=0;

:wq

mysql < 01.sql > a.txt

show slave status\G

start slave;(ok,結束了)

注意:主端重啟,這個slave仍會有效,只要網路沒問題,都有效,並且監聽主端的日誌

是目前主端的最新二進位制日誌,每次主端重啟服務都會產生新的二進位制日誌.並且

master_log_file也會變成主機最新的二進位制檔案,從端的relay_log_file的編號也和

主庫的master_log_file編號相同.

show processlist\G:可以檢視所有程序

註釋:master_host為主伺服器的ip地址

    master_user為主伺服器上同步資料庫的使用者

master_password為主伺服器上同步資料庫的使用者密碼

master_log_file為主伺服器上的二進位制日誌檔名,在主伺服器上可以通過show master   status獲得二進位制日誌檔名

四、遇到的問題:

1.注意主伺服器上的iptables

2.ERROR 1201 (HY000):Could not initialize master info structure

 原因:在這之前做過主從複製,並且失敗了。

方法:

stop slave;

reset slave;

vi  01.sql

change master to master_host=192.168.200.155,

master_user=repl,

master_password=p4ssword,

master_log_file=mysql-bin.000001,

master_log-pos=0;

:wq

mysql < 01.sql > a.txt