乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MySQL主從數(shù)據(jù)庫(kù)同步_

       憂郁_小剛 2011-04-13

      MySQL主從數(shù)據(jù)庫(kù)同步

      (2009-09-22 10:08:32)

      概述

          在做web應(yīng)用系統(tǒng)中,如果數(shù)據(jù)庫(kù)出現(xiàn)了性能瓶頸,而你又是使用的MySQL數(shù)據(jù)庫(kù),那么就可以考慮采用數(shù)據(jù)庫(kù)集群的方式來(lái)實(shí)現(xiàn)查詢負(fù)載了。因?yàn)橐话銇?lái)講一個(gè)系統(tǒng)中數(shù)據(jù)庫(kù)的查詢操作比更新操作要多的多,因此通過(guò)多臺(tái)查詢服務(wù)器將數(shù)據(jù)庫(kù)的查詢分擔(dān)到不同的查詢數(shù)據(jù)庫(kù)從而提高數(shù)據(jù)庫(kù)的查詢效率。


          MySQL數(shù)據(jù)庫(kù)支持?jǐn)?shù)據(jù)庫(kù)的主從復(fù)制功能,使用主數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的插入、刪除與更新操作,而從數(shù)據(jù)庫(kù)則專門(mén)用來(lái)進(jìn)行數(shù)據(jù)庫(kù)查詢,從數(shù)據(jù)庫(kù)還可以建立多臺(tái),通過(guò)負(fù)載均衡來(lái)實(shí)現(xiàn)查詢,這樣就可以將更新操作與查詢操作分離到不同的數(shù)據(jù)庫(kù)上,從而提高查詢的效率,降低系統(tǒng)的負(fù)載。


      配置

      一、主數(shù)據(jù)庫(kù)配置

          修改mysql的配置文件(對(duì)于windows就是MySQL安裝目錄下的my.ini文件,對(duì)于linux通常就

      是 /etc/my.cnf文件),在配置文件中加入(或修改)

          server-id = 1
          log-bin=mysql-bin

          binlog-do-db=dbname --要同步的數(shù)據(jù)庫(kù)名稱

          binlog-ignore-db=dbname --不要同步的數(shù)據(jù)庫(kù)名稱

          注:MySQL進(jìn)行主從復(fù)制是通過(guò)二進(jìn)制的日志文件來(lái)進(jìn)行,所以我們必須開(kāi)啟MySQL的日志功能,即我們上面的log-bin,同時(shí)每一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器都需要指定一個(gè)唯一的server-id,通常主數(shù)據(jù)庫(kù)服務(wù)器我們指定為1。

          給主數(shù)據(jù)庫(kù)授予一個(gè)可以進(jìn)行復(fù)制的用戶,如下:

          grant replication slave on *.* to repuser@'host' identified by '123456';

          replication slave——MySQL數(shù)據(jù)庫(kù)中表示復(fù)制的權(quán)限名稱

          repuser——從數(shù)據(jù)庫(kù)服務(wù)器登陸到主數(shù)據(jù)庫(kù)服務(wù)器時(shí)用到的用戶名稱

          host——從數(shù)據(jù)庫(kù)IP地址

          123456——登陸密碼

          如果上述權(quán)限設(shè)置后,無(wú)法同步,可將其改為

          grant select,insert,update,delete,replication slave on *.* to repuser@'10.20.20.167' identified by '123456';

          配置完上述步驟后,就可以啟動(dòng)主數(shù)據(jù)庫(kù)了。

       

      二、從數(shù)據(jù)庫(kù)配置

          修改配置文件

           server-id=2
           log-bin=mysql-bin     --在從服務(wù)器上啟動(dòng)日志記錄,不是必須,但是官方建議
           master-host=主機(jī)      --主數(shù)據(jù)庫(kù)服務(wù)器的IP地址
           master-user=用戶名    --執(zhí)行復(fù)制的用戶名稱,就是grant的用戶,即repuser
           master-password=密碼  --復(fù)制用戶的密碼,就是grant的用戶密碼,即123456
           master-port=端口      --主數(shù)據(jù)庫(kù)服務(wù)器的端口,默認(rèn)是3306

           replicate-do-db=dbname  --需要同步的數(shù)據(jù)庫(kù)

           #replicate-ignore-db=dbname --不需要同步的數(shù)據(jù)庫(kù)

           現(xiàn)在可以重啟從數(shù)據(jù)庫(kù),啟動(dòng)后,還需要啟動(dòng)復(fù)制線程

           slave start

           查看復(fù)制線程的狀態(tài)

           show slave status;

           我們還可以在從數(shù)據(jù)庫(kù)服務(wù)器上動(dòng)態(tài)的改變對(duì)主數(shù)據(jù)庫(kù)的配置信息,通過(guò)如下命令來(lái)進(jìn)行:
           CHANGE MASTER TO MASTER_HOST='主數(shù)據(jù)庫(kù)服務(wù)器的IP地址',MASTER_PORT=3306,MASTER_USER='主數(shù)據(jù)庫(kù)上的復(fù)制賬號(hào)',MASTER_PASSWORD='密碼';

       

      三、啟動(dòng)與監(jiān)控

          1、監(jiān)控主數(shù)據(jù)庫(kù)服務(wù)器

              show master status; --運(yùn)行于主數(shù)據(jù)庫(kù)

      +------------------+----------+--------------+------------------+
      | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
      +------------------+----------+--------------+------------------+
      |
      mysql-bin.000003   370558                              |
      +------------------+----------+--------------+------------------+
      1 row in set (0.00 sec)

             其中File是表示日志記錄的文件,而Position則是表示當(dāng)前日志在文件中的位置,這個(gè)也是從數(shù)據(jù)庫(kù)服務(wù)器上執(zhí)行復(fù)制操作必須的標(biāo)識(shí),后面的兩個(gè)字段分別表示要記錄的數(shù)據(jù)庫(kù)名稱和不需要記錄的數(shù)據(jù)庫(kù)名稱,我們也可以在配置文件中進(jìn)行配置。

           2、監(jiān)控從數(shù)據(jù)庫(kù)服務(wù)器
              show slave status; --運(yùn)行于從數(shù)據(jù)庫(kù)

      +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
      | Slave_IO_State                   | Master_Host   | Master_User | Master_Port | Connect_Retry | Master_Log_File  | Read_Master_Log_Pos | Relay_Log_File        | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |
      +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
      | Waiting for master to send event | 10.20.20.194 | repuser           3306 |            60 |
      mysql-bin.000003              370558 | WEB2-relay-bin.000206 |         12251 | mysql-bin.000003      | Yes              | Yes                                                                                                                                                   0 |                      0 |              370558 |           12251 | None                                     0 | No                                                                                                                      0 |
      +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
      1 row in set (0.00 sec)

             紅色的部分,分別表示的是Master_Log_File和Read_Master_Log_Pos,即主數(shù)據(jù)庫(kù)服務(wù)器上的日志文件和要讀取的主數(shù)據(jù)庫(kù)服務(wù)器上的日志的位置,通常這個(gè)Read_Master_Log_Pos是和主數(shù)據(jù)庫(kù)服務(wù)器上的Position是一致的(同步以后),如果從數(shù)據(jù)庫(kù)服務(wù)器還沒(méi)有同步完畢,那么這個(gè)值通常比主數(shù)據(jù)庫(kù)服務(wù)器上的要小。

             :如果從數(shù)據(jù)庫(kù)服務(wù)器在同步的過(guò)程中出現(xiàn)了問(wèn)題,那么我們可以通過(guò)reset slave來(lái)重置從數(shù)據(jù)庫(kù)服務(wù)器的復(fù)制線程。

             從數(shù)據(jù)庫(kù)常用命令:

      Slave start; --啟動(dòng)復(fù)制線程
      Slave stop; --停止復(fù)制線程
      Reset slave; --重置復(fù)制線程
      Show slave status; --顯示復(fù)制線程的狀態(tài)

      Show slave status\G; --顯示復(fù)制線程的狀態(tài)(分行顯示)

      Show master status\G; --顯示主數(shù)據(jù)庫(kù)的狀態(tài)(分行顯示)

      Show master logs --顯示主數(shù)據(jù)庫(kù)日志,需在主數(shù)據(jù)庫(kù)上運(yùn)行
      Change master to; --動(dòng)態(tài)改變到主數(shù)據(jù)庫(kù)的配置

      Show processlist --顯示有哪些線程在運(yùn)行

       

      四、常見(jiàn)問(wèn)題與解答

          1、現(xiàn)象:修改完配置后,重啟mysql,提示MySQL manager or server PID file could not be found
             解決:查找進(jìn)程中的mysql,kill掉
                   > service mysql restart
                   > ps -aux|grep myslq
                   > kill 進(jìn)程號(hào)
                   # service mysql start

               :mysql.sock文件在mysql啟動(dòng)后才會(huì)生成,位置為/tmp下或/var/lib/mysql/下

          2、現(xiàn)象:從數(shù)據(jù)庫(kù)無(wú)法同步,show slave status顯示Slave_SQL_Running為No,Seconds_Behind_Master為null

             原因:a.程序可能在slave上進(jìn)行了寫(xiě)操作

                   b.也可能是slave機(jī)器重起后,事務(wù)回滾造成的.
             解決:方法一:

                           mysql> slave stop;
                           mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
                           mysql> slave start;

                   方法二:slave stop; --停掉slave服務(wù)

                           進(jìn)入master

                           mysql> show master status;
                           +----------------------+----------+--------------+------------------+
                           | File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |
                           +----------------------+----------+--------------+------------------+
                           | mysql-bin.000040     | 324                                   |
                           +----------------------+----------+--------------+------------------+
                           然后到slave服務(wù)器上執(zhí)行手動(dòng)同步

                           mysql> change master to 
                           > master_host='10.20.20.194',
                           > master_user='repuser',
                           > master_password='123456',
                           > master_port=3306,
                           > master_log_file='mysql-bin.000040',

                          master_log_pos=324;

                        啟動(dòng)slave服務(wù)

                           mysql> slave start;

                           通過(guò)show slave status查看Slave_SQL_Running為Yes,Seconds_Behind_Master為0,即為正常。

                           :手動(dòng)同步需要停止master的寫(xiě)操作!

          3、現(xiàn)象:從數(shù)據(jù)庫(kù)無(wú)法同步,show slave status顯示Slave_IO_Running為No,Seconds_Behind_Master為null

             解決:重啟主數(shù)據(jù)庫(kù)

                   service mysql restart

                   mysql> show master status;
      +------------------+----------+--------------+------------------+
      | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
      +------------------+----------+--------------+------------------+
      | mysql-bin.000001 |       98 |                              |
      +------------------+----------+--------------+------------------+
                  mysql> slave stop;
                  mysql> change master to Master_Log_File='mysql-bin.000001',Master_Log_Pos=98
                  mysql> slave start;

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多