(二)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主從複製搭建成功。