MacOS使用Docker創(chuàng)建MySQL主從數(shù)據(jù)庫(kù)的方法
一、拉取MySQL鏡像
通過(guò)終端獲取最新的MySQL鏡像
docker pull mysql/mysql-server
二、創(chuàng)建MySQL數(shù)據(jù)庫(kù)容器配置文件對(duì)應(yīng)目錄
我們?cè)诋?dāng)前用戶下創(chuàng)建一組目錄,用來(lái)存放MySQL容器配置文件,(Linux下可以省略此步驟)參考下圖:

注意:MySQL8版本以后,需要在映射文件中加入 mysql-files,否則MySQL數(shù)據(jù)庫(kù)容器會(huì)創(chuàng)建失敗。
因?yàn)樵贛acOS下不支持vi/vim 直接修改my.cnf文件,也不支持apt-get安裝vim,所以需要在本地新建兩個(gè)my.cnf映射文件。(Linux下可以通過(guò)vim直接修改配置文件)
master主庫(kù)對(duì)應(yīng)的my.cnf配置文件為:
[mysqld] server_id = 1 log-bin= mysql-bin read-only=0 replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema
slave從庫(kù)對(duì)應(yīng)的my.cnf配置文件為:
[mysqld] server_id = 2 log-bin= mysql-bin read-only=1 replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema
三、創(chuàng)建兩個(gè)MySQL數(shù)據(jù)庫(kù)容器
創(chuàng)建master主數(shù)據(jù)庫(kù)容器
docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Users/yumaster/test/mysql_master_slave/master/data:/var/lib/mysql -v /Users/yumaster/test/mysql_master_slave/master/conf/my.cnf:/etc/mysql/my.cnf -v /Users/yumaster/test/mysql_master_slave/master/mysql-files:/var/lib/mysql-files mysql/mysql-server
創(chuàng)建slave從數(shù)據(jù)庫(kù)容器
docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Users/yumaster/test/mysql_master_slave/slave/data:/var/lib/mysql -v /Users/yumaster/test/mysql_master_slave/slave/conf/my.cnf:/etc/mysql/my.cnf -v /Users/yumaster/test/mysql_master_slave/slave/mysql-files:/var/lib/mysql-files mysql/mysql-server
如下圖,說(shuō)明兩個(gè)MySQL容器創(chuàng)建成功

此時(shí)我們打開(kāi)Docker儀表板可以看到,兩個(gè)容器已經(jīng)運(yùn)行起來(lái)了。而且端口就是我們之前創(chuàng)建的對(duì)應(yīng)端口

我們通過(guò)Navicat連接會(huì)報(bào)哦1130錯(cuò)誤,是因?yàn)樗B接的用戶賬戶沒(méi)有遠(yuǎn)程連接的權(quán)限。需要更改mysql數(shù)據(jù)庫(kù)里的user表里的host項(xiàng)
把localhost改成%
具體步驟:
mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select host from user where user='root'; +-----------+ | host | +-----------+ | localhost | +-----------+ 1 row in set (0.01 sec) mysql> update user set host='%' where user = 'root'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select host from user where user='root'; +------+ | host | +------+ | % | +------+ 1 row in set (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
四、主從數(shù)據(jù)庫(kù)配置
master主數(shù)據(jù)庫(kù)配置:
//進(jìn)入master主數(shù)據(jù)容器 docker exec -it mysql-master mysql -uroot -p123456 //創(chuàng)建一個(gè)用戶來(lái)同步數(shù)據(jù),每個(gè)slave使用標(biāo)準(zhǔn)的MySQL用戶名和密碼連接master。進(jìn)行復(fù)制操作的用戶會(huì)授予REPLICATION SLAVE 權(quán)限。mysql8 之前的版本中加密規(guī)則是mysql_native_password,而在mysql8之后,加密規(guī)則是caching_sha2_password CREATE USER 'slave'@'%' IDENTIFIED BY '123456';(這樣有可能在slave創(chuàng)建與master連接時(shí)報(bào)錯(cuò)) 或 CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; //對(duì)用戶進(jìn)行授權(quán) GRANT REPLICATION SLAVE ON *.* to 'slave'@'%'; //查看狀態(tài),記住File、Position的值,在Slave中將用到 show master status; //查詢master容器的IP,會(huì)在slave設(shè)置主庫(kù)連接時(shí)用到 docker inspect mysql-master | grep IPA;
mster的狀態(tài),F(xiàn)ile mysql-bin.000003 Position 661

slave從數(shù)據(jù)庫(kù)配置:
//進(jìn)入slave從數(shù)據(jù)容器 docker exec -it mysql-slave mysql -uroot -p123456 //設(shè)置主庫(kù)鏈接 change master to change master to master_host='172.17.0.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=661,master_port=3306; //啟動(dòng)從庫(kù)同步 start slave; //查看狀態(tài) show slave status\G; //如果 show slave status\G命令結(jié)果中出現(xiàn): //Slave_IO_Running: Yes //Slave_SQL_Running: Yes //以上兩項(xiàng)都為Yes,那說(shuō)明沒(méi)問(wèn)題了。 //否則,從新配置從數(shù)據(jù) stop slave; reset slave all;
啟動(dòng)從庫(kù)同步成功

五、主從驗(yàn)證
我們?cè)趍aster上創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),然后創(chuàng)建一張表,再插入一條數(shù)據(jù),相應(yīng)的slave也會(huì)增加;
create database master_slave_demo;
use master_slave_demo;
create table userinfo(username varchar(50),age int);
insert into userinfo values('Toulon',25);
select * from userinfo;
在執(zhí)行命令之前,主從數(shù)據(jù)庫(kù)數(shù)量相同;

