日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

摘要

本文將從MySQL主從復(fù)制的原理出發(fā),詳細介紹MySql在Docker環(huán)境下的主從復(fù)制搭建,以一個主實例和一個從實例實現(xiàn)主從復(fù)制為例。

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

主從復(fù)制是指將主數(shù)據(jù)庫的DDL和DML操作通過二進制日志傳到從數(shù)據(jù)庫上,然后在從數(shù)據(jù)庫上對這些日志進行重新執(zhí)行,從而使從數(shù)據(jù)庫和主數(shù)據(jù)庫的數(shù)據(jù)保持一致。

主從復(fù)制的原理

  • MySql主庫在事務(wù)提交時會把數(shù)據(jù)變更作為事件記錄在二進制日志Binlog中;
  • 主庫推送二進制日志文件Binlog中的事件到從庫的中繼日志Relay Log中,之后從庫根據(jù)中繼日志重做數(shù)據(jù)變更操作,通過邏輯復(fù)制來達到主庫和從庫的數(shù)據(jù)一致性;
  • MySql通過三個線程來完成主從庫間的數(shù)據(jù)復(fù)制,其中Binlog Dump線程跑在主庫上,I/O線程和SQL線程跑著從庫上;
  • 當(dāng)在從庫上啟動復(fù)制時,首先創(chuàng)建I/O線程連接主庫,主庫隨后創(chuàng)建Binlog Dump線程讀取數(shù)據(jù)庫事件并發(fā)送給I/O線程,I/O線程獲取到事件數(shù)據(jù)后更新到從庫的中繼日志Relay Log中去,之后從庫上的SQL線程讀取中繼日志Relay Log中更新的數(shù)據(jù)庫事件并應(yīng)用,如下圖所示。
MySql主從復(fù)制,從原理到實踐

 

主實例搭建

  • 運行mysql主實例:
docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSword=root  -d mysql:5.7
  • 在mysql的配置文件夾/mydata/mysql-master/conf中創(chuàng)建一個配置文件my.cnf:
touch my.cnf
  • 修改配置文件my.cnf,配置信息如下:
[mysqld]## 設(shè)置server_id,同一局域網(wǎng)中需要唯一server_id=101 ## 指定不需要同步的數(shù)據(jù)庫名稱binlog-ignore-db=mysql  ## 開啟二進制日志功能log-bin=mall-mysql-bin  ## 設(shè)置二進制日志使用內(nèi)存大小(事務(wù))binlog_cache_size=1M  ## 設(shè)置使用的二進制日志格式(mixed,statement,row)binlog_format=mixed  ## 二進制日志過期清理時間。默認(rèn)值為0,表示不自動清理。expire_logs_days=7  ## 跳過主從復(fù)制中遇到的所有錯誤或指定類型的錯誤,避免slave端復(fù)制中斷。## 如:1062錯誤是指一些主鍵重復(fù),1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致slave_skip_errors=1062  
  • 修改完配置后重啟實例:
docker restart mysql-master
  • 進入mysql-master容器中:
docker exec -it mysql-master /bin/bash
  • 在容器中使用mysql的登錄命令連接到客戶端:
mysql -uroot -proot
  • 創(chuàng)建數(shù)據(jù)同步用戶:
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';復(fù)制代碼

從實例搭建

  • 運行mysql從實例:
docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root  -d mysql:5.7
  • 在mysql的配置文件夾/mydata/mysql-slave/conf中創(chuàng)建一個配置文件my.cnf:
touch my.cnf
  • 修改配置文件my.cnf:
[mysqld]## 設(shè)置server_id,同一局域網(wǎng)中需要唯一server_id=102## 指定不需要同步的數(shù)據(jù)庫名稱binlog-ignore-db=mysql  ## 開啟二進制日志功能,以備Slave作為其它數(shù)據(jù)庫實例的Master時使用log-bin=mall-mysql-slave1-bin  ## 設(shè)置二進制日志使用內(nèi)存大小(事務(wù))binlog_cache_size=1M  ## 設(shè)置使用的二進制日志格式(mixed,statement,row)binlog_format=mixed  ## 二進制日志過期清理時間。默認(rèn)值為0,表示不自動清理。expire_logs_days=7  ## 跳過主從復(fù)制中遇到的所有錯誤或指定類型的錯誤,避免slave端復(fù)制中斷。## 如:1062錯誤是指一些主鍵重復(fù),1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致slave_skip_errors=1062  ## relay_log配置中繼日志relay_log=mall-mysql-relay-bin  ## log_slave_updates表示slave將復(fù)制事件寫進自己的二進制日志log_slave_updates=1  ## slave設(shè)置為只讀(具有super權(quán)限的用戶除外)read_only=1  
  • 修改完配置后重啟實例:
docker restart mysql-slave

將主從數(shù)據(jù)庫進行連接

  • 連接到主數(shù)據(jù)庫的mysql客戶端,查看主數(shù)據(jù)庫狀態(tài):
show master status;
  • 主數(shù)據(jù)庫狀態(tài)顯示如下:
MySql主從復(fù)制,從原理到實踐

 

 

  • 進入mysql-slave容器中:
docker exec -it mysql-slave /bin/bash
  • 在容器中使用mysql的登錄命令連接到客戶端:
mysql -uroot -proot
  • 在從數(shù)據(jù)庫中配置主從復(fù)制:
change master to master_host='192.168.6.132', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;  
  • 主從復(fù)制命令參數(shù)說明: master_host:主數(shù)據(jù)庫的IP地址; master_port:主數(shù)據(jù)庫的運行端口; master_user:在主數(shù)據(jù)庫創(chuàng)建的用于同步數(shù)據(jù)的用戶賬號; master_password:在主數(shù)據(jù)庫創(chuàng)建的用于同步數(shù)據(jù)的用戶密碼; master_log_file:指定從數(shù)據(jù)庫要復(fù)制數(shù)據(jù)的日志文件,通過查看主數(shù)據(jù)的狀態(tài),獲取File參數(shù); master_log_pos:指定從數(shù)據(jù)庫從哪個位置開始復(fù)制數(shù)據(jù),通過查看主數(shù)據(jù)的狀態(tài),獲取Position參數(shù); master_connect_retry:連接失敗重試的時間間隔,單位為秒。
  • 查看主從同步狀態(tài):
show slave status G;
  • 從數(shù)據(jù)庫狀態(tài)顯示如下:
MySql主從復(fù)制,從原理到實踐

 

  • 開啟主從同步:
start slave;
  • 查看從數(shù)據(jù)庫狀態(tài)發(fā)現(xiàn)已經(jīng)同步:
MySql主從復(fù)制,從原理到實踐

 

 

主從復(fù)制測試

主從復(fù)制的測試方法有很多,可以在主實例中創(chuàng)建一個數(shù)據(jù)庫,看看從實例中是否有該數(shù)據(jù)庫,如果有,表示主從復(fù)制已經(jīng)搭建成功。

  • 在主實例中創(chuàng)建一個數(shù)據(jù)庫mall;
MySql主從復(fù)制,從原理到實踐

 

  • 在從實例中查看數(shù)據(jù)庫,發(fā)現(xiàn)也有一個mall數(shù)據(jù)庫,可以判斷主從復(fù)制已經(jīng)搭建成功。
MySql主從復(fù)制,從原理到實踐

 


作者:macroZheng
鏈接:https://juejin.im/post/5e1daba46fb9a02fb75d5e92

分享到:
標(biāo)簽:主從 復(fù)制 MySql
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定