<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jojo's blog--快樂憂傷都與你同在
    為夢想而來,為自由而生。 性情若水,風起水興,風息水止,故時而激蕩,時又清平……
    posts - 11,  comments - 30,  trackbacks - 0

    1 首先確定MasterSlave的數據庫版本,Master數據庫的版本不能高于Slave數據的版本。

    這里我是使用MySql 5.0.27 作為Master數據庫,MySql 6.0.3alpha)作為Slave進行測試。

     

    2:首先修改Master數據庫的配置文件my.ini (windows), /etc/my.cnf(linux)

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    bind-address=173.45.243.171 #master server ipadreess
    port=3306
    set-variable = connect_timeout=10
    set-variable = key_buffer_size=50M
    set-variable = thread_cache_size=950
    set-variable = table_cache=4200
    set-variable = max_connect_errors=999999999
    set-variable = max_connections=800
    set-variable = tmp_table_size=10M
    set-variable = wait_timeout=120
    set-variable = max_write_lock_count=120
    set-variable = query_cache_type=1
    set-variable = query_cache_size=50M
    log-slow-queries
    memlock
    skip-innodb
    skip-locking
    skip-name-resolve

    # Try number of CPU's*2 for thread_concurrency
    thread_concurrency=16

    #########################
    # start master settings #
    #########################
    #binlog-do-db=database
    #binlog-ignore-db=db_name
    set-variable = max_binlog_size=10M
    log-bin=/var/log/mysql/mysqlbinlog/pts1-log-bin
    //使用的二進制日志文件名
    log-bin-index=/var/log/mysql/mysqlbinlog/pts1-log-bin.index
    server-id=1
    //服務器編號
    #######################
    # end master settings #
    #######################

    [mysql.server]
    user=mysql

    [mysqld_safe]
    log-error=/var/log/mysql/mysqld.log
    pid-file=/var/log/mysql/mysqld.pid


       Slave數據庫的配置文件my.ini, or  my.cnf里添加server-id

       eg:[mysqld]

            server-id = 2

    (這里需要理解的是Slave本身也是一個獨立的服務器,它作為‘從數據庫’是從它通過‘主服務器’日志更新數據角度上理解的。可以把 server-id 想象成為IP地址:這些ID標識了整個同步組合中的每個服務器。如果沒有指定 server-id 的值,如果也沒定義 master-host,那么它的值就為1,否則為2。注意,如果沒有設定 server-id,那么master就會拒絕所有的slave連接,同時slave也會拒絕連接到master上。)


    整個修改如下:

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    bind-address=173.45.243.96
    #slave server ipadreess
    port=3306
    set-variable = connect_timeout=10
    set-variable = key_buffer_size=50M
    set-variable = thread_cache_size=950
    set-variable = table_cache=4200
    set-variable = max_connect_errors=999999999
    set-variable = max_connections=800
    set-variable = tmp_table_size=10M
    set-variable = wait_timeout=120
    set-variable = max_write_lock_count=120
    set-variable = query_cache_type=1
    set-variable = query_cache_size=50M
    log-slow-queries
    memlock
    skip-innodb
    skip-locking
    skip-name-resolve

    # Try number of CPU's*2 for thread_concurrency
    thread_concurrency=16

    #########################
    # start master settings #
    #########################
    #set-variable = max_binlog_size=10M
    #log-bin=/var/log/mysql/mysqlbinlog/pts2-log-bin
    #log-bin-index=/var/log/mysql/mysqlbinlog/pts2.index
    #server-id=1
    #######################
    # end master settings #
    #######################

    #########################
    # start slave settings #
    #########################
    relay-log-space-limit=50M
    set-variable = max-relay-log-size=10M
    set-variable = report-host=173.45.243.96:3306
    master-host=173.45.243.171
    master-user=repl
    master-password=repl12
    master-port=3306
    master-connect-retry=60
    server-id=1562
    #replicate-do-db=test #let slave only do test db's update
    #######################
    # end slave settings #
    #######################

    [mysql.server]
    user=mysql

    [mysqld_safe]
    log-error=/var/log/mysql/mysqld.log
    pid-file=/var/log/mysql/mysqld.pid

     

    3:修改配置后啟動Master數據服務。在Master數據庫上建立一個用戶,用于Slave數據連接以便同步數據。一般來說Slave數據只用于同步數據,所以我們在建立這個用戶時只授予它REPLICATION SLAVE 權限。

      eg: GRANT REPLICATION SLAVE ON *.* TO 'repl'@173.45.243.96 IDENTIFIED BY ‘repl12’;

     

    4:在Master數據庫上執行 FLUSH TABLES WITH READ LOCK; 命令以刷新數據并阻止對Master數據的寫入操作。然后將Master數據的data目錄復制一份覆蓋Slave數據庫的data目錄,這樣MasterSlaver就有了相同的數據庫了。在復制時可能不需要同步 mysql 數據庫,因為在slave上的權限表和master不一樣。這時,復制的時候要排除它。同時不能包含任何`master.info~ `relay-log.info` 文件。覆蓋好后執行 UNLOCK TABLES; 釋放鎖定。

     

    5:在Master數據庫上執行SHOW MASTER STATUS; 查看當前Master數據庫上的一些我們將要使用的信息:

     

    File 表示 Master用于記錄更新數據操作的日志文件,Position 表示當前日志的記錄位置,這也是Slave 需要開始同步數據的位置。

     

    6:啟動Slave數據庫 執行:(這點連接Master數據庫所要的參數)

    mysql> stop slave;

    mysql> CHANGE MASTER TO

        ->  MASTER_HOST='173.45.243.171',  //Master服務器地址(if是在本機上安裝兩個數據庫的, 則用127.0.0.1)

        ->  MASTER_USER='slaver,  //Slave服務器更新時連接Master使用的用戶名

        ->  MASTER_PASSWORD='slaver',  // Slave服務器更新時連接Master使用的密碼

        ->  MASTER_LOG_FILE='mysql-bin.000004', //更新操作日志

        ->  MASTER_LOG_POS=837016;   //同步數據的開始位置

     

    上面命令執行完畢后,執行START SLAVE; 命令啟動數據更新。在Slave 數據庫上執行:

    SHOW SLAVE STATUS; 查看從數據跟主數據庫的連接狀態是否正常,如果顯示的信息中

    Slave-IO-Running Slave_SQL_Running 值為 yes,表示用于數據同步的 io線程和sql操作線程已經成功啟動。

    eg:

    mysql> show slave status;
    +----------------------------------+----------------+-------------+-------------+---------------+---------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
    | 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 | 173.45.243.171 | root        |        3306 |            60 | pts1-log-bin.000005 |                 839 | mysqld-relay-bin.000005 |           979 | pts1-log-bin.000005   | Yes              | Yes               |                 |                     |                    |                        |                         |                             |          0 |            |            0 |                 839 |             979 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                     0 |
    +----------------------------------+----------------+-------------+-------------+---------------+---------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
    1 row in set (0.00 sec)


    一般情況下,重新啟動SLAVE的MYSQL就可以了。

    如果Slave-IO-Running=No,  重新啟動MASTER和SLAVE的MYSQL再試一下。

     

    7:到此已經建立MasterSlave數據庫的同步了。你可以在Master數據庫上更新一個表的數據,然后查看Slave數據庫上對應表是否做了相應的更改。

    注: slave開始同步后,就能在數據文件目錄下找到2個文件 `master.info` `relay-log.info`slave利用這2個文件來跟蹤處理了多少master的二進制日志。master.info 記錄了slave 連接master進行數據同步的參數,relay-log.info 記錄了slave進行數據更新使用的中續日志的的信息。

    Master 與 Slave 數據同步后對性能進行粗略的測試:

    (1). 在Master數據庫上建立一個新的數據庫testdata,并建立表testdata。建立腳本如下

    CREATE DATABASE `testdata` /*!40100 DEFAULT CHARACTER SET utf8 */;

    DROP TABLE IF EXISTS `testdata`.`testms`;
    CREATE TABLE  `testdata`.`testms` (
      `name` 
    text NOT NULL
    ) ENGINE
    =InnoDB DEFAULT CHARSET=utf8;
    注意:由于上面我們建立的Master和Slave之間的數據同步是針對所有數據庫的,所以當你在Master上建立數據庫和表后,Slave 上自動也會建立對應的數據庫和表,如果發現Slave上沒有對應的數據庫和表則必須檢查是否Master和Slave是否正常同步數據。

     

    (2). 測試代碼如下(Java):

    分別調用兩個不同的方法,進行兩種類型的測試



    package com.ckcs.test;
    /**/

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    /** */
    public class TestMS ...

     

    (3).測試所得數據:

    1)測試數據比較

    注: 查詢數據次數為 100000; 插入數據次數為1000

                  測試

    類型

    測試次數

    用時

      Master數據庫進行插入和查詢操作

    Master數據庫進行插入操作,對Slave數據庫進行查詢操作

     插入

    查詢

      插入

     查詢

      第一次用時

    63141

    18172

    66078

    10656

      第二次用時

    67875

    20109

    68969

    11860

      第三次用時

    65796

    18265

    65672

    10906

      平均用時

    65604

    18848

    66906

    11140

                                          (測試數據統計表)

    雖然數據測試是很粗糙的,但確實反映出性能的一定改善。

    posted on 2009-02-12 15:51 Blog of JoJo 閱讀(752) 評論(2)  編輯  收藏 所屬分類: Linux 技術相關

    FeedBack:
    # re: 在MySql上實現Replication(Master 與 Slave 數據同步)
    2009-02-24 16:42 | Blog of JoJo
    Re: Could not initialize master info structure, more error messages can be found in the MySQL error log

    Login to mysql, then perform these steps:
    1.)mysql> reset slave;
    2.)mysql> start slave;

    Done.

    http://forums.mysql.com/read.php?26,163227,220616#msg-220616  回復  更多評論
      
    # re: 在MySql上實現Replication(Master 與 Slave 數據同步)
    2009-05-21 18:51 | Blog of JoJo
    By the way, if still can not work, pls note to stop iptable
    /etc/init.d/iptables stop

    vi /etc/selinux/config

    #SELINUX=enforcing
    SELINUX=disabled  回復  更多評論
      

    <2009年2月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    1234567

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    相冊

    收藏夾

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 最近免费字幕中文大全| 九九精品国产亚洲AV日韩| 野花香高清在线观看视频播放免费| 成人免费无码大片A毛片抽搐 | 亚洲精品中文字幕| 成年美女黄网站18禁免费| 亚洲日本乱码卡2卡3卡新区| 中文字幕av无码无卡免费| 亚洲香蕉在线观看| 天堂在线免费观看中文版| 欧美最猛性xxxxx免费| 亚洲午夜电影在线观看高清| 全免费毛片在线播放| 亚洲欧美日韩中文字幕一区二区三区| 真人做A免费观看| 亚洲乱码在线卡一卡二卡新区| 丁香花免费完整高清观看| 亚洲成AV人片高潮喷水| 亚洲国产综合人成综合网站| 一本到卡二卡三卡免费高| 国产成人A人亚洲精品无码| 999久久久免费精品播放| 亚洲天堂2016| 亚洲精品人成无码中文毛片| 成人免费777777被爆出| 久久精品国产亚洲精品2020| 全免费a级毛片免费**视频| 成人免费网站视频www| 亚洲大片在线观看| 美女被免费网站91色| 亚洲av永久无码精品秋霞电影影院| 你懂得的在线观看免费视频| 亚洲精品一区二区三区四区乱码 | 亚洲不卡中文字幕| 国产精品久免费的黄网站 | 亚洲字幕AV一区二区三区四区| 国产福利免费观看| 久久免费精品一区二区| 亚洲日韩亚洲另类激情文学| 亚洲无码黄色网址| 台湾一级毛片永久免费|