最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Docker如何實現(xiàn)MySQL主從復制詳解

 更新時間:2019年10月29日 08:31:35   作者:ytao  
這篇文章主要給大家介紹了關于基于Docker如何實現(xiàn)MySQL主從復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

MySQL的主從復制是實現(xiàn)應用的高性能,高可用的基礎。對于數(shù)據(jù)庫讀操作較密集的應用,通過使數(shù)據(jù)庫請求負載均衡分配到不同MySQL服務器,可有效減輕數(shù)據(jù)庫壓力。當遇到MySQL單點故障中,也能在短時間內(nèi)實現(xiàn)故障切換。本文就MySQL的內(nèi)建的復制功能進行闡述。

版本

  • MySQl: 5.7.17
  • CentOS: 7.4.1708
  • Docker: 1.13.1

概述

MySQL復制數(shù)據(jù)流程:

  1. 主庫在數(shù)據(jù)更新提交事務之前,將事件異步記錄到binlog二進制日志文件中,日志記錄完成后存儲引擎提交本次事務
  2. 從庫啟動一個I/O線程與主庫建立連接,用來請求主庫中要更新的binlog。這時主庫創(chuàng)建的binlog dump線程,這是二進制轉儲線程,如果有新更新的事件,就通知I/O線程;當該線程轉儲二進制日志完成,沒有新的日志時,該線程進入sleep狀態(tài)。
  3. 從庫的I/O線程接收到新的事件日志后,保存到自己的relay log(中繼日志)中
  4. 從庫的SQL線程讀取中繼日志中的事件,并執(zhí)行更新保存。

配置主從庫

主庫my.cnf配置

在主庫的my.cnf中打開二進制日志,并設置服務Id。

log-bin = mysql-bin
server-id = 1

注意server-id必須是一個唯一的數(shù)字,必須主從不一致, 且主從庫必須設置項。

從庫my.cnf配置

log-bin = mysql-bin
server-id = 2
log-slave-updates = 1
read-only = 1

從庫也開啟log-bin,log-slave-updates設置為從庫重放中繼日志時,記錄到自己的二進制日志中,可以讓從庫作為其他服務器的主庫,將二進制日志轉發(fā)給其他從庫,在做一主多從方案時可考慮該種方案。

Dockerfile構建MySQL鏡像

構建所需文件

這里master和slave文件各自保存不共用,先創(chuàng)建文件夾 /usr/local/mysql 然后在目錄創(chuàng)建master和slave兩個目錄,再各自創(chuàng)建data文件夾

  • data 目錄用來保存數(shù)據(jù)文件的目錄
  • Dockerfile 保存Dockerfile內(nèi)容
  • init.sql 初始化數(shù)據(jù)庫的SQL
  • my.cnf 數(shù)據(jù)庫配置文件,配置方式上面已提到
  • start.sh Dockerfile構建MySQL時的腳本

Dockerfile 內(nèi)容

# 利用 mysql 鏡像創(chuàng)建新的鏡像
FROM mysql:5.7.17

ENV MYSQL_ROOT_PASSWORD ytao

COPY start.sh /mysql/start.sh
COPY my.cnf /etc/mysql/my.cnf 
COPY init.sql /mysql/init.sql

EXPOSE 3306
CMD ["sh", "/mysql/start.sh"]

這里的master和slave都是基于同一個鏡像構建,使用的存儲引擎和其他的組件最好是同一中,不然在復制過程中可能會出現(xiàn)異常。

init.sql 初始化數(shù)據(jù)

-- 創(chuàng)建 data_copy 數(shù)據(jù)庫
DROP DATABASE IF EXISTS `data_copy`;
CREATE DATABASE `data_copy` /*!40100 DEFAULT CHARACTER SET utf8mb4 collate utf8mb4_general_ci */;

-- 創(chuàng)建 person 表
USE `data_copy`;
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
 `id` int(32) NOT NULL,
 `name` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

創(chuàng)建data_copy數(shù)據(jù)庫和person表。

start.sh 腳本

#!/bin/sh
echo '啟動mysql'
service mysql start
sleep 5

echo '初始化數(shù)據(jù)庫'
mysql -uroot -pytao < /mysql/init.sql
echo '初始化完成!'
tail -f /dev/null

構建master和slave鏡像并運行容器

構建master鏡像

docker build -t master/mysql .

構建slave鏡像

docker build -t slave/mysql .

構建成功會返回 Successfuly,或通過docker images命令查看鏡像

使用剛構建的鏡像來運行容器

# master 容器
docker run --name master -p 3306:3306 -v /usr/local/mysql/master/data/:/var/lib/mysql -d master/mysql

# slave 容器
docker run --name slave -p 3307:3306 -v /usr/local/mysql/slave/data/:/var/lib/mysql -d slave/mysql

指定master端口為3306,slave端口為3307,掛載data目錄為保存數(shù)據(jù)的目錄。

連接到數(shù)據(jù)庫后驗證數(shù)據(jù)庫是否初始化成功

查看 log-bin 是否開啟

創(chuàng)建復制賬號

前面有提到從庫I/O線程要與主庫建立連接,所以需要用到賬號進行驗證。賬號除了要有連接權限(REPLICATION CLIENT),同時還要有復制權限(REPLICATION SLAVE)。

GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO muser@'%' IDENTIFIED BY 'ytao'; 

這里設置的訪問地址是開放的,實際使用過程中安全起見一定要指定訪問地址。

從庫啟動復制

從庫連接到主庫,獲取到二進制日志后重放。這里首先要配置上面創(chuàng)建的賬號進行連接,使用命令進行相應的設置。

