一文教會你在Docker容器中實現(xiàn)Mysql主從復(fù)制
一 主從復(fù)制概念
在數(shù)據(jù)庫中主從復(fù)制``表示有一個主數(shù)據(jù)庫,多個從數(shù)據(jù)庫,即,主數(shù)據(jù)庫對外提供讀寫功能,從數(shù)據(jù)庫對外提供讀的功能。
Mysql默認(rèn)采用異步復(fù)制方式,這樣從節(jié)點(diǎn)不用一直訪問主服務(wù)器來更新自己的數(shù)據(jù),數(shù)據(jù)的更新可以實時在遠(yuǎn)端進(jìn)行。
二 主從復(fù)制的優(yōu)勢
- 高可用,可用于故障切換,如果主庫掛了,則可以切到從庫
- 讀寫分離,減少主庫壓力,從而提高性能,主庫負(fù)責(zé)寫,從庫負(fù)責(zé)讀
- 可備份數(shù)據(jù),避免影響業(yè)務(wù)
三 Docker容器實現(xiàn)Mysql主從復(fù)制
下面開始進(jìn)入實戰(zhàn)環(huán)節(jié),一步步的教大家如何搭建主從數(shù)據(jù)庫,小伙伴趕快練習(xí)一下吧。
3.1 創(chuàng)建主服務(wù)器容器
主服務(wù)器端口號為3307
docker run -p 3307:3306 --name mysql-master \ -v /Users/zengzhaoxia/mydata/mysql-master/log:/var/log/mysql \ -v /Users/zengzhaoxia/mydata/mysql-master/data:/var/lib/mysql \ -v /Users/zengzhaoxia/mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
創(chuàng)建完成之后,別忘記再 docker ps一下,確保是否創(chuàng)建成功
補(bǔ)充:如果MYSQL_ROOT_PASSWORD的密碼設(shè)置為root,當(dāng)?shù)卿洈?shù)據(jù)庫時可能會報和權(quán)限相關(guān)的錯誤,所以,不妨將密碼改為數(shù)字試試,比如123456。
3.2 新建主配置文件 my.cnf
進(jìn)入/mydata/mysql-master/conf目錄下新建my.cnf,my.cnf 內(nèi)容如下:
[mysqld] ## 設(shè)置server_id,同一局域網(wǎng)中需要唯一 server_id=101 ##指定不需要同步的數(shù)據(jù)庫名稱 binlog-ignore-db=mysql ##開啟二進(jìn)制日志功能 log-bin=mall-mysql-bin ## 設(shè)置二進(jìn)制日志使用內(nèi)存大?。ㄊ聞?wù)) binlog_cache_size=1M ## 設(shè)置使用的二進(jìn)制日志格式(mixed,statement,row) binlog_format=mixed ## 二進(jìn)制日志過期清理時間,默認(rèn)值為0,表示不自動清理 expire_logs_days=7 ## 跳過主從復(fù)制中遇到的所有錯誤或指定類型的錯誤,避免slave端復(fù)制中斷。 ## 如:1062 錯誤是指一些主鍵重復(fù),1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致 slave_skip_errors=1062
切記切記,此處一定是 [mysqld],不要寫成了[mysql]。
3.3 重啟master容器實例
因為第二步修改了配置文件,所以需要重啟docker容器
docker restart mysql-master docker ps
3.4 進(jìn)入mysql-master容器
進(jìn)入mysql-master容器,并登錄數(shù)據(jù)庫,可以看到當(dāng)前有哪些默認(rèn)的數(shù)據(jù)庫。
docker exec -it mysql-master /bin/bash mysql -uroot -p show databases;
3.5 在主服務(wù)器中創(chuàng)建用戶并授權(quán)
##1. 建立用戶 mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; ##2. 授權(quán) mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
3.6 創(chuàng)建從服務(wù)器容器
從服務(wù)器容器的端口號為:3308
docker run -p 3308:3306 --name mysql-slave \ -v /Users/zengzhaoxia/mydata/mysql-slave/log:/var/log/mysql \ -v /Users/zengzhaoxia/mydata/mysql-slave/data:/var/lib/mysql \ -v /Users/zengzhaoxia/mydata/mysql-slave/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
創(chuàng)建完成之后,別忘記再 docker ps
一下,確保是否創(chuàng)建成功
3.7 新建主配置文件 my.cnf
進(jìn)入/mydata/mysql-slave/conf目錄下新建my.cnf,my.cnf內(nèi)容如下:
[mysqld] ## 設(shè)置server_id,同一局域網(wǎng)中需要唯一 server_id=102 ##指定不需要同步的數(shù)據(jù)庫名稱 binlog-ignore-db=mysql ##開啟二進(jìn)制日志功能,以備slave作為其他數(shù)據(jù)庫實例的master時使用 log-bin=mall-slave1-bin ## 設(shè)置二進(jìn)制日志使用內(nèi)存大小(事務(wù)) binlog_cache_size=1M ## 設(shè)置使用的二進(jìn)制日志格式(mixed,statement,row) binlog_format=mixed ## 二進(jìn)制日志過期清理時間,默認(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ù)制事件寫進(jìn)自己的二進(jìn)制日志 log_slave_updates=1 ## slave 設(shè)置為只讀(具有super權(quán)限的用戶除外) read_only=1
3.8 重啟slave容器實例
因為修改了配置,所以需要重啟 slave 實例
docker restart mysql-slave docker ps
3.9 在主數(shù)據(jù)庫中查看主從同步狀態(tài)
在主服務(wù)器中輸入如下命令:
mysql> show master status;
3.10 進(jìn)入mysql-slave容器
docker exec -it mysql-slave /bin/bash
3.11 在從數(shù)據(jù)庫中配置主從復(fù)制
change master to master_host='100.100.32.185',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000002',master_log_pos=617,master_connect_retry=30;
其中,
字段 | 含義 |
---|---|
master_host | 主數(shù)據(jù)庫的IP地址 |
master_port | 主數(shù)據(jù)庫的運(yùn)行端口 |
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 | 連接失敗重試的時間間隔,單位為秒 |
3.12 在從數(shù)據(jù)庫中查看主從同步狀態(tài)
mysql> show slave status \G; ## 加入 \G表示 豎排以鍵值對的形式顯示,主要觀察Slave_IO_Running和Slave_SQL_Running
3.13 在從數(shù)據(jù)庫中開啟主從同步
在從數(shù)據(jù)庫中操作,表示從數(shù)據(jù)庫同意接收數(shù)據(jù)
start slave;
3.14 查看從數(shù)據(jù)庫狀態(tài)是否同步
show slave status \G;
3.15 主從復(fù)制測試
驗證主要分為兩步,第一步在主數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù),第二步在從數(shù)據(jù)庫中查看數(shù)據(jù)。
1. 在主數(shù)據(jù)庫中新建數(shù)據(jù)庫db01,并在db01中新建表t1,并插入數(shù)據(jù) create database db01; use db01; create table t1(id int,name varchar(20)); insert into t1 values(1,'zeng'); 2. 在從數(shù)據(jù)庫中查詢 show databases;//會看到db01數(shù)據(jù)庫 use db01; select * from t1;
總結(jié)
到此這篇關(guān)于在Docker容器中實現(xiàn)Mysql主從復(fù)制的文章就介紹到這了,更多相關(guān)Docker容器實現(xiàn)Mysql主從復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker安裝mysql主從復(fù)制的實現(xiàn)步驟
- docker實現(xiàn)MySQL的主從復(fù)制
- Docker部署MySQL主從復(fù)制的實現(xiàn)
- Docker上部署mysql8主從復(fù)制的實現(xiàn)
- Docker搭建MySQL5.7主從復(fù)制的實現(xiàn)
- docker實現(xiàn)mysql主從復(fù)制的示例代碼
- 基于Docker的MySQL主從復(fù)制環(huán)境搭建的實現(xiàn)步驟
- 基于Docker如何實現(xiàn)MySQL主從復(fù)制詳解
- 詳解Docker方式實現(xiàn)MySql 主從復(fù)制(實踐篇)
- 詳解如何利用docker快速構(gòu)建MySQL主從復(fù)制環(huán)境
- 使用Docker容器搭建MySql主從復(fù)制
- Docker部署Mysql8.0.20并配置主從復(fù)制的實現(xiàn)步驟
相關(guān)文章
Docker安裝ElasticSearch和Kibana的問題及處理方法
這篇文章主要介紹了Docker安裝ElasticSearch和Kibana的問題及遇到問題解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02Docker tomcat的設(shè)置內(nèi)存大小配置方式
這篇文章主要介紹了Docker tomcat的設(shè)置內(nèi)存大小配置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Docker設(shè)置獲取環(huán)境變量的方法實現(xiàn)
本文主要介紹了Docker設(shè)置獲取環(huán)境變量的方法實現(xiàn),包含設(shè)置環(huán)境變量到使用獲取,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05用docker搭建selenium grid分布式環(huán)境實踐之路
這篇文章主要介紹了用docker搭建selenium grid分布式環(huán)境實踐之路,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03