首页 > 数据库 >基于Docker搭建 Mysql8.0 主从架构

基于Docker搭建 Mysql8.0 主从架构

时间:2023-12-03 14:57:08浏览次数:35  
标签:slave server master usr mysql Mysql8.0 Docker local 主从

创建主从数据库文件夹

mkdir -p /usr/local/mysql/master1/conf
mkdir -p /usr/local/mysql/master1/data
mkdir -p /usr/local/mysql/slave1/conf
mkdir -p /usr/local/mysql/slave1/data

初始化主数据库配置文件

cd /usr/local/mysql/master1/conf
vi my.cnf
-------------------------------------------------------------------------------------------------
# 粘贴以下内容
[mysqld]
datadir = /usr/local/mysql/master1/data
character-set-server = utf8
lower-case-table-names = 1
# 主从复制-主机配置# 主服务器唯一 ID
server-id = 1
# 启用二进制日志
log-bin=mysql-bin
# 设置 logbin 格式
binlog_format = STATEMENT

初始化从数据库配置文件

cd /usr/local/mysql/slave1/conf
vi my.cnf
-------------------------------------------------------------------
# 粘贴以下内容
[mysqld]
datadir = /usr/local/mysql/slave1/data
character-set-server = utf8
lower-case-table-names = 1
# 主从复制-从机配置# 从服务器唯一 ID
server-id = 2
# 启用中继日志
relay-log = mysql-relay

文件夹授权

chmod -R 777 /usr/local/mysql

Docker 构建 Mysql8.0 主数据库容器

# 构建主数据库容器
docker run --name=mysql-master-1 \
--privileged=true \
-p 3306:3306 \
-v /usr/local/mysql/master1/data/:/var/lib/mysql \
-v /usr/local/mysql/master1/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/mysql/master1/mysql-files/:/var/lib/mysql-files/ \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0 --lower_case_table_names=1

Docker 构建 Mysql8.0 从数据库容器

# 构建从数据库容器
docker run --name=mysql-slave-1 \
--privileged=true \
-p 3307:3306 \
-v /usr/local/mysql/slave1/data/:/var/lib/mysql \
-v /usr/local/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/mysql/slave1/mysql-files/:/var/lib/mysql-files/ \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0 --lower_case_table_names=1

编写主数据库的复制配置文件

# 进入主数据库
docker exec -it mysql-master-1 /bin/bash
mysql -uroot -p

# 创建用户,设置主从同步的账户名
create user 'root-slave'@'%' identified with mysql_native_password by '123456';
# 授权
grant replication slave on *.* to 'root-slave'@'%';
# 刷新权限
flush privileges;

# 查询 server_id 值
show variables like 'server_id';

# 也可临时(重启后失效)指定 server_id 的值(主从数据库的 server_id 不能相同)
set global server_id = 1;

# 查询 Master 状态,并记录 File 和 Position 的值,这两个值用于和下边的从数据库中的 change 那条 sql 中的 master_log_file,master_log_pos 参数对齐使用
show master status;

# 重置下 master 的 binlog 位点
reset master;

image-20231203111832173

编写从数据库的复制配置文件

# 进入从数据库
docker exec -it mysql-slave-1 /bin/bash
mysql -uroot -p

# 验证 slave 用户是否可用
# 查询 server_id 值
show variables like 'server_id';

# 也可临时(重启后失效)指定 server_id 的值(主从数据库的 server_id 不能相同)
set global server_id = 2;

# 若之前设置过同步,请先重置
stop slave;
reset slave;

# 设置主数据库
change master to master_host='主机的ip',master_port=3306,master_user='root-slave',master_password='123456',master_log_file='mysqlbin.000001',master_log_pos=156;
# 开始同步
start slave;

# 若出现错误,则停止同步,重置后再次启动
stop slave;
reset slave;
start slave;

# 查询 Slave 状态
show slave status;

#最后需要查看是否配置成功
# 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为 yes,则证明配置成功。若为 no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异 常值。

注意点

这里要注意,如果 mysql 的同步出现了问题,如果不担心 binlog 丢失的话,其实可以尝试重置 master 的 binlog 信息,使用 reset master 命令去清空之前的 binlog 日志即可,注意正在写入的 binlog 不要随意清空,很危险。

