1. 程式人生 > >在同一臺機器上實現主從複製,多個mysql(windows)

在同一臺機器上實現主從複製,多個mysql(windows)


最近在自學,看到了mysql的主從複製,覺得挺有意思的,就研究了下.無奈試了多種方法均以失敗告終,最後只好在同一臺機器上安裝多個mysql.試試主從複製. 一共試了三種方式,目前只成功了一種. 1.用雲伺服器坐從伺服器,本地的電腦做主伺服器.但是因為電腦是在內網裡面...無法被訪問到.就使用了花生殼和nat123.進行埠對映.這樣做之後,雲伺服器A(叫做A好了),可以通過對映的域名來訪問本地的資料庫了.但是在進行主從複製的配置的時候,似乎主機的IP地址就不能填寫域名.(不清楚是不是這樣). 因為直接通過對映的域名是可以訪問到資料庫中的資料的,但是一到主從複製,然後配置IP地址,填寫的域名,就會報錯.屢次不成功,然後我就試了第二種方式.
2.使用虛擬機器和主機進行主從複製. 個人不是很會使用虛擬機器這個東西.阻力在於虛擬機器和主機能相互ping通,而且要在虛擬機器上裝上mysql.虛擬機器裝的是centos7.= =本人能力有限加上運氣不好,怎麼安裝mysql都失敗. 最後用原始碼安裝成功後,還是無法訪問本機的mysql.最終嘗試了最簡單,能夠找回自信心的方式.在同一臺機器上安裝多個mysql.來實現mysql的主從複製.   首先.我本機上裝了一個mysql5.6.  然後複製了mysql5.6在修改了  第二個mysql(叫mysql2好了)的my.ini.  就可以安裝了兩個mysql.
這個比較容易.可以參考http://www.cnblogs.com/yuechaotian/archive/2013/05/15/3079919.html.
然後在進行mysql的配置. 注:這裡主機和從機因為是複製的,所以一開始它們的版本和資料庫表結構什麼的都是一致的.   因為我不知道資料庫版本不一致和資料庫表結構不一樣會不會影響到主從複製.之後可能會嘗試著試驗一下.這兩個變數對主從複製的影響.  (所以說在同一臺機器上是最簡單的方式,不用管版本,表結構,ip地址什麼的) 1.在主機的my.ini(windows是這個,linux應該是/etc/my.cnf)新增一些配置
在[mysqld]下新增配置資料: server-id=1     #伺服器的標識  要和從伺服器不一樣 log-bin=mysql-bin  #二進位制檔案存放路徑 (說明開啟了二進位制日誌,關鍵點)
binlog-do-db=db1             #是你需要複製的 資料庫 名稱,如果有多個就用逗號“,”分開;或者分行寫 binlog-ignore-db=mysql  #不參與主從的資料庫名,不參與主從複製的資料庫名mysql 儲存,重啟資料庫服務。
2.給從伺服器提供一個遠端訪問主伺服器的賬號 1.mysql>grant replication slave on *.* to  mycat @l ocalhost identified by ' 123456' ;   建立一個遠端訪問的賬戶 2.mysql>flush privileges; 重新整理許可權,為了讓這個賬戶能直接使用 3.mysql>show master status; # 找到File 和 Position 的值記錄下來;(從伺服器就是根據這個日誌來複制的. 附上主從複製的原理http://machael.blog.51cto.com/829462/239112/)
3.從庫的配置 server-id=2     #唯一 #設定要進行或不要進行主從複製的資料庫名,同時也要在Master 上設定。 replicate-do-db=進行主從資料庫名1 ,資料庫名2 replicate-ignore-db=不進行資料庫名1 ,資料庫名2.這裡跟主庫的配置差不多
4.設定主庫的資訊.將從庫和主庫聯絡起來 mysql>change master to  master_host='127.0.0.1', master_user='mycat', master_password='123456', master_log_file='mysql-bin.000005', master_log_pos=120; 這裡的配置就是使用的上面主庫的資訊.還有日誌檔案的資訊 5.  mysql>start slave ; mysql>show slave status\G; 如果出現: Slave_IO_Runing:Yes Slave_SQL_Running :yes 就說明成功了.然後你在主資料庫的增刪改查,看看從資料庫.應該就會同步執行了.
不過不會這麼順利的= =.下面列出來一些我遇到的問題 1. Last_Error:[email protected]   失敗. 沒有截圖了,這個是使用者名稱和密碼的問題.   首先要明確是主庫費從庫開了一個賬戶mycat,然後從庫在用這個賬戶登入主庫,拿到二進位制的日誌.   所以這個賬戶是在主庫的.我一開始弄錯了,把這個賬戶弄在了從庫.所以報錯.   還有一點.就是主庫給從庫開啟許可權的時候要細心一點,我從網上看到有的人是 'mycat  '@localhost這一步.使用者名稱多了個空格.或者密碼多了個空格所以導致從庫訪問主庫失敗. 因此,主庫開啟完許可權後,要先試著用這個mycat的賬戶遠端登入主庫試試.能登入才進行下一步.
2. 錯誤號為1062的. 類似duplicate entry的錯誤. 這個可能是主從庫的主鍵衝突. 解決方式: 方式1.在從庫執行set global sql_slave_skip_counter=1 這個是用來跳過錯誤的. 方式2:刪除主和從相應記錄,在主庫在重新加入該記錄insert.
3.uuids:衝突 解決方式:修改主或者從的auto.cnf. 先使用select uuid(),獲得一個隨機的UUid.在修改auto.cnf中的uuid.記得改完重啟mysql.