久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

 憂郁_小剛 2011-04-13

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

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

概述

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


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


配置

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

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

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

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

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

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

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

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

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

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

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

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

    123456——登陸密碼

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

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

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

 

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

    修改配置文件

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

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

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

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

     slave start

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

     show slave status;

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

 

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

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

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

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

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

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

+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-----------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| 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ù)庫服務(wù)器上的日志文件和要讀取的主數(shù)據(jù)庫服務(wù)器上的日志的位置,,通常這個Read_Master_Log_Pos是和主數(shù)據(jù)庫服務(wù)器上的Position是一致的(同步以后),,如果從數(shù)據(jù)庫服務(wù)器還沒有同步完畢,那么這個值通常比主數(shù)據(jù)庫服務(wù)器上的要小,。

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

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

Slave start; --啟動復(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ù)庫的狀態(tài)(分行顯示)

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

Show processlist --顯示有哪些線程在運行

 

四,、常見問題與解答

    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)程號
             # service mysql start

         :mysql.sock文件在mysql啟動后才會生成,,位置為/tmp下或/var/lib/mysql/下

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

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

             b.也可能是slave機器重起后,,事務(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í)行手動同步

                     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;

                  啟動slave服務(wù)

                     mysql> slave start;

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

                     :手動同步需要停止master的寫操作,!

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

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

             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;

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多