欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

MySQL主從復(fù)制

1 典型主從架構(gòu)

  • 一主多從

? 特點(diǎn):讀寫分離,應(yīng)用于讀取壓力大的場景,將要求實(shí)時(shí)性不高的請(qǐng)求分發(fā)到多個(gè)從庫,降低主庫的壓力

? 缺陷:存在主從延時(shí)問題

? 如何解決:優(yōu)化網(wǎng)絡(luò)環(huán)境,MySQL5.5~5.6使用半同步復(fù)制,MySQL5.7使用增強(qiáng)半同步復(fù)制

  • 多級(jí)復(fù)制

    解決了主庫I/O和網(wǎng)絡(luò)壓力大的問題,多級(jí)復(fù)制可以減小主庫的壓力,主庫只需要向另一個(gè)主庫發(fā)送binlog日志

  • 雙主

    適用主從切換的場景,通過雙主復(fù)制架構(gòu)避免了重復(fù)搭建從庫的麻煩

  • ? 主庫Master1和Master互為主從,所有Web Client的寫請(qǐng)求都訪問主庫Master1或Master2

    • 多源復(fù)制

      多源(Multi-Source)復(fù)制架構(gòu)適用于復(fù)雜的業(yè)務(wù)需求,既可以支撐OLTP(聯(lián)機(jī)事務(wù)處理),也可以滿足OLAP(聯(lián)機(jī)分析處理)

    2 主從復(fù)制原理

    mysql支持兩種復(fù)制方式,一是基于行的復(fù)制,二是基于語句的復(fù)制通過主庫記錄的二進(jìn)制日志并在從庫進(jìn)行異步復(fù)制,可能會(huì)產(chǎn)出延時(shí)

  • 3 主從復(fù)制搭建

    3.1 異步復(fù)制

    • 邏輯上

      MySQL默認(rèn)的復(fù)制操作是異步的,主庫在客戶端提交的事務(wù)會(huì)立即返回結(jié)果給客戶端,不關(guān)心從庫是否已經(jīng)被接收并處理,若主庫crash,從庫也無法收到提交的事務(wù),強(qiáng)行切換導(dǎo)致數(shù)據(jù)不完整

    • 技術(shù)上

      主庫將事務(wù)寫入binlog后通知dump線程發(fā)送到從庫,主庫繼續(xù)處理其他事務(wù),不能保證binlog完全送達(dá)所有從庫

    • 環(huán)境搭建

      1)相關(guān)主庫與從庫的配置文件

    • [mysqld] ? ? ? ? ?# master
      datadir=/data
      socket=/data/mysql.sock
      log-bin=master-bin
      sync-binlog=1
      server-id=100
      #----------------------------------
      [mysqld] ? ? ? # slave
      datadir=/data
      socket=/data/mysql.sock
      relay-log=slave-bin
      server-id=111
      #------------------------------------

      2)開啟master與slave的實(shí)例

    • #關(guān)閉mysql實(shí)例
      mysqladmin -uroot -h127.1 ?-P3306 ?-p'123456' shutdown;
      #開啟mysql數(shù)據(jù)庫實(shí)例
      mysqld_safe --defaults-file=/home/mysql/etc/my.cnf &
      #查看進(jìn)程
      ps -ef |grep mysqld

      3)創(chuàng)建復(fù)制專用用戶

    • mysql> create user 'repl'@'192.169.43.%' identified by '123456';
      #create user 'repl'@'%' identified by '123456';
      mysql> grant REPLICATION SLAVE on *.* to 'repl'@'192.169.43.%';
      mysql> flush privileges;

      4)導(dǎo)出master數(shù)據(jù)

    • #--master-data值為2會(huì)注釋change master,值為1或者沒有提供值時(shí),這些語句是直接激活的。同時(shí),--master-data會(huì)鎖定所有表(如果同時(shí)使用了--single-transaction,則不是鎖所有表
      mysqldump -uroot -p --all-databases --master-data=2 > master.sql

      5)從master.sql中獲取到binlog的坐標(biāo)

    • grep -i -m 1 'change master to' master.sql

      6)在從庫執(zhí)行導(dǎo)出的master.sql

    • mysql -uroot -p -h 127.1 -e 'source master.sql'

      7)從庫連接master

    • mysql> change master to?
      ? ? ? ? master_host='192.168.43.42',
      ? ? ? ? master_port=3306,
      ? ? ? ? master_user='repl',
      ? ? ? ? master_password='Password',
      ? ? ? ? master_log_file='master-bin.000002',
      ? ? ? ? master_log_pos=771;

      8)啟動(dòng)IO線程和SQL線程

    • #一次性啟動(dòng)
      start slave;
      #分開執(zhí)行
      start slave io_thread;
      start slave sql_thread;

      9)在從庫查看同步信息

    • mysql> show slave status\G
      Master_Log_File:IO線程正在讀取的master binlog
      Read_Master_Log_Pos:IO線程已經(jīng)讀取到master binlog的哪個(gè)位置
      Relay_Log_File:SQL線程正在讀取和執(zhí)行的relay log
      Relay_Log_Pos:SQL線程已經(jīng)讀取和執(zhí)行到relay log的哪個(gè)位置
      Relay_Master_Log_File:SQL線程最近執(zhí)行的操作對(duì)應(yīng)的是哪個(gè)master binlog
      Exec_Master_Log_Pos:SQL線程最近執(zhí)行的操作對(duì)應(yīng)的是master binlog的哪個(gè)位置

      10)reset master與reset slave

      reset slave會(huì)刪除master.info/relay-log.info和relay log,然后新生成一個(gè)relay log。但是change master to設(shè)置的連接參數(shù)還在內(nèi)存中保留著,所以此時(shí)可以直接start slave,并根據(jù)內(nèi)存中的change master to連接參數(shù)復(fù)制日志。

      reset slave all除了刪除reset slave刪除的東西,還刪除內(nèi)存中的change master to設(shè)置的連接信息

      reset master會(huì)刪除master上所有的二進(jìn)制日志,并新建一個(gè)日志。在正常運(yùn)行的主從復(fù)制環(huán)境中,執(zhí)行reset master很可能導(dǎo)致異常狀況。所以建議使用purge來刪除某個(gè)時(shí)間點(diǎn)之前的日志(應(yīng)該保證只刪除那些已經(jīng)復(fù)制完成的日志),生產(chǎn)環(huán)境慎用

      3.2 全同步復(fù)制

      也稱之組復(fù)制MGR

      • 邏輯上

        主庫執(zhí)行完事務(wù),會(huì)等待所有事務(wù)分發(fā)給從庫并執(zhí)行完才返回客戶端,因此會(huì)帶來性能影響

      • 技術(shù)上

        主庫提交事務(wù)后,所有的從庫必須收到并提交事務(wù),主庫線程收到返回才繼續(xù)工作,缺點(diǎn)是主庫完成事務(wù)是時(shí)間變長,性能降低

      • 額外的,全同步是主從同步的增強(qiáng)。

        因?yàn)橹鲝耐诫m可以實(shí)現(xiàn)一主多從,但它的局限在于只有在主數(shù)據(jù)庫上寫的時(shí)候從數(shù)據(jù)庫才會(huì)做數(shù)據(jù)備份,而在從數(shù)據(jù)庫做出改變時(shí),主數(shù)據(jù)庫不會(huì)記錄相應(yīng)的改變。

        然而,全同步出現(xiàn)了,它可以是只要在一個(gè)數(shù)據(jù)庫做出改變,所以其它在同組的數(shù)據(jù)庫也會(huì)改變,同組的數(shù)據(jù)庫沒有等級(jí)之分。可以理解為“同組數(shù)據(jù)庫之間數(shù)據(jù)相等”

      • Master節(jié)點(diǎn)設(shè)置

        1)配置Master節(jié)點(diǎn)my.cnf配置文件

        [mysqld]
        datadir=/var/lib/mysql
        socket=/var/lib/mysql/mysql.sock
        symbolic-links=0
        log-error=/var/log/mysqld.log
        pid-file=/var/run/mysqld/mysqld.pid
        log-bin=slave-bin
        binlog_checksum=NONE
        sync-binlog=1
        #此處需要作出區(qū)分
        server-id=101
        gtid_mode=on
        enforce-gtid-consistency=1
        # 啟用SQL線程回放之后將二進(jìn)制寫入自身的binlog中,在組復(fù)制中,依賴于每個(gè)成員持久化的binlog來實(shí)現(xiàn)一些數(shù)據(jù)自動(dòng)平衡>的特性
        log_slave_updates=ON
        # 啟用ROW格式復(fù)制,增強(qiáng)數(shù)據(jù)一致性
        binlog_format=ROW
        # 啟用雙TABLE,使用InnoDB引擎表來保存IO和SQL線程的位置信息(復(fù)制元數(shù)據(jù)),以增強(qiáng)復(fù)制狀態(tài)的安全性
        master_info_repository=TABLE
        relay_log_info_repository=TABLE
        plugin_load_add='group_replication.so'
        transaction_write_set_extraction=XXHASH64
        #組內(nèi)統(tǒng)一,自行設(shè)定值
        loose-group_replication_group_name="eba794f9-cfb3-11ec-9b91-000c29058c90"
        loose-group_replication_start_on_boot=off
        #本機(jī)ip,此處各節(jié)點(diǎn)需單獨(dú)配置
        loose-group_replication_local_address= "192.168.43.43:33061"
        #組內(nèi)ip
        loose-group_replication_group_seeds="192.168.43.42:33061,192.168.43.43:33061"
        loose-group_replication_bootstrap_group=off
        #白名單
        loose-group_replication_ip_whitelist="127.0.0.1,192.168.43.0/24"
        loose-group_replication_enforce_update_everywhere_checks=ON
        loose-group_replication_single_primary_mode=OFF

        2)新建復(fù)制用戶

      • #創(chuàng)建用戶,需暫時(shí)關(guān)閉同步,避免同步問題
        SET SQL_LOG_BIN=0;
        CREATE USER repl@'%' IDENTIFIED BY '123456';
        GRANT REPLICATION SLAVE ON *.* TO repl@'%';
        FLUSH PRIVILEGES;
        SET SQL_LOG_BIN=1;

        #設(shè)置同步Master
        CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';

        3)配置hosts

      • #vi /etc/hosts 按實(shí)際情況填寫 ip 主機(jī)名
        192.168.43.43 master
        192.168.43.42 slave

        4)啟動(dòng)組

      • mysql> SET GLOBAL group_replication_bootstrap_group=ON;
        mysql> START GROUP_REPLICATION;
        mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

      • 注意:引導(dǎo)只能由單個(gè)服務(wù)器完成,即啟動(dòng)組的服務(wù)器并且只執(zhí)行一次。這就是為什么group_replication_bootstrap_group選項(xiàng)的值沒有存儲(chǔ)在實(shí)例的選項(xiàng)文件中的原因。如果它保存在選項(xiàng)文件中,則在重新啟動(dòng)服務(wù)器時(shí)會(huì)自動(dòng)引導(dǎo)第二個(gè)具有相同名稱的組。這將導(dǎo)致兩個(gè)不同的組具有相同的名稱

        5)查看組內(nèi)成員

      • mysql> select * from performance_schema.replication_group_members;

        +---------------------------+------------------+------+------+-------+
        | CHANNEL_NAME ? ? ? ? ? ? ?| MEMBER_ID ? ? ? ?| HOST | PORT | STATE |
        +---------------------------+------------------+------+------+-------+
        | group_replication_applier | 688532-0c296515c |master| 3306 | ONLINE|
        +---------------------------+------------------+------+------+-------+

        Slave節(jié)點(diǎn)設(shè)置

        1)配置Master節(jié)點(diǎn)my.cnf配置文件

      • [mysqld]
        datadir=/var/lib/mysql
        socket=/var/lib/mysql/mysql.sock
        symbolic-links=0
        log-error=/var/log/mysqld.log
        pid-file=/var/run/mysqld/mysqld.pid
        log-bin=slave-bin
        binlog_checksum=NONE
        sync-binlog=1
        #此處需要作出區(qū)分
        server-id=100
        gtid_mode=on
        enforce-gtid-consistency=1
        # 啟用SQL線程回放之后將二進(jìn)制寫入自身的binlog中,在組復(fù)制中,依賴于每個(gè)成員持久化的binlog來實(shí)現(xiàn)一些數(shù)據(jù)自動(dòng)平衡>的特性
        log_slave_updates=ON
        # 啟用ROW格式復(fù)制,增強(qiáng)數(shù)據(jù)一致性
        binlog_format=ROW
        # 啟用雙TABLE,使用InnoDB引擎表來保存IO和SQL線程的位置信息(復(fù)制元數(shù)據(jù)),以增強(qiáng)復(fù)制狀態(tài)的安全性
        master_info_repository=TABLE
        relay_log_info_repository=TABLE
        plugin_load_add='group_replication.so'
        transaction_write_set_extraction=XXHASH64
        #組內(nèi)統(tǒng)一,自行設(shè)定值
        loose-group_replication_group_name="eba794f9-cfb3-11ec-9b91-000c29058c90"
        loose-group_replication_start_on_boot=off
        #本機(jī)ip,此處各節(jié)點(diǎn)需單獨(dú)配置
        loose-group_replication_local_address= "192.168.43.42:33061"
        #組內(nèi)ip
        loose-group_replication_group_seeds="192.168.43.42:33061,192.168.43.43:33061"
        loose-group_replication_bootstrap_group=off
        #白名單
        loose-group_replication_ip_whitelist="127.0.0.1,192.168.43.0/24"
        loose-group_replication_enforce_update_everywhere_checks=ON
        loose-group_replication_single_primary_mode=OFF

        2)新建復(fù)制用戶

      • #創(chuàng)建用戶,需暫時(shí)關(guān)閉同步,避免同步問題
        SET SQL_LOG_BIN=0;
        CREATE USER repl@'%' IDENTIFIED BY '123456';
        GRANT REPLICATION SLAVE ON *.* TO repl@'%';
        FLUSH PRIVILEGES;
        SET SQL_LOG_BIN=1;

        #設(shè)置同步Master
        CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';

        3)配置Slave服務(wù)器hosts

      • #vi /etc/hosts 按實(shí)際情況填寫 ip 主機(jī)名
        192.168.43.43 master
        192.168.43.42 slave

        MySQL主從復(fù)制

