mysql 主從配置詳解

  你們好,原本說一週寫一篇的,上週和無良二房東大吵一頓;月底要被轟走了;因此苦逼的我滿杭州市找我可以負擔的了的房子;言歸正傳,mysql主從配置但是坑苦了我,因此我想把我遇到的全部問題都悉數寫下來,但願可以幫到一些朋友,而且爲我之後不時之需 

1:設置mysql主從配置的優勢:
   1.一、解決web應用系統,數據庫出現的性能瓶頸,採用數據庫集羣的方式來實現查詢負載;一個系統中數據庫的查詢操做比更新操做要多得多,經過多臺查詢服務器將 數據庫的查詢分擔到不一樣的查詢服務器上從而提升查詢效率。

   1.二、Mysql數據庫支持數據庫的主從複製功能,使用主數據庫進行數據的插入、刪除與更新操做,而從數據庫則專門用來進行數據查詢操做,這樣能夠將更新操做和 查詢操做分擔到不一樣的數據庫上,從而提升了查詢效率。
html

2:主從配置的原理:
主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌能夠記錄發送到從服務器的更新。當一個從服務器鏈接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,而後封鎖並等待主服務器通知新的更新。MySQL複製基於主服務器在二進制日誌中跟蹤全部對數據庫的更改(更新、刪除等等)。所以,要進行復制,必須在主服務器上啓用二進制日誌。每一個從服務器從主服務器接收主服務器已經記錄到其二進制日誌的保存的更新,以便從服務器能夠對其數據拷貝執行相同的更新。從服務器設置爲複製主服務器的數據後,它鏈接主服務器並等待更新過程。若是主服務器失敗,或者從服務器失去與主服務器之間的鏈接,從服務器保持按期嘗試連 接,直到它可以繼續幀聽更新。由--master-connect-retry選項控制重試間隔。 默認爲60秒。
   每一個從服務器跟蹤複製時間。主服務器不知道有多少個從服務器或在某一時刻有哪些被更新了。

3:MySql複製的基本過程:
    3.一、Slave 上面的IO線程鏈接上 Master,並請求從指定日誌文件的指定位置(或者從最開始的日誌)以後的日誌內容;
    3.二、Master 接收到來自 Slave 的 IO 線程的請求後,經過負責複製的 IO線程根據請求信息讀取指定日誌指定位置以後的日誌信息,返回給 Slave 端的 IO線程。返回信息中除了日誌所包含的信息之外,還包括本次返回的信息在 Master 端的 Binary Log 文件的名稱以及在 BinaryLog 中的位置;
    3.三、Slave 的 IO 線程接收到信息後,將接收到的日誌內容依次寫入到 Slave 端的RelayLog文件(mysql-relay-lin.xxxxxx)的最末端,並將讀取到的Master端的bin-log的文件名和位置記錄到 master-info文件中,以便在下一次讀取的時候可以清楚的高速Master「我須要從某個bin-log的哪一個位置開始日後的日誌內容,請發給 我」
    3.四、Slave 的 SQL 線程檢測到 Relay Log 中新增長了內容後,會立刻解析該 Log 文件中的內容成爲在 Master端真實執行時候的那些可執行的 Query 語句,並在自身執行這些 Query。這樣,實際上就是在 Master 端和 Slave端執行了一樣的 Query,因此兩端的數據是徹底同樣的。 mysql

4:實現主從配置過程:
   
    我所作的應用場景是跨操做系統的測試,結果代表跨操做系統是能夠完成數據庫主從配置的;主數據庫(VMware虛擬機),從數據庫就是本機(win7);

    4.1:主數據庫mysql(linux): linux

MySQL-server下載:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.16-1.el6.i686.rpm MySQL-client下載:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.16-1.el6.x86_64.rpm

安裝過程請點這裏http://www.cnblogs.com/sunson/articles/2172086.html(版本雖然不一樣,可是基本的步驟仍是同樣的)   web

從數據庫mysql(win7):由於是免安裝版,解壓以後就可使用了,具體使用後文講解; sql

windows下載mysql(免安裝版):http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16-winx64.zip

    這裏有一點要特別的聲明:從數據庫版本必定要高於等於主數據庫的版本 數據庫

    4.2:主數據庫配置:
        若是是按照以上步驟安裝的話;它的配置文件基本上是與mysql平級的;按道理來講是在/etc/目錄下才是,這個我也不是很懂;你能夠找到my.cnf(find \ |grep my.cnf);進行相應的配置(配置完後服務要重啓 service mysql restart):

[msqld]

server-id=1 //服務器ID不能重複 log_bin=mysql-bin //須要作主從備份的文件名字,存在於安裝目錄/var/lib/mysql/mysql-bin.xxxxxx; binlog-do-db=test1 //這是你須要主從數據同步的數據庫,能夠配多個;

