MySQl複製---基於行的複製
一、環境:
主庫(master)和從庫(slave)均為剛剛安裝好,且都是預設的資料庫,也就是說兩臺伺服器上的資料均相同
二、MySQl實際複製過程概述:
1)在主庫上把資料更改記錄到二進位制日誌(Binary log)中,這些記錄被稱為二進位制日誌事件
2)備庫將主庫上的日誌複製到自己的中繼日誌(Relay Log)中
3)備庫讀取中繼日誌中的事件,將其重放到備庫資料之上
二進位制日誌:用於儲存節點自身產生的事件,每次重啟服務,都會產生一個,/var/lib/mysql/下面.
中繼日誌:用於儲存接受自其他節點的事件(也是二進位制格式)
整個過程:master將改變記錄到二進位制(binary log)
它的中繼日誌中,重做中繼日誌中的事件.
中繼日誌的管理交給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 資料庫物件
許可權: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