标签:slave,server,master,usr,mysql,Mysql8.0,Docker,local,主从
From: https://www.cnblogs.com/pingoo/p/17872981.html

相关文章

  • Docker运行centos7
    Docker安装centos7:步骤:1.使用Docker创建虚拟网络:#创建一个网段为192.168.0.0/24的虚拟网络,名字为centosNetdockernetworkcreate--subnet=192.168.0.0/24centosNet#查看dockernetworkls2.创建容器;#"--privileged=true"参数使得容器具有对主机系统设备和内......
  • docker
    FROM 基础镜像,父类镜像RUN容器构建时执行命令shell命令exec命令EXPOSE对外暴露的端口WORKDIR落脚点,指定默认进来后的目录USER权限ENV设置环境变量VOLUME挂载COPY将宿主机目录拷贝进镜像ADD同COPYCMD启动容器后干的事情(与R......
  • 在Docker中安装Redis
    拉取Redis镜像:首先,你需要从DockerHub上拉取Redis的镜像。你可以使用以下命令来完成这个操作1:dockerpullredis:latest创建数据目录和配置文件:在你的宿主机上创建一个目录来存放Redis的配置文件和数据。你还需要为这个目录设置适当的权限1:mkdir-p/root/docker/redis/datamk......
  • 【Docker】Linux路由连接两个不同网段namespace,连接namespace与主机
    如果两个namespace处于不同的子网中,那么就不能通过bridge进行连接了,而是需要通过路由器进行三层转发。然而Linux并未像提供虚拟网桥一样也提供一个虚拟路由器设备,原因是Linux自身就具备有路由器功能。路由器的工作原理是这样的:路由器上有2到多个网络接口,每个网络接口处于不同的三层......
  • 【Docker】从命名空间和路由角度探究Docker的bridge网络
    桥接网络是Docker的默认网络模式。在桥接网络中,Docker会为每个容器创建一个虚拟网络接口,并为容器分配一个IP地址。容器可以通过桥接网络与主机和其他容器进行通信,也能暴露端口供外部访问。容器之间的通信原理首先我们创建两个容器:$dockercontainerrun-d--rm--namebox1busyb......
  • docker 安装mysql 8.0.26
    sudodockerpullmysql:8.0.26创建数据目录和配置文件:在你的宿主机上创建一个目录来存放MySQL的配置文件和数据。你还需要为这个目录设置适当的权限1:sudomkdir-p/data/mysql8.0/conf/data/mysql8.0/data/data/mysql8.0/logssudochmod-R755/data/mysql8.0/conf/data/......
  • 快速配置mysql(非docker)
    蠢新从大二开始用起mysql,直到工作了还需要去网上找博客查怎么装。Windows不管,因为我自己的工位电脑已经有了。以下的操作为假设你有一台腾讯云的服务器,或者版本至少在20以上的Ubuntu。root用户登录。使用包管理器安装mysql8.0apt-getupdateapt-getinstallmysql-serversys......
  • MySQL8.0在Ubuntu系统安装
    目录前言一、Mysql是什么?二、安装步骤1.安装操作需root权限:2.更新apt仓库信息3.查询库中mysql版本3.安装mysql4.启动MySQL5.登陆MySQL设置密码6.设置密码7.退出MySQL控制台8.对MySQL进行初始化1.输入密码:2.是否开启密码验证插件,如果需要增强密码安全性,输入y并回车,不需要直接回车(本......
  • mac上面运行docker
    docker简介docker是一种容器技术。参考:https://cloud-atlas.readthedocs.io/zh-cn/latest/docker/startup/introduce_docker.html在mac中启动docker服务launchctllist|grepdocker#查看是否启动了服务open/Applications/Docker.app&#如果已经通过img安装了dock......
  • [Docker]如何添加文件卷到已存在的docker容器
    情景描述在业务部署的前期,docker只映射了一部分文件卷,在业务运行一段时间后,发现还有新的文件卷需要被映射,那如何快速实现?对于一个已经存在的容器Container,添加文件卷不能像新建容器时那样直接使用-v参数操作。操作前提是:你至少需要关停容器一次,需要计划停机时间和日期(规划),通知受影......