master執(zhí)行命令之后slave增加對(duì)應(yīng)數(shù)據(jù)

可以發(fā)現(xiàn)主庫(kù)新增的數(shù)據(jù)已經(jīng)同步過(guò)來(lái)了,MySQL的主從復(fù)制就設(shè)置完成了。(測(cè)試環(huán)境,MacOS M1 ARM64機(jī)器,Docker,MySQL 8.0.27)
到此這篇關(guān)于MacOS使用Docker創(chuàng)建MySQL主從數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)Docker創(chuàng)建MySQL主從數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker mysql 主從配置詳解及實(shí)例
- 使用Docker容器搭建MySql主從復(fù)制
- 使用Docker部署MySQL 5.7&8.0主從集群的方法步驟
- 詳解Docker方式實(shí)現(xiàn)MySql 主從復(fù)制(實(shí)踐篇)
- 基于Docker如何實(shí)現(xiàn)MySQL主從復(fù)制詳解
- 詳解如何利用docker快速構(gòu)建MySQL主從復(fù)制環(huán)境
- docker實(shí)現(xiàn)mysql主從復(fù)制的示例代碼
- Docker-Compose實(shí)現(xiàn)Mysql主從的示例代碼
- docker實(shí)現(xiàn)MySQL主從雙備的示例代碼
- docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn)
相關(guān)文章
Windows?Server?2016中文版安裝docker的詳細(xì)步驟
因業(yè)務(wù)需要所以需要安裝Docker,但是在途中遇到了一些問(wèn)題,所以下面這篇文章主要給大家介紹了關(guān)于Windows?Server?2016中文版安裝docker的詳細(xì)步驟,需要的朋友可以參考下2022-07-07
解決docker網(wǎng)絡(luò)錯(cuò)誤(network bridge not found)
這篇文章主要介紹了解決docker網(wǎng)絡(luò)錯(cuò)誤(network bridge not found)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Docker Elasticsearch集群部署的操作過(guò)程
這篇文章主要介紹了Docker Elasticsearch集群部署的操作過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03
idea整合docker快速部署springboot應(yīng)用的詳細(xì)過(guò)程
這篇文章主要介紹了idea整合docker快速部署springboot應(yīng)用,文中給大家提到關(guān)于安裝docker步驟,idea連接遠(yuǎn)程docker的方法,需要的朋友可以參考下2021-10-10
docker.service啟動(dòng)失敗:Unit not found的原因及解決辦法
這篇文章主要介紹了docker.service啟動(dòng)失?。篣nit not found的原因分析及解決辦法,需要的朋友可以參考下2017-04-04
Docker 容器互聯(lián)互通的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker 容器互聯(lián)互通,本文講解不同網(wǎng)絡(luò)下的容器可以通過(guò)加入同一個(gè)docker網(wǎng)絡(luò),來(lái)訪問(wèn)該docker網(wǎng)絡(luò)下的容器,并且既可以通過(guò)容器ip也可以通過(guò)容器名連接,非常方便,需要的朋友可以參考下2022-10-10
使用Docker容器部署MongoDB并支持遠(yuǎn)程訪問(wèn)及遇到的坑
MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的,今天通過(guò)本文給大家介紹使用Docker容器部署MongoDB并支持遠(yuǎn)程訪問(wèn)及遇到的坑,感興趣的朋友一起看看吧2022-07-07
Docker容器搭建運(yùn)行python的深度學(xué)習(xí)環(huán)境的方法
本文主要介紹了Docker容器搭建運(yùn)行python的深度學(xué)習(xí)環(huán)境的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
docker部署firefox瀏覽器實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)
在使用docker時(shí),默認(rèn)情況下只能在本地進(jìn)行訪問(wèn),本文就來(lái)介紹一下docker部署firefox瀏覽器實(shí)現(xiàn)遠(yuǎn)程訪問(wèn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