文章鏈接: http://www.qzkangyuan.com/9800.html

文章標(biāo)題:MySQL主從復(fù)制

文章版權(quán):夢飛科技所發(fā)布的內(nèi)容,部分為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明來源,網(wǎng)絡(luò)轉(zhuǎn)載文章如有侵權(quán)請(qǐng)聯(lián)系我們!

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
建站教程投稿分享

MySQL備份與恢復(fù)

2022-9-7 15:31:05

投稿分享

怎樣防止租用服務(wù)器數(shù)據(jù)丟失問題

2022-9-8 12:30:57

0 條回復(fù) A文章作者 M管理員
    暫無討論,說說你的看法吧
?
個(gè)人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索
主站蜘蛛池模板: 湖口县| 扶沟县| 涟源市| 商水县| 余姚市| 康乐县| 西丰县| 云浮市| 怀宁县| 阿拉善盟| 娱乐| 布尔津县| 尚义县| 恩施市| 漳州市| 七台河市| 米泉市| 台中县| 合水县| 庆城县| 江津市| 安吉县| 承德市| 郧西县| 房产| 灌南县| 汉源县| 武清区| 文水县| 资溪县| 崇明县| 寻乌县| 额敏县| 随州市| 新乡市| 平南县| 定南县| 江源县| 上思县| 朝阳县| 南岸区|