docker實現MySQL的主從復制
什么是主從復制
MySQL 主從復制是指數據可以從一個MySQL數據庫服務器主節(jié)點復制到一個或多個從節(jié)點。MySQL 默認采用異步復制方式,這樣從節(jié)點不用一直訪問主服務器來更新自己的數據,數據的更新可以在遠程連接上進行,從節(jié)點可以復制主數據庫中的所有數據庫或者特定的數據庫,或者特定的表。
為什么主從復制
- 在業(yè)務復雜的系統(tǒng)中,有這么一個情景,有一句sql語句需要鎖表,導致暫時不能使用讀的服務,那么就很影響運行中的業(yè)務,使用主從復制,讓主庫負責寫,從庫負責讀,這樣,即使主庫出現了鎖表的情景,通過讀從庫也可以保證業(yè)務的正常運行。
- 做數據的熱備,主庫宕機后能夠及時替換主庫,保證業(yè)務可用性。
- 架構的擴展。業(yè)務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁盤I/O訪問的頻率,提高單個機器的I/O性能。
搭建步驟
1.拉取鏡像
docker pull mysql:5.7
2.運行主從
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

3.進入/mydata/mysql-master/conf目錄下新建my.cnf
在主機下:
cd /mydata/mysql-master/conf vim my.cnf
[mysqld] ## 設置server_id,同一局域網中需要唯一 server_id=101 ## 指定不需要同步的數據庫名稱 binlog-ignore-db=mysql ## 開啟二進制日志功能 log-bin=mall-mysql-bin ## 設置二進制日志使用內存大?。ㄊ聞眨? binlog_cache_size=1M ## 設置使用的二進制日志格式(mixed,statement,row) binlog_format=mixed ## 二進制日志過期清理時間。默認值為0,表示不自動清理。 expire_logs_days=7 ## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。 ## 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致 slave_skip_errors=1062
4.修改完配置后重啟master實例
docker restart mysql-master
5.進入mysql-master容器
docker exec -it mysql-master /bin/bash mysql -uroot -proot
6.master容器實例內創(chuàng)建數據同步用戶
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
7.新建從服務器容器實例3308
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
8./mydata/mysql-slave/conf目錄下新建my.cnf
cd /mydata/mysql-slave/conf vim my.cnf
[mysqld] ## 設置server_id,同一局域網中需要唯一 server_id=102 ## 指定不需要同步的數據庫名稱 binlog-ignore-db=mysql ## 開啟二進制日志功能,以備Slave作為其它數據庫實例的Master時使用 log-bin=mall-mysql-slave1-bin ## 設置二進制日志使用內存大小(事務) binlog_cache_size=1M ## 設置使用的二進制日志格式(mixed,statement,row) binlog_format=mixed ## 二進制日志過期清理時間。默認值為0,表示不自動清理。 expire_logs_days=7 ## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。 ## 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致 slave_skip_errors=1062 ## relay_log配置中繼日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave將復制事件寫進自己的二進制日志 log_slave_updates=1 ## slave設置為只讀(具有super權限的用戶除外) read_only=1
9.修改完配置后重啟slave實例
docker restart mysql-slave
10.在主數據庫中查看主從同步狀態(tài)
show master status;
11.進入mysql-slave容器
docker exec -it mysql-slave /bin/bash mysql -uroot -proot
12.在從數據庫中配置主從復制
change master to master_host='192.168.196.100', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
master_host:主數據庫的IP地址; master_port:主數據庫的運行端口; master_user:在主數據庫創(chuàng)建的用于同步數據的用戶賬號; master_password:在主數據庫創(chuàng)建的用于同步數據的用戶密碼; master_log_file:指定從數據庫要復制數據的日志文件,通過查看主數據的狀態(tài),獲取File參數; master_log_pos:指定從數據庫從哪個位置開始復制數據,通過查看主數據的狀態(tài),獲取Position參數; master_connect_retry:連接失敗重試的時間間隔,單位為秒。
13.在從數據庫中查看主從同步狀態(tài)
show slave status \G;

14,在從數據庫中開啟主從同步
mysql>start slave;
15,查看從數據庫狀態(tài)發(fā)現已經同步
show slave status \G; show master status \G;
16.主從復制測試
主機新建庫-使用庫-新建表-插入數據
從機使用庫-查看記錄
-- 創(chuàng)建數據庫
CREATE DATABASE test;
-- 切換到 test 數據庫
USE test;
-- 創(chuàng)建表 test_table
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT
);
-- 插入數據
INSERT INTO test_table (name, age) VALUES
('John Doe', 25),
('Jane Smith', 30),
('Bob Johnson', 22);
-- 查詢插入的數據
SELECT * FROM test_table;到此這篇關于docker實現MySQL的主從復制的文章就介紹到這了,更多相關docker MySQL主從復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
.netcore 使用surging框架發(fā)布到docker
這篇文章主要介紹了netcore 使用surging框架發(fā)布到docker,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
微信小程序Docker+Nginx環(huán)境配置業(yè)務域名驗證文件的操作方法
本文介紹了如何在DockerCompose+Nginx環(huán)境下配置并訪問靜態(tài)驗證文件,首先下載驗證文件并將其掛載到容器中,然后修改Nginx配置文件使其能夠正確返回請求路徑下的靜態(tài)文件,最后,測試訪問驗證文件并提交業(yè)務域名,感興趣的朋友跟隨小編一起看看吧2025-01-01
如何解決docker-compose網段路由沖突,docker-compose自定義網絡
這篇文章主要介紹了如何解決docker-compose網段路由沖突,docker-compose自定義網絡問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
windows server 2016安裝docker的方法步驟
這篇文章主要介紹了windows server 2016安裝docker的方法步驟,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06
如何解決mysql配置文件錯誤導致在docker中無法啟動的問題
這篇文章主要介紹了如何解決mysql配置文件錯誤導致在docker中無法啟動的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

