一、拉取MySQL镜像

通过终端获取最新的MySQL镜像

docker pull mysql/mysql-server

二、创建MySQL数据库容器配置文件对应目录

我们在当前用户下创建一组目录,用来存放MySQL容器配置文件,(Linux下可以省略此步骤)参考下图:

注意:MySQL8版本以后,需要在映射文件中加入 mysql-files,否则MySQL数据库容器会创建失败。

因为在MacOS下不支持vi/vim 直接修改my.cnf文件,也不支持apt-get安装vim,所以需要在本地新建两个my.cnf映射文件。(Linux下可以通过vim直接修改配置文件)

master主库对应的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从库对应的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

三、创建两个MySQL数据库容器

创建master主数据库容器

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

创建slave从数据库容器

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

如下图,说明两个MySQL容器创建成功

此时我们打开Docker仪表板可以看到,两个容器已经运行起来了。而且端口就是我们之前创建的对应端口

我们通过Navicat连接会报哦1130错误,是因为所连接的用户账户没有远程连接的权限。需要更改mysql数据库里的user表里的host项

把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)

四、主从数据库配置

master主数据库配置:

//进入master主数据容器
docker exec -it mysql-master mysql -uroot -p123456
//创建一个用户来同步数据,每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';(这样有可能在slave创建与master连接时报错)

CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//对用户进行授权
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
//查看状态,记住File、Position的值,在Slave中将用到
show master status;
//查询master容器的IP,会在slave设置主库连接时用到
docker inspect monemysql | grep IPA;

mster的状态,File mysql-bin.000003  Position 661

slave从数据库配置:

//进入slave从数据容器
docker exec -it mysql-slave mysql -uroot -p123456
//设置主库链接 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;
//启动从库同步
start slave;
//查看状态
show slave status\G;
//如果 show slave status\G命令结果中出现:
//Slave_IO_Running: Yes
//Slave_SQL_Running: Yes
//以上两项都为Yes,那说明没问题了。
//否则,从新配置从数据
stop slave;
reset slave all;

启动从库同步成功

五、主从验证

我们在master上创建一个数据库,然后创建一张表,再插入一条数据,相应的slave也会增加;

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;

在执行命令之前,主从数据库数量相同;

master执行命令之后slave增加对应数据

到此,MySQL的主从复制就设置完成了。(测试环境,MacOS M1 ARM64机器,Docker,MySQL 8.0.27)

MacOS使用Docker创建MySQL主从数据库的更多相关文章

  1. MacOS使用Docker创建MySQL主主数据库

    主从同步配置可以参考上一篇MacOS使用Docker创建MySQL主从数据库 一.创建MySQL数据库容器配置文件对应目录 我们在当前用户下创建一组目录,用来存放MySQL容器配置文件,(Linux下 ...

  2. Windows系统环境下创建mysql主从数据库方法(双向主从复制)

    创建mysql主从数据库方法(双向主从复制) (一)Windows系统下的MySQL主从复制(单向复制) (1)环境说明: 1,Mysql版本:mysql5.7.20(主从机mysql版本必须一致) ...

  3. 使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

  4. docker安装mysql主从

    docker安装mysql主从 启动主库: 1.docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5 ...

  5. Docker容器启动Mysql,Docker实现Mysql主从,读写分离

    Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...

  6. Docker构建mysql主从

    一.为什么要搭建主从架构呢 1.数据安全,可以进行数据的备份. 2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器.从而缓解数据库访问的压力 3.故障 ...

  7. springboot多数据源配合docker部署mysql主从实现读写分离

    本篇主要有两部分: 1.使用docker部署mysql主从 实现主从复制 2.springboot项目多数据源配置,实现读写分离 一.使用docker部署mysql主从 实现主从复制 此次使用的是wi ...

  8. MySQL主从数据库同步延迟问题解决(转)

    最近在做MySQL主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些讲解,记录下来以便自己学习: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务 ...

  9. Docker创建MySQL集装箱

    原文链接:Docker创建MySQL集装箱 这样做的目的是创建一个MySQL的image,出来的容器里自己主动启动MySQL服务接受外部连接 步骤: 1. 首先创建一个文件夹并在文件夹下创建一个Doc ...

随机推荐

  1. git 新建分支并切换到该分支_Git 从master拉取代码创建新分支 并且再将修改合并到master...

    开发过程中会从master主分支copy到另一个开发分支: 1.切换到master分支 git  checkout  master 2.获取最新的代码 git pull origin master 3 ...

  2. Label -- 跳出循环的思路

    let num = 0 ; outPoint: //label for (let i = 0; i < 10; i++) { for ( let j = 0; j < 10; j++) { ...

  3. javaWeb - 1 — servlet — 更新完毕

    1.先来聊一些javaWeb相关的知识 简单了解一下:web的发展史 1).web就是网页的意思嘛 2).web的分类 (1).静态web 使用HTML.CSS技术,主要包括图片和文本 优点:简单,只 ...

  4. 巩固javaweb的第二十二天

    巩固内容: 使用表单数据 : 要对用户输入的信息进行验证,需要先获取输入信息.每个表单元素都属于一个 form 表单,要获取信息,需要先获取 form,然后访问表单元素的值. 有两种方式可以获取 fo ...

  5. 7个连环问揭开java多线程背后的弯弯绕

    摘要:很多java入门新人一想到java多线程, 就会觉得很晕很绕,什么可见不可见的,也不了解为什么sync怎么就锁住了代码. 本文分享自华为云社区<java多线程背后的弯弯绕绕到底是什么? 7 ...

  6. Hive(八)【行转列、列转行】

    目录 一.行转列 相关函数 concat concat_ws collect_set collect_list 需求 需求分析 数据准备 写SQL 二.列转行 相关函数 split explode l ...

  7. C/C++ Qt 数据库与SqlTableModel组件应用

    SqlTableModel 组件可以将数据库中的特定字段动态显示在TableView表格组件中,通常设置QSqlTableModel类的变量作为数据模型后就可以显示数据表内容,界面组件中则通过QDat ...

  8. How exactly does Google AdWords work?

    The key to how Google AdWords works is the Quality Score. Quality Score is generally how well an ad ...

  9. Equinox OSGi服务器应用程序的配置步骤 (支持JSP页面)

    本文介绍在Eclipse里如何配置一个简单的基于Eclipse Equinox OSGi实现的Web应用程序,在它的基础上可以构造更加复杂的应用,本文使用的是Eclipse 3.3.1版本,如果你的E ...

  10. entfrm-app赋能entfrm零代码开发平台 开启多平台分发

    entfrm-app是基于uni-app 框架.使用 Vue.js 语法开发的移动端 App开源产品.它可以编译为 H5.IOS App.Android App.微信小程序.QQ小程序.钉钉小程序.支 ...