前期准備
准備兩台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)