mysql主從配置

來源:互聯網
上載者:User

標籤:

1. MySQL主從原理以及應用情境MySQL的Replication原理非常簡單,總結一下:
每個從僅可以設定一個主。
主在執行sql之後,記錄二進位log檔案(bin-log)。
從串連主,並從主擷取binlog,存於本地relay-log,並從上次記住的位置起執行sql,一旦遇到錯誤則停止同步。
從這幾條Replication原理來看,可以有這些推論:
主從間的資料庫不是即時同步,就算網路連接正常,也存在瞬間,主從資料不一致。
如果主從的網路斷開,從會在網路正常後,批量同步。
如果對從進行修改資料,那麼很可能從在執行主的bin-log時出現錯誤而停止同步,這個是很危險的操作。所以一般情況下,非常小心的修改從上的資料。
一個衍生的配置是雙主,互為主從配置,只要雙方的修改不衝突,可以工作良好。
如果需要多主的話,可以用環形配置,這樣任意一個節點的修改都可以同步到所有節點。

可以應用在讀寫分離的情境中,用以降低單台MySQL伺服器的I/O 
可以實現MySQL服務的HA叢集
可以是1主多從,也可以是相互主從(主主)

說明: 以下文檔為在同一個機器上,配置兩個mysql服務,在我們上課的時候,會用兩台單獨的機器來示範,但步驟基本上一樣。


2. 安裝、配置MySQL 
參考之前步驟搭建MySQL服務
為了做實驗方便,我們在同一台機器上配置兩個MySQL服務(跑兩個連接埠)
cd /usr/local/; cp -r mysql mysql_2; cd mysql_2; 
初始化mysql2: ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2   
拷貝設定檔:cp /etc/my.cnf ./my.cnf 
修改設定檔相關參數:vim my.cnf  #更改port 以及 socket
啟動:/usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql & 
若開機啟動它,需加入到 /etc/rc.local中

3. 配置主從準備工作
設定mysql_2 為主連接埠3307,mysql為從連接埠為3306
在主上建立測試庫: create database db1; 
然後匯出主的mysql庫資料然後匯入給db1
mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql ;
mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql 

4. 配置主(master)
vim /usr/local/mysql_2/my.cnf   #修改或添加:
server-id=1
log-bin=mysql-bin  
兩個選擇性參數(2選1):
binlog-do-db=db1,db2 #需要同步的庫
binlog-ignore-db=db1,db2 #忽略不同步的庫
修改設定檔後,重啟mysql_2
pid=`ps uax |grep mysql2.sock |grep -v grep |awk ‘{print $2}‘` ; kill $pid; cd /usr/local/mysql_2/bin/; ./mysqld_safe --defaults-file=../my.cnf --user=mysql & 
設定root密碼:mysqladmin -u root -S /tmp/mysql2.sock password ‘123456‘ 
mysql -u root -S /tmp/mysql2.sock -p‘123456‘ 
grant replication slave on *.* to ‘repl‘@‘127.0.0.1‘ identified by ‘123123‘; 

flush privileges; (重新重新整理一下)

flush tables with read lock; (鎖死)
show master status; #一定要記住前兩列的內容,一會會用到 

5. 設定從(slave)
vim /etc/my.cnf  #修改或增加
server-id = 2 #這個數值不能和主一樣
選擇性參數:replicate-do-db=db1,db2 和 replicate-ignore-db=db1,db2 #意義同主的那兩個選擇性參數
service mysqld restart 
拷貝主的db1庫資料到從:mysqldump -uroot -S /tmp/mysql2.sock -p123456 db1 > db1.sql; mysql -uroot -p -e "create database db1"; mysql -uroot -p  db1 < db1.sql
mysql -uroot -p  #登陸從的mysql
slave stop; 
change master to master_host=‘127.0.0.1‘, master_port=3306, master_user=‘repl‘, master_password=‘123123‘, master_log_file=‘mysql-bin.000006‘, master_log_pos=474952; 

/etc/init.d/mysqldslave restart
slave start;
主上: mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables" 
從上查看從的狀態: show slave status\G;(要兩個ok才成功)

6. 測試主從

unlock tables;(解鎖)
主上清空db1庫的db表 :use db1; select count(*) from db"; truncate table db;  
進入slave,查看db1庫db表: use db1; select count(*) from db";  
主上刪除表db: drop table db;
從上看db表不存在了
建議: MySQL主從機制比較脆弱,謹慎操作。如果重啟master,務必要先把slave停掉,也就是說需要在slave上去執行 slave stop 命令,然後再去重啟master的mysql服務,否則很有可能就會中斷了。當然重啟完後,還需要把slave給開啟 slave start.

mysql主從配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.