<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>

          MySQL8.0讀寫(xiě)分離實(shí)例

          共 4054字,需瀏覽 9分鐘

           ·

          2023-10-14 22:26

          MySQL 8.0讀寫(xiě)分離  

          系統(tǒng)建立初期,我們的架構(gòu)都非常的簡(jiǎn)單,主要滿足業(yè)務(wù)的正常運(yùn)行,但是隨著訪問(wèn)量的升高,人們對(duì)系統(tǒng)的可靠性有了更高的要求,所以,我們?yōu)榱吮苊鈫吸c(diǎn)故障,對(duì)系統(tǒng)應(yīng)用層進(jìn)行了橫向的擴(kuò)展,這樣,保證了系統(tǒng)應(yīng)用層的高可用,在發(fā)生宕機(jī),或者系統(tǒng)升級(jí)時(shí),系統(tǒng)對(duì)外還是可用的。而且在訪問(wèn)量升高的時(shí)候,系統(tǒng)應(yīng)用層的壓力也會(huì)得到分?jǐn)偅沟妹恳粋€(gè)單體的系統(tǒng)應(yīng)用的壓力在一個(gè)合理的區(qū)間范圍內(nèi)。

          但是,隨著訪問(wèn)量的升高,所有的壓力都將集中到數(shù)據(jù)庫(kù)這一層。 數(shù)據(jù)庫(kù)這一層將會(huì)成為系統(tǒng)的瓶頸,現(xiàn)在就需要針對(duì)數(shù)據(jù)庫(kù)這一環(huán)節(jié)進(jìn)行擴(kuò)展,以保證其可靠性,高可用性。

          同時(shí),有了上面對(duì)應(yīng)用服務(wù)器水平擴(kuò)展的方案,那么能不能 像系統(tǒng)應(yīng)用層那樣 水平 進(jìn)行擴(kuò)展 呢?答案是否定的, 想象一下,如果數(shù)據(jù)庫(kù)層也像系統(tǒng)應(yīng)用層那樣,進(jìn)行橫向擴(kuò)展,如圖:

                   faeda273b2e5a0887ccde2e4c567ee3c.webp

          • 1.MySQL主從配置  

          主配置log-bin,指定文件的名字

          l 主配置server-id 默認(rèn)是1

          l 從配置server-id,與主不能重復(fù)。

          2.數(shù)據(jù)庫(kù)規(guī)劃:  

          主庫(kù):192.168.8.100

          從庫(kù):192.168.8.112

          注意:將db112中的 數(shù)據(jù)庫(kù)刪除, 方便觀察同步數(shù)據(jù)效果

          2-1 db100配置my.cnf  

          vim /etc/my.cnf

          [mysqld]標(biāo)簽下配置

          da92672aec860c417f48a05fadfc2edf.webp

          datadir=/var/lib/mysql

          socket=/var/lib/mysql/mysql.sock

          log-error=/var/log/mysqld.log

          pid-file=/var/run/mysqld/mysqld.pid

          log-bin=xiaoyege_mysql

          server-id=1

          保存后重啟db100 mysql服務(wù)器

          service mysqld restart

          92b115659488a99fcbec5019bb0af71c.webp

          2-2 db112配置my.cnf  

          vim /etc/my.cnf

          [mysqld]標(biāo)簽下配置

          只需要配置一個(gè)server-id=2即可

          2c3a7f6b2d327c72f4b7b60993150b8f.webp

          server-id=2

          service mysqld restart

          3.創(chuàng)建主從配置賬號(hào)&&授權(quán)  

          主數(shù)據(jù)庫(kù)創(chuàng)建備份賬戶并授權(quán) replication slave

          登錄db100 

          mysql -uroot -p1qaz@WSX;

          SELECT DISTINCT User FROM mysql.user;

          創(chuàng)建用戶

          create user 'repl'@'%' IDENTIFIED BY '1qaz@WSX';

          91f0b056d509d341b047e5f237cf129c.webp

          授權(quán)

          GRANT replication slave ON *.* TO 'repl'@'%';

          c6aab4b8e89fc330e7b262b3fc2f54d5.webp

          刷新權(quán)限

          flush privileges;

          37f88a18402bfe4bc2d11960dedfb514.webp

          4.主庫(kù)鎖表  

          將主庫(kù)的表鎖住,鎖住以后進(jìn)行備份,鎖住以后,寫(xiě)操作就不會(huì)落到主表,然后將主庫(kù)數(shù)據(jù)備份到從庫(kù),接著查詢一下binlog的位置,記錄一下,然后在從庫(kù)中進(jìn)行主從的配置,因?yàn)橹鲝呐渲眯枰付╞inlog的位置

          然后把主庫(kù)的請(qǐng)求放開(kāi),因?yàn)榭梢宰x取binlog的位置,鎖表之后發(fā)生的數(shù)據(jù)就可以同步從庫(kù)了;

          主庫(kù)鎖表

          flush tables with read lock;

          03c3e28656b6d4f5ec95eca96f6ba4c8.webp

          在主庫(kù)插入一條數(shù)據(jù)進(jìn)行測(cè)試

          INSERT user(id,username) VALUES(6,'db_100 主庫(kù) xiaoyege');

          執(zhí)行結(jié)果:

          執(zhí)行語(yǔ)句一直卡著,因?yàn)殒i表了;

          5b9b78830320ad695d41fbef2b67a2ac.webp

          5.主庫(kù)binlog位置  

          主數(shù)據(jù)庫(kù)查詢log-bin的位置

          mysql> show master status;

          ab00166dd1b02cf8b036639b8bc3116a.webp

          xiaoyege_mysql.000001

          此文件就是在主庫(kù)設(shè)置的文件名稱;

          p osition = 847;

          p osition 之后的數(shù)據(jù)開(kāi)始讀取日志,進(jìn)行數(shù)據(jù)同步;

          在這個(gè)位置之前的數(shù)據(jù),需要使用mysql.dump將之前的數(shù)據(jù)dump下來(lái),復(fù)制到從庫(kù)當(dāng)中;

          主備份數(shù)據(jù)

          dump數(shù)據(jù)

          需要重新開(kāi)啟一個(gè)會(huì)話進(jìn)行操作

          mysqldump --all-databases --master-data > dbdump.db

          91bc067fcb46ef28c850175dcb080a7d.webp

          或者:

          mysqldump --all-databases --master-data > dbdump.db -uroot -p1qaz@WSX

          密碼:1qaz@WSX

          1f5df3d35ab660d5f4c2bb067e461293.webp

          文件dump完成

          056b03115f6fd4f89378c3bfb68d21b8.webp

          6.從庫(kù)dump文件  

          將dbdump.db文件復(fù)制到從庫(kù)112這臺(tái)機(jī)器上

          scp [email protected]:~/dbdump.db .

          xiaoyege1qaz

          08a3a53f20e37e035fd3ad5ae850037f.webp

          將這個(gè)文件加載到112的mysql當(dāng)中

          0586fad26372ae772a9613e88aebeca2.webp

          mysql < dbdump.db -uroot -p

          1qaz@WSX

          查看db112,表里面內(nèi)容已經(jīng)存在了; 和之前db100的內(nèi)容一致;

          7.解除主庫(kù)鎖表  

          mysql -uroot -p1qaz@WSX;

          unlock tables;

          8c0ec9d1e33024935ff1dd57d4227b33.webp

          查詢db100之前的insert語(yǔ)句鎖住的情況,已經(jīng)執(zhí)行成功了;

          eab75ba29a42faf472bcab972dfb1c12.webp

          查詢從庫(kù)還是沒(méi)有同步過(guò)來(lái);

          8.從數(shù)據(jù)庫(kù)設(shè)置主從同步  

          219ee93d977052e8f0ff7dc1ad7cb417.webp

          mysql -uroot -p1qaz@WSX;

          mysql>

          mysql> change master to

          -> master_host='192.168. 8 .1 11 ',

          -> master_user='repl',

          -> master_password='1qaz@WSX',

          -> master_log_file='xiaoyege_mysql.00000 9 ',

          -> master_log_pos= 18259

          -> get_master_public_key=1

          -> ;

          Query OK 0 rows affected 8 warnings (0.05 sec)

          mysql>

          最后執(zhí)行

          start slave;

          9ea49079952ed389972246db795edc8d.webp

          查看錯(cuò)誤信息;

          show slave status;

          show slave status \G;

          9.常見(jiàn)錯(cuò)誤  

          9-1 錯(cuò)誤caching_sha2_password  

          c5c4f7a130c301ff4a2b5452e8535796.webp

          Last_IO_Error error connecting to master '[email protected]:3306' - retry-time 60 retries 1 message Authentication plugin 'caching_sha2_password' reported error Authentication requires secure connection.

          查看主庫(kù):

          SELECT plugin FROM `user` where user = 'repl';

          e333f80752a532ea132215efe40ce1f6.webp

          原來(lái)是主庫(kù)repl的plugin是caching_sha2_password導(dǎo)致連接不上,修改為mysql_native_password即可解決。

          ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX';

          flush privileges;


          近期熱文

          參考資料

          1 | JUC


          責(zé)編  | 小耶哥

          本期作者  | 小耶哥

          平臺(tái)建設(shè)及技術(shù)支持  | 小耶哥


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

          手機(jī)掃一掃分享

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

          手機(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>
                  色婷婷国产精品综合在线观看 | 欧美精品超级AAAAAA | 人人操人人操人摸 | 亚洲加勒比在线 | 伊人国产女 |