CHANGE MASTER TO 
MASTER_HOST = '47.107.xx.xxx',
MASTER_PORT = 3306,
MASTER_USER = 'muser',
MASTER_PASSWORD = 'ytao',
MASTER_LOG_FILE = 'mysql-bin.000006';

到這里復制還沒有啟動,需要再從庫中啟動

START SLAVE;

使用SHOW SLAVE STATUS\G;命令查看啟動后的情況

上面標記的輸出信息Slave_IO_Running: Yes和Slave_SQL_Running: Yes可以看到I/O線程和SQL線程已啟動運行中。

測試同步數(shù)據(jù)

如果在主庫中添加,更新或刪除一個數(shù)據(jù),那么從庫中應該也有與主庫對應的數(shù)據(jù)變化。

向主庫添加一條數(shù)據(jù)

INSERT INTO `data_copy`.`person` (`id`, `name`) VALUES ('1', 'ytao');

查詢從庫數(shù)據(jù),數(shù)據(jù)已被同步過來。

總結

上述是最簡單最基本的配置,但是理解上面的配置過程,就可以根據(jù)自身情況定制不同方案,實現(xiàn)一主多從,主主復制(主動-主動或主動-被動模式)等等來滿足自身需求。

MySQL的復制雖然使用簡單方便,但也伴隨著一些問題需要我們在使用中進行解決,比如:不能從服務器異常停止中恢復,數(shù)據(jù)同步的延遲等等,還好現(xiàn)在遇到的大部分問題在行業(yè)中已得到相應的解決。對這方面感興趣的可以去了解下現(xiàn)在解決這些問題的中間件實現(xiàn)方案。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • 簡述Docker安裝Tomcat鏡像并部署web項目

    簡述Docker安裝Tomcat鏡像并部署web項目

    這篇文章主要介紹了簡述Docker安裝Tomcat鏡像并部署web項目,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Docker安全開放遠程訪問連接權限方式

    Docker安全開放遠程訪問連接權限方式

    文章介紹了如何配置Docker以實現(xiàn)遠程訪問、開啟認證和通信加密,包括生成證書和私鑰、配置Docker守護進程以及在IDEA和Maven中連接Docker服務的方法
    2024-11-11
  • Docker 下載鏡像慢的問題解決方法

    Docker 下載鏡像慢的問題解決方法

    這篇文章主要介紹了Docker 解決下載鏡像慢的問題的相關資料,這里提供了具體實現(xiàn)方法,需要的朋友可以參考下
    2016-11-11
  • 深入解析docker三種網(wǎng)絡模式

    深入解析docker三種網(wǎng)絡模式

    這篇文章主要介紹了docker三種網(wǎng)絡模式,分別是bridge橋接模式,host主機模式,none無網(wǎng)絡模式,每種模式給大家介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • mac上使用docker搭建gitlab全過程

    mac上使用docker搭建gitlab全過程

    本文詳細介紹了在Mac上使用Docker搭建GitLab的過程,包括安裝Docker、拉取GitLab鏡像、啟動容器、訪問和配置GitLab等步驟,同時,還提供了重置管理員密碼的方法,幫助解決常見問題
    2024-11-11
  • docker-compose如何實現(xiàn)滾動更新

    docker-compose如何實現(xiàn)滾動更新

    這篇文章主要介紹了docker-compose如何實現(xiàn)滾動更新方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring Boot應用通過Docker發(fā)布部署的流程分析

    Spring Boot應用通過Docker發(fā)布部署的流程分析

    將Spring Boot項目部署到docker中有兩種方法,手動部署和插件部署,本文通過實例代碼介紹了idea創(chuàng)建spring boot項目的詳細過程,感興趣的朋友一起看看吧
    2021-09-09
  • 解決nacos啟動時防火墻開啟8848的坑

    解決nacos啟動時防火墻開啟8848的坑

    最近操作Nacos時遭遇8848端口無法訪問的問題,嘗試通過安全組和firewall配置仍無法解決,最終發(fā)現(xiàn),firewall對Docker使用專門的作用域,需要在相應作用域下開放端口,務必檢查firewall中針對Docker的設置,確保8848端口在正確的作用域內(nèi)被允許通行
    2022-10-10
  • docker刪除拉取的鏡像釋放內(nèi)存的操作方法

    docker刪除拉取的鏡像釋放內(nèi)存的操作方法

    kali內(nèi)存滿了,釋放一下內(nèi)存,通過查看本地鏡像,刪除本地鏡像,文中給大家介紹了docker image ls詳解,對docker刪除拉取的鏡像釋放內(nèi)存相關知識操作感興趣的朋友一起看看吧
    2023-01-01
  • Docker部署安裝Nginx的詳細過程

    Docker部署安裝Nginx的詳細過程

    Nginx 是一款高性能的 web 服務器、反向代理服務器以及電子郵件(IMAP/POP3/SMTP)代理服務器,這篇文章主要介紹了Docker部署安裝Nginx,需要的朋友可以參考下
    2024-04-04

最新評論

龙江县| 南靖县| 五峰| 武宣县| 衡水市| 通州区| 沐川县| 台南市| 江城| 贵阳市| 高台县| 加查县| 华容县| 盱眙县| 澜沧| 昌邑市| 涟源市| 开远市| 彩票| 家居| 九龙城区| 澜沧| 泸西县| 广丰县| 武山县| 阿坝| 拜城县| 石屏县| 南安市| 西和县| 太原市| 陵水| 象州县| 格尔木市| 大新县| 福海县| 诏安县| 河池市| 清流县| 夏津县| 张家口市|