MySQL主從複製認識及實施操做

  • MySQL主從複製做用
    1)、什麼是MySQL主從複製
    MySQL主從複製是指數據能夠從一個MySQL數據庫服務器主節點複製到一個或多個MySQL數據庫從節點。MySQL默認採用異步複製方式,這樣從節點不用一直訪問主服務器來更新本身的數據,數據的更新能夠在遠程鏈接上進行,從節點能夠複製主數據庫中的全部數據庫或者特定的數據庫。MySQL5.7版開始支持並行複製(MTS),做爲一新特性,所以主從複製延遲問題將獲得極大的改進。
    2)、MySQL主從複製做用
    1、數據熱備
    做爲備數據庫,當主數據庫服務器發生故障後,可切換到從數據庫繼續工做,避免數據丟失。
    2、讀寫分離
    可支持MySQL數據庫服務器支持更大的併發。數據讀寫操做可分配在不一樣的服務器間進行。如操做報表中尤爲重要,因爲部分報表SQL語句很是的慢,會致使鎖表,影響前臺服務。使用主從複製,前臺使用master,負責寫,報表使用slave,負責讀,那麼報表SQL將不會形成前臺鎖表,保證了前臺正常運行。
    3、架構擴展
    隨着業務量愈來愈大,I/O訪問頻率太高,單機可能沒法知足。此時作多庫的存儲,如一主多從方式,以下降磁盤I/O訪問,提升單個機器的I/O性能。
  • MySQL主從複製原理
    MySQL數據複製的基礎是二進制日誌文件(binary log file)。一臺MySQL數據庫一旦啓用二進制日誌後,其做爲master節點,數據庫中全部操做都會以「事件」的方式記錄在二進制日誌中,其餘數據庫做爲slave經過一個I/O線程與主服務器保持通訊,並監控master的二進制日誌文件的變化,如發現master二進制日誌文件發生變化,則會把變化複製到本身的中繼日誌中,而後slave的一個SQL線程會把相關的「事件」執行到本身的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了主從複製。
    MySQL主從複製認識及實施操做
    總結以下:
    1)、master將操做語句記錄到binlog日誌中,而後授予slave遠程鏈接的權限(master上建立受權的用戶,開啓binlog二進制日誌功能;一般爲了數據安全考慮,slave也開啓binlog功能)。
    2)、slave開啓兩個線程:IO線程和SQL線程。IO線程負責讀取master的binlog內容到中繼日誌relay log裏;SQL線程負責從relay log日誌裏讀出binlog內容,並更新到slave的數據庫裏,這樣就能保證slave數據和master數據保持一致了。
    3)、Mysql主從複製至少須要兩個Mysql服務,固然Mysql服務能夠分佈在不一樣的服務器上,也能夠在一臺服務器上啓動多個MySQL服務。
    4)、Mysql主從複製最好確保master和slave服務器上的Mysql版本相同。
  • MySQL主從形式
    常見的主從形式:
    一主一從
    MySQL主從複製認識及實施操做
    一主兩從、一主多從
    MySQL主從複製認識及實施操做
    聯級複製
    MySQL主從複製認識及實施操做
  • MySQL主從複製操做
    操做環境
    OS:CentOS7.6
    Mysql:Mysql5.7
    主庫:IP=10.20.1.18
    從庫:IP=10.20.1.19
    主從形式:一主一從
    實現MySQL主從複製須要進行的配置:
    主服務器
    開啓二進制日誌
    配置惟一的server-id
    得到master二進制日誌文件名及位置
    建立一個用於slave和master通訊的用戶帳號
    從服務器
    配置惟一的server-id
    使用master分配的用戶帳號讀取master二進制日誌
    啓用slave服務
    具體操做:
    主服務器操做
    1)、修改主數據庫服務器配置文件my.cnf,修改以下信息:
    server_id = 1                #惟一標識,主庫從庫不能重複
    log_bin = mysql-bin          #開啓日誌
    binlog_format=MIXED         #日誌記錄的格式
    max_binlog_size = 512M     #單個日誌文件最大
    expire_logs_day = 7          #日誌有效期(天)
    binlog_do_db = test1,test2     #日誌記錄那些數據庫
    binlog_ignore_db = mysql,performance_schema,information_schema   #日誌記錄忽略那些數據庫

    MySQL主從複製認識及實施操做
    MySQL服務重啓:mysql

    systemctl restart mysqld.service

    2)、建立用於同步帳戶sql

    mysql> CREATE USER 'user'@'10.20.1.18' IDENTIFIED BY 'passwd';    #建立用戶
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'rsync_user'@'10.20.1.1%' identified by 'passwd';  #分配權限
    mysql>flush privileges;

    3)、查看master狀態
    show master status命令記錄二進制文件名(mysql-bin.000009)和position位置(1354)。
    MySQL主從複製認識及實施操做
    其中「Binlog_Do_DB 」字段顯示記錄日誌要同步的庫,「Binlog_Ignore_DB」字段顯示忽略記錄日誌,無需同步的庫。
    4)、查看master的logbin開啓狀態數據庫

    show variables like 'log_bin';

    MySQL主從複製認識及實施操做
    從服務器操做
    1)、修改從數據庫服務器配置文件my.cnf安全

    server-id=2   #惟一標識,與主庫不同
    relay-log-index=slave-relay-bin.index
    relay-log=slave-relay-bin   #打開slave的relaylog功能的

    MySQL主從複製認識及實施操做
    MySQL服務重啓:服務器

    systemctl restart mysqld.service

    2)、設置同步信息
    先中止同步架構

    mysql>stop slave;

    設置同步信息併發

    CHANGE MASTER TO
     MASTER_HOST='10.20.1.18',
     MASTER_USER='rsync_user',
     MASTER_PASSWORD='passwd',
     MASTER_LOG_FILE='mysql-bin.000009',
     MASTER_LOG_POS=754;

    其中master_log_file 和 master_log_pos爲上面主庫show master status命令記錄的信息。
    3)、啓動slave 同步進程異步

    mysql>start slave;

    4)、slave狀態查看
    show slave status\G 命令查看,主要查看這幾項:ide

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Master_Log_File: mysql-bin.000009
    Relay_Master_Log_File: mysql-bin.000009
    Read_Master_Log_Pos: 1654
    Exec_master_log_pos: 1654

    MySQL主從複製認識及實施操做
    只有【Slave_IO_Running】和【Slave_SQL_Running】都是Yes,則同步正常。
    No或者Connecting都不行,可查看mysql-error.log,以排查問題。性能

    show variables like 'log_error%';

    MySQL主從複製認識及實施操做
    5)、同步測試
    驗證操做,如在master的新建一test數據庫,新建一張表中插入一條數據,在slave的test庫的相同數據表中查看是否有新增的數據,便可驗證主從複製功能是否有效,還能夠關閉slave(mysql>stop slave;),而後再修改master,看slave是否也相應修改(中止slave後,master的修改不會同步到slave),就可完成MySQL主從複製功能的驗證了。
    主庫插入數據:
    MySQL主從複製認識及實施操做
    從庫查看:
    MySQL主從複製認識及實施操做驗證主從數據同步成功。

相關文章
相關標籤/搜索