1. 程式人生 > >(二)mysql主從複製搭建

(二)mysql主從複製搭建

mysql通過什麼實現主從複製?

通過mysql本身自帶的binlog日誌檔案來實現主從複製,mysql會把所有的操作儲存在binlog日誌中,從庫同步主庫中的binlog日誌,從庫得到主庫的操作記錄,從庫再執行記錄,實現了主從複製,資料一致。

主從優勢:資料庫備份   讀寫分離  寫需要事務鎖表  讀不需要    相比單庫來說有大幅度的效能優勢

接下來具體操作:

(一)主庫建立mysql使用者

從庫去讀取主庫的binlog日誌,需要主庫的使用者名稱/密碼,才能讀取到日誌檔案

1使用者名稱/密碼,2指定訪問主機ip,3指定許可權

建立使用者:

糾正:上述圖中的*應為%

create user 'repl'@'192.168.11.%' identified by 'password'

@後面接訪問主機的ip,root使用者的為localhost,代表之後本機才能訪問,此處一般嚴謹定義,提高安全策略,截斷外部機器訪問,資料更加安全

接下來為新建立的使用者授權:

grant replication slave on *.* to 'repl'@'192.168.11.%' identified by 'repl';

salve代表權限,*.*代表所有庫的所有表,授權之後從庫就能用這個使用者登陸主機庫了。

 

(二)主機庫mysql的binlog配置

mysql5.7預設binlog日誌是關閉狀態:

開啟mysql的binlog日誌:

quit退出mysql操作,進入MySQL的配置檔案:vim /etc/my.cnf,修改該配置檔案:

加上述兩行配置,server-id為節點id,不能與其他節點一致,log-bin指定binlog日誌檔案的目錄,配置完service mysqld restart重啟mysql服務

再檢視配置是否成功:

ls下看到多了兩個檔案,index為日誌索引檔案,000001為第一個日誌檔案,每次伺服器重啟會建立一個日誌檔案

主機msyql的binlog檔案配置成功

(三)從節點配置

首先克隆一臺虛擬機器作為從節點,指定該機器ip,修改mac地址,把網路介面卡中的mac地址賦值到虛擬機器網絡卡配置檔案中,

vi /etc/sysconfig/network-scripts/ifcfg-eth0進入網絡卡配置檔案並修改HWADDR值,重啟reboot

啟動網路出現問題:

device eth0 does not seem to present

做如下操作:

rm -rf /etc/udev/rules.d/70-persistent-net.rules

然後再reboot重啟機器,service network restart重啟。

從節點機器配置完畢,接下來配置從節點msyql

首先配置從節點mysql的binlog日誌:

進入mysql配置檔案vim /etc/my.cnf,修改後重啟mysql服務

再指定從節點所依賴的主節點的ip/埠/使用者資訊:

change master to master_host='192.168.11.17',master_port=3306,master_user='repl',master_password='repl',master_log_file='mysql-bin.000001',master_log_pos=0;
 

設定成功。

注意reboot會使得之前設定的server-id失效,會報 The server is not configured as slave; fix in config file or with CHANGE MASTER TO,需重新設定,或者全域性設定。

設定成功後啟動從節點:

檢視從節點連線狀態show slave status \G;

如果報錯The slave I/O thread stops because master and slave have equal MySQL server UUIDs,需要修改從節點機器的uuid:

cd /var/lib/mysql 修改auto.cnf檔案中的值即可。

出現問題:last_sql_error:error operation drop user failed for,出現這個問題的原因是主庫把使用者刪除了,此問題根源是文章開始部分需糾正之處所引起,而從庫還存在這使用者的使用,解決辦法為在從庫上依次執行:stop slave;  set global sql_slave_skip_counter=1; start slave;

再次show slave status \G;檢視從庫狀態,當slave_io_running slave_sql_running 的值都為yes時說明配置成功。

最後,我們來測試,主從功能,給主庫建表並插入資料,看從庫是否同步:

主庫操作:

 

從庫結果:

 

mysql主從複製搭建成功。