Linux MySQL集群搭建之主從復制


前期准備

  准備兩台Linux,一主,一從,具體Linux安裝MySQL操作步驟:點我直達

集群搭建

注意事項

  • 一主可以多從
  • 一從只能一主
  • Linux之間要能ping通!!

關閉主從機器的防火牆策略

chkconfig iptables off

service iptables stop

主服務器配置

修改my.cnf文件

vim /etc/my.cnf

[mysqld]
# 啟用二進制日志
log-bin=mysql-bin
# 服務器唯一ID,一般取IP地址最后一段
server-id=200

重啟mysql服務

service mysqld restart

主機給從機授備份權限slave(登陸到MySQL

GRANT REPLICATION SLAVE ON *.* TO '從機MySQL用戶名'@'從機ip' identified by '從機MySQL密碼';

一般不用root賬戶,'%'表示所有客戶端都能連,只要賬戶,密碼都正確,此處可以用具體客戶端IP代替,加強安全

刷新權限

FLUSH PRIVILEGES

查詢master狀態

show master status;

從服務器配置

修改my.cnf文件

vim /etc/my.cnf

[mysqld]
# 服務器唯一ID,一般取IP地址最后一段
server-id=201

重啟並登陸到MySQL進行配置從服務器

change master to master_host='192.168.31.200',master_user='root',master_password='root',master_log_file='mysql-bin.000002',master_log_pos=594;

  注意語句中間不要斷開,master_port為mysql服務器端口號(無單引號),master_user為執行同步操作的數據庫賬戶,此處的594就是:show master status中看到的position的值,mysql-bin.000002就是file的值

重啟從服務器復制功能

start slave;

檢查從服務器賦值功能狀態 

show slave status \G

  注意:Slave_IO_Running: Yes、Slave_SQL_Running: Yes必須都為yes才代表成功!!

  搞定!!!

主從復制演示

主:192.168.31.200;從:192.168.31.201

注意事項

  如果linux中一台配置好mysql的話,克隆出第二台的話,要將auto.cnf刪除,二台mysql的uuid不能相同!!!,要不然主從復制出問題

設置從服務器只讀模式

常見現象

  在我們搭建好主從服務器后,會發現一個問題,主服務器上的數據,可以同步給從服務器;但是在從服務器中添加數據時,不會同步至主服務器,這樣子會造成一些垃圾數據,此時我們需要將從庫設置為只讀模式。

解決方法

演示如下:
mysql> set global read_only=1; 
Query OK, 0 rows affected (0.00 sec)

#set global read_only=0 為取消普通賬號的只讀模式

授權普通MySQL測試賬號
mysql> grant select,insert,update,delete on s18.* to 'test'@'127.0.0.1' identifi
ed by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
用測試賬號登陸進行刪除等操作,會提示--read-only錯誤
mysql> delete from student where sid=14;
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so i
t cannot execute this statement

mysql> insert class values(5,三年級十班);
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so i
t cannot execute this statement

注意:set global read_only=1 對擁有super權限的賬號是不生效的,所以在授權賬號的時候盡量避免添加super權限

那么我們在做數據遷移的時候不想發生任何數據的修改,包括super權限修改也要限制。

可以用鎖表:

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.18 sec)
使用root賬號測試:
mysql>  delete from student where sid=13;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read
lock
解鎖測試:
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
mysql>  delete from student where sid=13;
Query OK, 0 rows affected (0.00 sec)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM