天天看點

mysql主從配置淺析

    對于mysql一直沒有深入研究,最近正好有時間,研究完了binlog之後發現和binlog息息相關的有mysql主從配置,便順便也研究了下,以前一直以為mysql的主從配置是一項特别高深難懂的技術,但是經過學習和研究,發現并沒有想象中的那麼難,當然初次接觸進行配置的時候也遇到了不少問題,特此記下備忘。

    測試環境如下:

    主資料庫環境:實體機,作業系統——XP(32位),mysql版本——5.0.51b,内網IP——192.168.1.103

    從資料庫環境(一):主資料庫實體機上的虛拟機,作業系統——win2003(32位),mysql版本——5.0.51b,内網IP——192.168.120.123

    從資料庫環境(二):實體機,作業系統——win7(32位),mysql版本——5.6.11,内網IP——192.168.1.101

    主資料庫與從(二)連結同一個無線網絡,從(一)的網絡模式為nat。

    具體配置過程:

    首先配置主資料庫,主資料庫必須要配置的隻有兩項server-id和log-bin,低版本的mysql沒有這兩項,需要手動書寫,在配置檔案中找到[mysqld],在下面書寫該選項即可

[mysqld]
  server-id=1
  log-bin=mysql-bin           

    然後我們需要在主資料庫中為從資料庫建立連接配接使用者,為了保證安全,我們需要對該使用者進行權限和連接配接的主機進行限制,具體指令如下 

從(一)資料庫

mysql>grant replication slave on *.* to 'slave1'@'192.168.1.103' identified by '123456'           

從(二)資料庫    

mysql>grant replication slave on *.* to 'slave2'@'192.168.1.101' identified by '123456'           

配置完成後重新開機mysql。

如果無法登陸

mysql> flush privileges;           

    如果細心的朋友可能會發現,為什麼從(一)中連結主機的時候使用的IP是主環境的IP(192.168.1.103),而非從(一)的IP(192.168.120.123)呢,具體原因小編并不是十厘清楚,但是有一點可以肯定的是,使用從(一)的IP的時候,在從(一)中連結主資料庫是不能連結成功的,可能原因或許跟虛拟機nat的連結方式有關系吧,這裡就不做深入研究了,我們隻要知道當你使用虛拟機nat方式連結的時候,grant的時候主機設定為主資料庫IP即可。如果兩者皆為實體機的時候,例如主環境和從(二),那麼設定主機的時候需要設定為從(二)的IP。

    接着就是從資料庫的配置了,我們先從從(一)資料庫看起,從(一)資料庫也是低版本的,是以可以直接在mysql的配置檔案中書寫相關參數

[mysqld]
  server-id=2
  master-host=192.168.1.103
  master-user=slave1
  master-password=123456           

配置完成後重新開機mysql即可。

    對于超過5.1.17版本的mysql配置檔案中不在支援master相關參數了,我們隻需要在配置檔案中書寫或者更改server-id,然後在指令行中配置master相關選項

[mysqld]
server-id=3           
mysql>change master to master_host='192.168.1.103',master_user='slave2',master_password='123456';           
mysql>start slave;           

    完成之後我們就可以在主庫中建立一個資料庫和資料表,并插入資料,然後我們就可以在從庫中找到相關資料了,至此主從配置算是告一段落了。關于mysql的主從配置,小編隻是書寫能夠使主從資料庫生效的簡單配置項,如果想要更進一步對主從資料庫進行配置,可以百度mysql主從配置相關,小編如果有時間深入研究該問題的話也會及時書寫出來。

    特别說明:

   如果主庫中已經存在從庫中沒有的資料庫或者資料表,那麼主庫在操作這些資料表或者資料表的時候,主從同步會出現問題,此時我們可以對主庫進行讀鎖定,把相關資料備份一份至從庫,也可以在配置檔案中使用binlog-ignore-db(主庫使用)或者replicate-ignore-db(從庫使用)來忽略那些會影響主從同步的資料庫操作,關于如何使用這些參數,使用之後的效果,以及使用之後會帶來哪些問題,本文将不再複述,有興趣的朋友可以自行百度,或者等小編抽空整理出來相關文章。

    配置過程中可能遇到的問題:

    1.配置主資料庫和從(一)資料庫的時候,遇到"ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO",查找了相關很多文章,終于找到了一個和小編遇到的問題類似的,就是server-id的問題,從資料庫在mysql配置檔案中設定的server-id明明是2,但是你在連接配接資料庫檢視的時候卻變為了0,導緻start slave無法執行的問題,臨時解決辦法就是set global server_id = 2,設定完成後再次執行start slave即可,但是當你重新開機從(一)資料庫的時候,server_id又會變為0,對于此問題小編沒有深入研究,最後重裝mysql後此問題再無出現。

    2.由于從(一)使用的是低版本的mysql,是以可以直接在配置檔案中書寫master-host等相關資料,但是運用到從(二)就不行了,經過百度,原來mysql從5.1.17版本之後就不在支援配置檔案中書寫master-host參數,隻能通過change master to來設定從資料庫。

    3.在給虛拟機的從(一)資料庫建立使用者的時候(grant)的時候,設定的IP為192.168.120.123的時候無法連結主資料庫的mysql,隻有設定為192.168.1.103(主資料庫IP)的時候才能正常連結,如果使用虛拟機并且以nat方式連結網絡的時候需要注意下。

    4.低版本的mysql配置檔案中沒有server-id,我們需要手動書寫,但是高版本的配置檔案中有server-id,并且已經打開,我們隻需要更改其中的數值即可,不用再自行書寫,如果一個配置檔案中出現兩個不同值的server-id是否會出現問題,小編未進行測試,為了避免出錯,再書寫server-id的時候首先檢視配置檔案中是否存在該選項,再進行處理。

繼續閱讀