mysql基于日志的主从复制详解
總有人問我 會不會讀寫分離,我有時真的不知道怎么回答,這么滴吧,技術本身不難你,難的是咱們能不能遇得到這么大的項目。如果是真有這么大項目,光讀寫分離這個事肯定不是一兩個人在搞,應該是多人協作的。
相關學習推薦:mysql視頻教程
所以呢!我沒搞過。
但是……
不能做實驗環境嗎?(一個尷尬的笑容)
我從找文檔資料到實驗落地,一共花了3天時間(因為不是全天都在圍繞著這個事情哇)。基本搞定,就是說,如果有人問我會不會,我說我已經操作過了,不是什么難事。
具體注意點:
主從之間的防火墻需要放行mysql-id 得唯一 見 my.cnfuuid 得唯一 見 auto.cnf主服務器要授權,一般授權一個slave賬號給從服務器使用常用幾個命令(針對日志的方式)
在主庫上操作的有
mysql > show master status; #查看主庫狀態
mysql > grant replication slave on . to ‘slave‘@’%ip%’ identified by ‘password’;# to 后面的 解釋: ‘slave’ 代表哪個賬戶,@后面的是從服務器的IP by 后面的是密碼;
systemctl status firewalld # 查看防火墻狀態
firewall-cmd –list-all # 查看防火墻的端口列表
firewall-cmd –permanent –zone=public –add-port=3306/tcp # 放行 3306 端口
firewall-cmd –reload # 重啟防火墻
另外 iptable 的話 可以自行看看哇
在從庫上操作主要有
mysql> stop slave; // 停止復制mysql> reset slave; // 重置復制mysql> start slave; // 開啟復制mysql> show slave status\\G; # 查看狀態
具體配置
環境介紹
主服務器 192.168.5.238 centos 7.4從服務器 192.168.5.239 centos 7.4利用日志來進行主從配置
主服務器上的配置
防火墻操作,防止后面出奇怪的問題 參考常用幾個命令的防火墻操作
mysql 的日志相關的配置 其他的先不用動 主要是看這段
# aster live copy configure
log-bin=mysql-bin //日志文件名
binlog_format=mixed // 這個日志格式,還有幾個選項,大家都選mixed 可選項statement/row/mixed,如果想深究 可以去看官方文檔
server-id = 238 //為了不重復使用 盡量采用服務器IP 的最后一位來命名
skip_name_resolve=ON //這個直接寫上就可以了,參考一下別人的文檔
expire_logs_days = 10 //設置日志保存的天數,這個吧 我覺得可以不用加,加上也無所謂,因為在測試環境,如果正式上線跑的話,就要掂量一下了
# /etc/init.d/mysql restart // 這個不一定是這個命令 看自己是用什么方式安裝的 centos 也有 systemctl restart mysql的 這個不懂可以多研究一下linux操作
##如果兩臺服務器不是復制的話,auto.cnf 的uuid應該會不一樣,如果是復制的話,就該看看了,這個在mysql的安裝目錄的 /var、目錄下如果有 就把這個文件刪除或者mv 備份一下
mysql配置一下復制權限
# mysql -uroot -p “password” //登入mysql服務器、會讓你輸入密碼
mysql>GRANT replication slave ON . TO ‘slave‘@’%’ IDENTIFIED BY ‘111111’; // 解釋 replication 分配復制的權限 這個. 可以操作那個庫 后面的‘slave‘@’%’ 表示任何主機用slave都可以進行從庫復制,也可以指定到IP 后面就是密碼哈
mysql> show master status;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000010 | 2812 | | | |
+——————+———-+————–+——————+——————-+
1 row in set (0.00 sec)
看到上面的這個表表示成功了
從庫上的配置
修改my.cnf
log-bin=mysql-bin //日志文件名
binlog_format=mixed //日志格式
server-id =239 //服務器ID 這個和主服務器一個解釋,用IP的尾巴
# expire_logs_days = 10 //這個我注釋掉了,
# early-plugin-load = “” //這個暫時沒有使用,如果啟用可以配置此項,主從復制這個項并不是關鍵項
relay_log = mysql-relay-bin //這個是個從庫的復制日志
relay_log_index=relay_log.index //日志索引
# /etc/init.d/mysql restart // 這個不一定是這個命令 看自己是用什么方式安裝的 centos 也有 systemctl restart mysql的 這個不懂可以多研究一下linux操作
設置從庫
進入從庫的mysql 終端 #mysql -uroot -p //進入終端
# mysql -uroot -p //進入終端(之所以寫詳細點,就是怕看到此文的人會誤會操作不全)
關閉slave # 注意配置從庫之前先關閉掉slave;
mysql>stop slave; //這個是關閉從庫哇,保證一把過
修改master參數
mysql>change master to
master_host=’192.168.5.238’,
master_user=’slave’,
master_password=’這里填上面設置主庫復制權限時的密碼’,
master_log_file=’mysql-bin.000010’, //這里填 在主庫 show master status 的文件名,位置對著抄就好了
master_log_pos=2812; //在主庫的show master status 里找
啟動從庫
mysql>start slave; //啟動從庫
查看主從復制是否成功
mysql> show slave status \\G;
Slave_IO_State: Waiting for master to send event Master_Host: 192.168.5.238 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000010 Read_Master_Log_Pos: 2812 Relay_Log_File: mysql-relay-bin.000013 Relay_Log_Pos: 3025 Relay_Master_Log_File: mysql-bin.000010 Slave_IO_Running: Yes Slave_SQL_Running: Yes看到 Slave_IO_Running 和 Slave_SQL_Running 值 都為 Yes 說明就成功了,如果不成,請看下面的提示信息,對著谷歌 百度 應該能找出來的
我在配置時遇到了一個問題,就是報uuid錯誤,原因是我的實驗環境是一個虛擬機安裝完mysql后復制的,所以導致mysql的uuid 相同了
# cd /usr/local/mysql/var
# mv auto.cnf auto.cnf.back //這個你看有沒有,沒有就不操作,有就這樣
# /etc/init.d/mysql restart //重啟數據庫
然后執行show slave status\\G;觀察兩個yes
至此,基于日志的主從復制就完成了
總結:
防火墻 要先看步驟無所謂,對著搞,直到成功細心,不能慌
相關圖文教程:mysql數據庫圖文教程
總結
以上是生活随笔為你收集整理的mysql基于日志的主从复制详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux php脚本不运行怎么办
- 下一篇: 学习MySQL如何优化查询速度