當你登錄的時候mysql -uroot -p;讓你輸入密碼的時候,你可能有點慌了;且點擊這裏http://lxsym.blog.51cto.com/1364623/477027中的第三個辦法挺有效的,反正我是經過第三個方法從新設置滴;
由於主數據庫是VMware;因此你的虛擬機network connnection應該使用bridged;只有這樣,你才能訪問到Vmware的網絡(以前用的是NAT方式,結果主機和虛擬機的網絡都不在一個網段裏,耗費我很多時間);
        1:經過用戶名、密碼登錄mysql;
        2:建立遠程登錄用戶並受權;讓你的從服務器可以遠程鏈接而且進行復制數據庫文件,詳情請點擊這裏http://blog.chinaunix.net/uid-28458801-id-3445261.html
        3:建立你所需同步的數據庫,我這邊測試的時候數據庫是test1;最後經過show master status;查看主服務器配的狀態;詳情請點擊這裏http://www.cnblogs.com/xjdata/archive/2011/10/26/2224674.html


從數據庫配置:
    1.將壓縮包解壓到你想存放mysql的位置;如:E:\tools_package\mysql-5.6.16-winx64;將E:\tools_package\mysql-5.6.16-winx64\bin配在win7系統的path全局變量,在任何目錄下都能使用mysql命令;
    2.經過以下命令啓動mysql服務:

mysqld --install    //mysqld服務進行安裝;
net start mysql     //啓動mysql服務;

這裏面有太多須要注意的了 windows

:1.mysqld服務安裝的時候須要用管理員的身份進行安裝;在開始欄裏填入cmd,先不急着敲回車。看到右鍵就能看到管理員身份運行; 安全

2.當登錄的時候重置密碼: 服務器

切記:將現有的服務關掉net stop mysql(管理員身份運行);
mysqld --skip-grant-table     //以安全模式登錄(不用切入管理員身份運行)

安全模式進入以後,可能會很長一段時間停留在那;不用關掉,從新啓動一個dos: 網絡

mysql -uroot -p  
//登錄命令,緊接着仍是會讓你填入密碼,你只須要按入回車鍵就可以登錄了。   

use mysql;           
//進入mysql數據庫

//更換密碼
update user set password = password("新密碼") where user = "root";
­
FLUSH PRIVILEGES;   
//刷新MySQL的系統權限相關表,不然會出現拒絕訪問,還有一種方法,就是從新啓動mysql服務器,來使新設置生效。 

quit;                   //退出;

退出以後,你要進入啓動管理器看下進程中會有mysqld.exe。將其結束;

以後就是從配置的根本:查看存放mysql目錄;會看到my-default.ini;將其copy一份;進行修改:

# The following options will be passed to all MySQL clients
[client]
#password	= your_password
port		= 3306

[mysql]
#設置mysql客戶端的字符集
default-character-set = utf8

# The MySQL server
[mysqld]
server-id=2      //從服務器配置的服務器id;不能與主服務器id相沖突

port = 3306   //服務端口號;

replicate-do-db=test1  //同步本地test1數據庫

#設置mysql的安裝目錄
basedir="E:/tools_package/mysql-5.6.16-winx64/"
#設置mysql數據庫的數據存放目錄,必須是data或者\xxx-data
datadir="E:/tools_package/mysql-5.6.16-winx64/data/"
#設置服務器段的字符集
character_set_server = utf8

將其剪切到C:\Windows目錄下;由於服務啓動的時候會在這個目錄下讀my.ini配置,這樣設的server-id等等纔能有效(由於這個問題浪費了我一下午的美好時光);
mysql服務重啓 ;
最後dos命令登錄mysql數據庫;開啓從線程;

mysql -uroot -p            //登錄mysql

change master to master_host='192.168.xxx.xxx', master_user='root', master_password='654321',master_log_pos=0,master_log_file='mysql-bin.000001';

master_host:主數據庫的ip;
master_port:端口號;(若是默認3306的話不須要指定);
mstart_user:登錄主服務器mysql用戶;
master_password:登錄主服務器mysql密碼;
master_log_pos:從主數據庫複製文件的第幾個位置進行復制;
master_log_file:主服務器中的數據庫複製文件;
start slave;           //顯示有ok就說明對了

show slave status\G;   //顯示從服務器和主服務器相對應的關係;
顯示slave_IO_Running和Slave_SQL_Running都是yes就說明你的主從配置已經成功了;不然你還得繼續努力哦

        花了一夜時間寫了這麼一篇博客。這個時候寫博客對如今的我來講確實有點耗費時間;可是我仍是會繼續努力的;但願對你們有幫助。且大神多多指教;(格式有點亂,後面的寫的都有點亂了。。有點疲勞了。睡覺覺;有問題之後再改)

相關文章
相關標籤/搜索