<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Mysql的主從復(fù)制

          共 3181字,需瀏覽 7分鐘

           ·

          2021-07-31 03:21

          • 一、什么是主從復(fù)制?

          主從復(fù)制是指數(shù)據(jù)可以從一個(gè)MySQL數(shù)據(jù)庫服務(wù)器主節(jié)點(diǎn)復(fù)制到一個(gè)或多個(gè)從節(jié)點(diǎn)。
          • 二、為什么要做主從復(fù)制?

          • 主庫故障后,可切換到從數(shù)據(jù)庫繼續(xù)工作,一定程度上實(shí)現(xiàn)高可用。

          • 讀寫分離,單庫情況下如果某張表寫的時(shí)候造成鎖表,那讀操作也會被阻塞,主從的話主庫負(fù)責(zé)寫,從庫負(fù)責(zé)讀,如果主庫寫的時(shí)候鎖表,不會影響從庫讀。

          • 業(yè)務(wù)量越來越大,I/O訪問頻率過高,單機(jī)無法滿足,此時(shí)做多庫的存儲,降低磁盤I/O訪問的頻率,提高單個(gè)機(jī)器的I/O性能。

          • 三、Mysql主從復(fù)制的原理?

          • master必須啟用binlog,binlog中記錄了每一次數(shù)據(jù)變化事件

          • slave會在一定時(shí)間間隔內(nèi)對master的binlog進(jìn)行探測,判斷其是否發(fā)生改變,如果發(fā)生改變,則開啟一個(gè)I/O線程請求master的binlog中的事件

          • master為slave的I/O線程啟動(dòng)一個(gè)dump線程(binlog轉(zhuǎn)儲線程),檢查自己binlog中的事件,跟對方請求的位置對比后,向其發(fā)送二進(jìn)制事件

          • slave接收到master發(fā)送過來的數(shù)據(jù)把它放置到Relay log(中繼日志,也是二進(jìn)制)文件中;并記錄該次請求到master的具體哪一個(gè)二進(jìn)制日志文件內(nèi)部的哪一個(gè)位置

          • slave將啟動(dòng)一個(gè)sql線程從Relay log中讀取二進(jìn)制日志,在本地重放,使得其數(shù)據(jù)和主節(jié)點(diǎn)的保持一致;并記錄relay log中該次執(zhí)行的位置信息

          • 最后I/O線程和SQL線程將進(jìn)入睡眠狀態(tài),等待下一次被喚醒

          下面來張圖可以清晰的表示:

          1d12872e4a9c4ca04c90e63b4eaa3c46.webp

          • 四、主從復(fù)制搭建

          本文基于centos7,mysql5.7
          • 4.1、安裝mysql

          需要至少兩臺mysql服務(wù),安裝方式參考centos7安裝mysql

          注:我已經(jīng)安裝好兩臺mysql服務(wù),分別為192.168.209.128、192.168.209.129

          rpm安裝默認(rèn)目錄:/var/lib/mysql/數(shù)據(jù)文件/usr/share/mysql配置文件模板/usr/bin/mysql客戶端工具目錄/var/log/日志目錄
          • 4.2、修改配置

          192.168.209.128(主)的配置如下
          #mysql主從配置--主節(jié)點(diǎn)#節(jié)點(diǎn)ID,需要在集群中唯一server-id=1#開啟binloglog-bin=mysql-bin#是否控制binlog刷盤,0:不控制,意思就是讓mysql自己決定是否刷盤,性能好但可能造成刷盤不及時(shí),1:每次事務(wù)提交都會刷盤,性能差但安全sync_binlog=1#binlog日志格式,一共分為statement、row、mixed三種模式binlog_format=mixed#binlog過期清理時(shí)間expire_logs_days=7#binlog每個(gè)日志文件的大小max_binlog_size=100m#binlog緩存大小binlog_cache_size=4m#最大binlog緩存大小max_binlog_cache_size=512m#不生成日志文件的數(shù)據(jù)庫,多個(gè)忽略數(shù)據(jù)庫可以用逗號拼接,這庫一般都是mysql自帶的庫,和業(yè)務(wù)無關(guān)的,就不用記錄binlog了binlog_ignore_db=mysql,information_schema, performance_schema#跳過從庫的錯(cuò)誤slave-skip-errors=all
          192.168.209.129(從)的配置如下
          #mysql主從配置-從節(jié)點(diǎn)#節(jié)點(diǎn)ID,需要在集群中唯一server_id=2#開啟binloglog-bin=mysql-bin#中繼日志名relay-log=mysql-relay-bin#從庫上事件從中繼日志中過濾,下面的這些表建議都過濾掉replicate-wild-ignore-table =mysql.%replicate-wild-ignore-table =test.%replicate-wild-ignore-table =log.%replicate-wild-ignore-table =information_schema.%replicate-wild-ignore-table =performance_schema.%

          6462ab7cd755b68f49290756aff7c251.webp

          配置完后運(yùn)行如下命令重啟mysql
          systemctl restart mysqld查看下mysql是否啟動(dòng)成功
          systemctl status mysqld

          66bfdec344c514b29ac038c153554d56.webp

          • 4.3、執(zhí)行語句

          master(主)中執(zhí)行:
          #創(chuàng)建用戶CREATE USER replyer IDENTIFIED BY 'Reply_12345';#賦予該用戶復(fù)制的權(quán)利grant?replication?slave?on?*.*?to?'replyer'@'192.168.209.129'??identified?by?'Reply_12345';FLUSH PRIVILEGES;#查看master的狀態(tài)show master status;

          6e299200a1659244c2cd17419fc67e42.webp

          c35181e2f9b8878ac7b87d856ba437e5.webp

          slave(從)中執(zhí)行:
          #配置從庫CHANGE MASTER TO MASTER_HOST = '192.168.209.128',  MASTER_USER = 'replyer', MASTER_PASSWORD = 'Reply_12345',MASTER_PORT = 3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=861,MASTER_RETRY_COUNT = 60,MASTER_HEARTBEAT_PERIOD = 10; #啟動(dòng)從庫slave進(jìn)程start slave;#查看從庫狀態(tài)show slave status;

          69f87dacef27ba5af7b183db30417d56.webp

          注:配置從庫的MASTER_LOG_POS一定要和master的Position一致,不要看我上面這個(gè)圖,我這個(gè)圖是后來補(bǔ)的。最后運(yùn)行完后,主庫狀態(tài)中的Position和從庫狀態(tài)中的Read_Master_Log_Pos一定是一致的。

          5e0ef2e4a7ff59ac68ff78a9be35c3fa.webp

          27f0353319b3d13daa4705b15bc8770f.webp

          如果Slave_SQL_Running是no執(zhí)行:
          stop slave;SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;?start slave;?show slave status;如果Slave_IO_Running是no執(zhí)行:show master status;

          f4ce13c750a2e534a3eed9ed71430d92.webp

          show slave status;

          9c8328867aa44d4ef7fdb67daa0fbb96.webp

          看這倆文件是不是一個(gè),不是一個(gè)的話執(zhí)行:slave stop;?CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0;?slave start;show slave status;一般也就是這問題了。
          • 4.4、主從復(fù)制演示

          登上master執(zhí)行:
          #創(chuàng)建xp_db庫create database xp_db;#使用xp_db庫use?xp_db;#在xp_db庫中創(chuàng)建student表CREATE TABLE `student` (`id`  int(11) NOT NULL AUTO_INCREMENT ,`name`  varchar(255) NULL ,PRIMARY KEY (`id`));#查看xp_db庫中的表show tables;#往student表中插入數(shù)據(jù)INSERT INTO student(name) VALUES ('xiaopi');
          登上slave執(zhí)行(master執(zhí)行完每一步后可以執(zhí)行對應(yīng)的語句觀察同步情況):
          show databases;use xp_db;show tables;select * from student;

          6bc5a2c61e50336d3c19268411cd55aa.webp

          瀏覽 50
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人在线免费观看视频 | 影音先锋三级网站 | 亚洲无aV在线中文字幕 | 国产极品艳情生活视频在线播放 | 迷情校园亚洲 |