• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 4, comments - 6, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            mysql 雙向備份

            Posted on 2008-06-03 17:08 hongsion 閱讀(677) 評(píng)論(0)  編輯 收藏 引用
                  mysql的雙向備份可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)cluster,從而提高數(shù)據(jù)的可靠性和訪問(wèn)性能。  以下是用mysql5.0.51b實(shí)現(xiàn)雙向備份的一些記錄。
                

            1)從網(wǎng)上下載了一個(gè)非安裝的版本mysql-5.0.51b,然后在192.168.1.10機(jī)器上解壓在E:\mysql目錄下。

             

            2)在E:\mysql下創(chuàng)建一個(gè)my.ini文件,內(nèi)容是從該目錄下面的其他ini復(fù)制而來(lái),然后修改里面的內(nèi)容,主要是設(shè)置路徑。因?yàn)?/span>mysql安裝在E:/mysql下,所以修改如下:

            [mysqld]

            basedir="E:/mysql/"

            datadir="E:/mysql/Data/"

             

            3)修改端口

            為了讓mysql以服務(wù)的形式在windows中運(yùn)行,同時(shí)不和其他已安裝的mysql發(fā)生沖突,所以要修改msyql服務(wù)運(yùn)行的端口,主要修改如下:

            [mysqld]

            port=5306

             

            4)安裝服務(wù)

            windows+R,輸入“cmd”,回車(chē),進(jìn)入window中控制臺(tái)窗口,然后切換到E:\mysql\bin目錄下,運(yùn)行mysqld-nt --install replDb,這樣服務(wù)安裝完成。

             

            5)設(shè)置master

            設(shè)置master的目的主要讓msyql數(shù)據(jù)庫(kù)程序運(yùn)行起來(lái)的時(shí)候在本地產(chǎn)生bin-log,以備slave可以從該log中讀取sql操作,從而保持和master的數(shù)據(jù)同步。主要設(shè)置如下:

            [mysqld]

            log-bin=mysql-bin

            server-id=1

            log-bin設(shè)置的是本地產(chǎn)生的bin-log文件的名字,mysql還會(huì)自動(dòng)產(chǎn)生擴(kuò)展名。server-id用來(lái)標(biāo)識(shí)本數(shù)據(jù)庫(kù)服務(wù)器。只所以需要配置server-id是為了區(qū)分bin-log中那些數(shù)據(jù)的來(lái)源。這樣就可以防止在一個(gè)loop的備份環(huán)境中,數(shù)據(jù)被循環(huán)復(fù)制。比如:AàB, BàC, CàA。假如沒(méi)有這個(gè)server-idA在從C復(fù)制數(shù)據(jù)的時(shí)候,就不知道這些數(shù)據(jù)是C產(chǎn)生的,還是B產(chǎn)生的,還是A自己產(chǎn)生的。如果是BC產(chǎn)生的,A當(dāng)然需要復(fù)制,如果是A自己產(chǎn)生的,當(dāng)然就不需要再?gòu)?fù)制了,不然就無(wú)限循環(huán)下去了。

             保存my.ini文件,這個(gè)時(shí)候運(yùn)行 net start replDb。就會(huì)發(fā)現(xiàn)mysql數(shù)據(jù)庫(kù)程序運(yùn)行之后,會(huì)在E:/mysql/Data/目錄下產(chǎn)生mysql-bin.xxxxxx的日志文件,以備slave訪問(wèn)。

             

            6)創(chuàng)建slave帳戶和權(quán)限

             net start replDb 就會(huì)啟動(dòng)replDb

            slave復(fù)制bin-log內(nèi)容的時(shí)候,需要相應(yīng)的帳號(hào)和訪問(wèn)權(quán)限,因此如下命令:

            Mysql –uroot –port=5306

            由于初始沒(méi)有密碼,因此該命令直接可以訪問(wèn)數(shù)據(jù)庫(kù),如果為了安全起見(jiàn),應(yīng)該設(shè)置root密碼,如下:

                   Grant all on *.* to ‘root’@’localhost’ identified by ‘root’

            這樣root用戶只能在本機(jī)以’root’密碼訪問(wèn)。然后創(chuàng)建slave可以訪問(wèn)的帳戶,運(yùn)行如下語(yǔ)句:

            Grant replication slave on *.* to ‘repl’@’192.168.1.11’ identified by ‘slavepass’;

            這樣192.168.1.11這臺(tái)機(jī)器上的mysql slave就可以以repl用戶名和’slavepass’密碼來(lái)復(fù)制本機(jī)(192.168.1.10)的bin-log中的內(nèi)容了。

             

            7)安裝slave

            192.168.1.11機(jī)器上重復(fù)上面的(1),(2),(3),(4),(5),(6)步驟。

            但是在第(5)步中server-id應(yīng)該設(shè)置成和192.168.1.10機(jī)器不同的值,如下:

            [mysqld]

            log-bin=mysql-bin

            server-id=2

            同時(shí)在第(6)步創(chuàng)建slave帳戶的時(shí)候,ip有所改變,如下:

            Grant replication slave on *.* to ‘repl’@’192.168.1.10’ identified by ‘slavepass’;

             

            8)設(shè)置slave選項(xiàng)

            192.168.1.10my.ini文件中,加入如下內(nèi)容:

            [mysqld]

            master-host=192.168.1.11

            master-port=5306

            master-user=repl

            master-password=slavepass

             

            這個(gè)設(shè)置是告訴192.168.1.10上的mysql服務(wù)器把192.168.1.11:5306作為master,以用戶名repl和密碼slavepass去訪問(wèn)。同樣的在192.168.1.11上如下設(shè)置:

            [mysqld]

            master-host=192.168.1.10

            master-port=5306

            master-user=repl

            master-password=slavepass

             

            然后在192.168.1.10192.168.1.11機(jī)器上都運(yùn)行如下命令

            Net stop replDb

            Net start replDb

            如果不出問(wèn)題,兩臺(tái)機(jī)器上的mysql數(shù)據(jù)應(yīng)該就已經(jīng)處于相互備份的狀態(tài)下了。

            那么如何檢驗(yàn)是否連接成功呢,主要通過(guò)以下命令:

            192.168.1.10機(jī)器上運(yùn)行 mysql –u root –p –port=5306,輸入密碼’root’之后,進(jìn)入mysql操作界面。

            然后輸入show slave status\G 語(yǔ)句

            會(huì)輸出如下:

                
            mysql> SHOW SLAVE STATUS\G
            *************************** 1. row ***************************
            Slave_IO_State: Waiting for master to send event
            Master_Host: master1
            Master_User: root
            Master_Port: 3306
            Connect_Retry: 60
            Master_Log_File: mysql-bin.000004
            Read_Master_Log_Pos: 931
            Relay_Log_File: slave1-relay-bin.000056
            Relay_Log_Pos: 950
            Relay_Master_Log_File: mysql-bin.000004
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            Replicate_Do_DB:
            Replicate_Ignore_DB:
            Replicate_Do_Table:
            Replicate_Ignore_Table:
            Replicate_Wild_Do_Table:
            Replicate_Wild_Ignore_Table:
            Last_Errno: 0
            Last_Error:
            Skip_Counter: 0
            Exec_Master_Log_Pos: 931
            Relay_Log_Space: 1365
            Until_Condition: None
            Until_Log_File:
            Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
            Master_SSL_Cert:
            Master_SSL_Cipher:
            Master_SSL_Key:
            Seconds_Behind_Master: 0
            1 row in set (0.01 sec)

            注意其中的 Slave_IO_Running Slave_SQL_Running,這兩個(gè)指標(biāo)如果是yes表示slave已經(jīng)在工作了,然后再看Last_Error,如果是空的表示一切正常,還有最后一個(gè)Seconds_Behind_Master,這個(gè)指標(biāo)表示slave讀的速度落后原始數(shù)據(jù)多少,正常當(dāng)然是越小越好,太大就表示slave來(lái)不及復(fù)制master的數(shù)據(jù)了。

            到此,設(shè)置運(yùn)行完畢,在測(cè)試的過(guò)程中,我發(fā)現(xiàn)還可以這樣安裝,比如在上面第(6)步結(jié)束之后,可以不用把slave的配置寫(xiě)到文件中,而是可以在不重新啟動(dòng)mysql數(shù)據(jù)庫(kù)的情況下直接通過(guò)運(yùn)行語(yǔ)句來(lái)完成:

            mysql> CHANGE MASTER TO
                ->     MASTER_HOST='192.168.1.10',
                ->     MASTER_USER='repl',
                ->     MASTER_PASSWORD='slavepass',
              ->  MASTER_PORT=5306;

            即先change master,然后運(yùn)行start slave

            然后再運(yùn)行show slave status\G,應(yīng)該也是OK

            有一點(diǎn)需要說(shuō)明的是,這里安裝的時(shí)候是直接用兩個(gè)完全新的數(shù)據(jù)庫(kù),如果在已經(jīng)有數(shù)據(jù)在數(shù)據(jù)庫(kù)中,并且該數(shù)據(jù)庫(kù)是master,這個(gè)時(shí)候想不關(guān)閉master的情況下,加入一個(gè)slave進(jìn)來(lái)的話,就需要參考mysqlreplication一章中的內(nèi)容,其基本過(guò)程是這樣:

            (1)       先鎖定master中的數(shù)據(jù)庫(kù),并把數(shù)據(jù)寫(xiě)到硬盤(pán)。

            mysql> FLUSH TABLES WITH READ LOCK;

            (2)       然后再數(shù)據(jù)鎖定的情況下,用show master status查看bin-log的位置,并記下參數(shù),并備份master中的內(nèi)容。

            (3)       解鎖master數(shù)據(jù)庫(kù)。

            (4)       把備份好的數(shù)據(jù)倒到slave中。

            (5)       slave數(shù)據(jù)庫(kù)中運(yùn)行用change master語(yǔ)句,該語(yǔ)句需要加上master_log_filemaster_log_pos參數(shù)。這兩個(gè)參數(shù)就是在(2)中記下的bin-log參數(shù)。

            (6)       slave 中運(yùn)行 start slave。然后就ok了。

             

             

            通過(guò)上面的闡述可以發(fā)現(xiàn),有兩種方式配置備份,一個(gè)是通過(guò)my.ini,還有一個(gè)是通過(guò)change master語(yǔ)句。其實(shí)當(dāng)數(shù)據(jù)庫(kù)運(yùn)行的時(shí)候,如果發(fā)現(xiàn)my.ini中有master_host等參數(shù),數(shù)據(jù)庫(kù)就把這些信息寫(xiě)到data目錄下的master.info文件中,然后slave啟動(dòng)的時(shí)候就直接從這個(gè)master.info文件中讀取master的信息。而在slave數(shù)據(jù)庫(kù)中運(yùn)行change master語(yǔ)句的時(shí)候,數(shù)據(jù)庫(kù)程序是把那些參數(shù)直接寫(xiě)入master.info文件中。

                   mysql數(shù)據(jù)庫(kù)中,處理邏輯是這樣的,當(dāng)mysql數(shù)據(jù)庫(kù)程序啟動(dòng)的時(shí)候,如果它發(fā)現(xiàn)有master.info數(shù)據(jù)文件存在,那么它不會(huì)去讀my.ini中的相關(guān)配置,而是直接用master.info中的內(nèi)容。如果沒(méi)有master.info存在,它才去讀my.ini中的相關(guān)配置,并且產(chǎn)生一個(gè)master.info文件。所以如果想通過(guò)my.ini來(lái)更改已有的master信息,必須先關(guān)掉mysql數(shù)據(jù)庫(kù),然后刪除master.info文件,然后重新啟動(dòng)。





             

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国内精品久久国产| 亚洲嫩草影院久久精品| 久久久久噜噜噜亚洲熟女综合| 久久不见久久见免费视频7| 久久热这里只有精品在线观看| 精品人妻伦一二三区久久| yellow中文字幕久久网| 久久成人18免费网站| 久久免费大片| 亚洲精品乱码久久久久久蜜桃| 亚洲国产日韩综合久久精品| 久久精品国产欧美日韩99热| 综合久久国产九一剧情麻豆 | 久久精品人人做人人爽电影| 久久精品亚洲中文字幕无码麻豆| 亚洲精品白浆高清久久久久久| 久久精品国产久精国产思思| 国产精品久久久久aaaa| 国内精品久久久久久久coent | 久久久国产打桩机| 久久亚洲私人国产精品vA| 996久久国产精品线观看| 精品国产婷婷久久久| 久久久久国产精品人妻| 国产一级持黄大片99久久| 久久久国产一区二区三区| 精品久久久久成人码免费动漫| 伊人久久综合成人网| 国产精品亚洲美女久久久| 久久天天躁夜夜躁狠狠躁2022| 久久亚洲私人国产精品| 老司机午夜网站国内精品久久久久久久久 | 色8久久人人97超碰香蕉987| Xx性欧美肥妇精品久久久久久| 亚洲国产成人久久综合野外| 99久久中文字幕| 99久久免费国产精品特黄| 久久国产精品久久| 中文无码久久精品| 久久99精品久久久久久水蜜桃 | 蜜臀久久99精品久久久久久|