Mysql主從復制

pfmm 9年前發布 | 10K 次閱讀 MySQL 數據庫服務器

主從復制功能通過在主服務器和從服務器之間切分處理客戶查詢的負荷,可以得到更好的客戶響應時間,

Mysql主從復制的優點如下:

  • 增加健壯性,主服務器出問題,切換到從服務器作為備份。

    </li>

  • 優化響應時間,不要同時在主從服務器上進行更新,可能會引起沖突

    </li>

  • 在從服務器備份過程中,主服務器繼續處理更新

    </li> </ul>

    主從復制工作原理:

    • 主服務器將用戶對數據庫的更新操作以二進制格式保存在 Binary Log 日志文件中,然后由Binlog Dump線程將BinaryLog日志文件傳輸給服務器。

      </li>

    • 從服務器通過I/O線程將主服務器Binary LOG文件中的更新操作復制到一個Relay Log 中繼日志文件

      </li>

    • 從服務器通過SQL線程 將Relay Log 日志文件中的操作依次在本地執行,從而實現主從同步

      </li>


    • </li> </ul>

      主從復制的配置

      1. 確保主服務器的版本不高于從服務器的版本

        </li>

      2. 在主服務器中授予以個連接賬號

        </li> </ol>

        GRANT replication slave ON *.*TO root@'%', //表示要創建用戶名為ROOT的用戶,
        IDENTIFIED BY '110';                        //從服務器連接主服務器的密碼

           3,配置主服務器

            Windows 打開my.ini,Linux 用戶打開my.cnf

        log-bin = mysql-bin
        server-id                //我的Mysql版本是5.5.20 默認已經配置好了

        4,默認配置之后重啟主服務器

        5,運行

        mysql>  SHOW MASTER STATUS;

        Mysql主從復制

        File表示服務器正在使用的 binlog文件(表示從服務器從這個文件中復制),Position 的值與binlog的文件大小相同,表示下一個被記錄事件的位置

        其中Binlog_Do_DB是默認使用哪個數據庫,Binlog_Ignore_DB是忽略掉哪個數據庫

        6,配置從服務器

        從服務器的server_id 是與主服務器不同的

        log-bin = mysql-bin
        server_id = 2
        log_slave_updates = 1 //允許備庫將其重要的事件也記錄到自身的二進制文件中
        read_only             //該選項會阻止任何沒有特權的權限線程修改數據

        7,指定主服務器信息

        CHANGE MASTER TO MASTER_HOST = '192.168.0.10',     //    主服務器的IP地址
        MASTER_USER = 'root',
        MASTER_PASSWORD = '110',
        MASTER_LOG_FILE ='mysql-bin.000002',
        MASTER_LOG_POS = 0;                //從日志的開始位置開始讀

        8,查看是否設置正確

        SHOW SLAVE STATUS\G

          Mysql主從復制

        執行語句
        start slave

        Mysql主從復制

        看到服務器的I/O線程 和SQL線程都已經開始運行

        我們在主服務器中建立一個數據庫        test1 

        Mysql主從復制

        能看到我們的從服務器中也出現了 test1 插入數據等同理

        Mysql主從復制

        錯誤問題   

        當我們從從服務器的MYSQL命令行退出之后

        再次進入到MYSQL 命令行會報錯 這是因為 權限的問題導致的

        Mysql主從復制

        此時我們可以進入 /var/lib/mysql/中 刪除掉  (慎重,刪除之后表就找不回來了

        Mysql主從復制

        sudo /etc/init.d/mysql restart  //重啟MYSQL服務器

        結果發現還是會報錯

        我們進入/var/log/mysql/error.log 中查看錯誤

        Mysql主從復制

        發現我們的端口3306已經被占用了

        netstat -anp|grep 3306            //查看正在使用3306端口的程序
        //找到他的PID
        sudo kill -9 PID             //結束掉進程
        sudo /etc/init.d/mysql restart  //再次重啟MYSQL服務器
        su mysql
        //使用安全模式啟動即可
 本文由用戶 pfmm 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!