首页 > 数据库 >Docker下搭建MySql主从复制

Docker下搭建MySql主从复制

时间:2023-08-09 22:35:31浏览次数:39  
标签:主从复制 slave log ## MySql mydata master mysql Docker

在Docker环境下搭建MySql主从复制,阅读此文章默认读者具备基础的Docker命令操作。

 

一、环境

1、Docker版本:Docker version 24.0.5, build ced0996

2、MySql:Server version: 5.7.36 MySQL Community Server (GPL)

3、Centos:CentOS Linux release 7.9.2009 (Core)

4、数据库Master端口3307,Slave端口3308

 

二、搭建主从复制

1、搭建主服务器示例

(1)使用docker命令搭建数据库主服务器,结果如下图:

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql/mysql-master/log:/var/log/mysql \
-v /mydata/mysql/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

# 参数说明:
# 以下三段都标识挂着容器卷到本地。冒号左边是宿主机地址,右边是mysql容器内的地址
#-v /mydata/mysql/mysql-master/log:/var/log/mysql 
#-v /mydata/mysql/mysql-master/data:/var/lib/mysql 
#-v /mydata/mysql/mysql-master/conf:/etc/mysql 

# 设置环境变量,设置mysql的登录密码
#-e MYSQL_ROOT_PASSWORD=123456

# -d: 后台运行容器并返回容器ID,也即启动守护式容器

 

(2)进入【/mydata/mysql/mysql-master/conf】目录下新建一个名为【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

 

(3)配置完成后【docker restart [容器ID]】重启MySql实例。

 

(4)进入mysql-master容器,查看服务是否可用。

 

(5)在mysql-master实例中创建用于同步的账号。

# 创建同步时使用的账号
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

# 给同步账号赋予权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

 

(6)使用docker命令搭建数据库从服务器,结果如下图:

# 使用相同的命令,修改下挂载目录和端口,创建数据库从服务器实例
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

 

(7)进入【/mydata/mysql/mysql-slave/conf】目录下新建一个名为【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

 

(8)修改完配置文件后使用【docker restart [容器ID]】重启【mysql-slave】服务

 

(9)在主数据库中查看主从状态

# 查看已经启动的docker服务
docker ps

# 进入主数据库实例
docker exec -it 40c03b5cfc8a /bin/bash

# 登录数据库
mysql -uroot -p

# 查看主从同步状态
show master status

 

(10) 进入从服务器并配置主从关系。从这里开始从库的容器ID跟之前的从库容器ID不一样了,是因为我不小心删除了原来的容器后又新起的一个MySQL容器。

 

(11)在从库中使用命令【show slave status \G;】查看主从的状态

 

(12)在从库中使用命令【start slave;】开启主从同步。出现两个Yes表示成功开启了主从同步。

 

2、测试主从同步

(1)在主库创建一个db库,再到从库查看这个库是否同步过来。

 

(2)在主库创建一个user表,并插入一条数据后再到从库查看表信息和数据是否同步。

 

标签:主从复制,slave,log,##,MySql,mydata,master,mysql,Docker
From: https://www.cnblogs.com/mklblog/p/17616711.html

相关文章

  • docker基础及安装
    一、镜像(Image):镜像是一个只读的模板或蓝图,包含着用于创建容器的操作系统、应用程序和所有依赖项。镜像是静态的,一旦创建,其内容不会发生变化,可以被多个容器同时使用。镜像可以通过Dockerfile定义创建过程,也可以从DockerHub或私有仓库中获取已构建好的镜像。docker镜像就好比是一个......
  • sudo apt update 报错:库 “https://download.docker.com/linux/ubuntu \ Release”
    sudoaptupdate报错:错误:10https://download.docker.com/linux/ubuntu\Release404NotFound[IP:143.204.126.13443]命中:11http://ppa.launchpad.net/rock-core/qt4/ubuntufocalInRelease命中:12https://dl.google.com/linux/chrome/debstableInRelease正......
  • mysql Statement接口
    Statement接口是Java执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。java.sql.Statement接口用于执行静态的SQL语句并返回执行结果。在默认情况下,同一时间每个Statement接口只能打开一个ResultSet对象。因此,如果读取一个ResultSet......
  • 优化 Java 项目 Docker 镜像内存占用
    目录优化Java项目Docker镜像内存占用原因分析解决方案优化Java项目Docker镜像内存占用原因分析这是由于容器中运行的Java应用程序使用的内存较大导致的。Java应用程序通常需要更多的内存来运行,因为它们需要构建对象和管理垃圾收集等操作。此外,Docker容器本身也会占用一......
  • MYSQL数据库 学习大全
    MYSQL数据库目前广泛的应用在各种个人、商务系统中,各种技术都比较成熟。把自己学习的一些过程总结一下,该文章设计到的内容都没有做太具体的阐述,只是一个简单的入门手册,假如想看更多内容可以参看MYSQL的联机手册。1MYSQL安装先下载安装包:mysql-5.0.27-win32.zipmysq......
  • docker命令
    dockerps-all--format"{{json.}}"  列出所有容器dockerps--format"{{json.}}" 列出所有运行中的容器dockerimages--format"{{json.}}"  列出所有imagedockerrmiimagename 删除映像dockerrm容器id或者容器名称  删除指定容器......
  • 在docker上运行一个centos7.9的系统
    dockerpullcentos:centos7.9.2009dockerimagesdockerrun-itd--name=centos--privileged=true-p3333:22centos:centos7.9.2009/usr/sbin/initdockerpsdockerexec-itcentos/bin/bashyuminstallopenssh*-ysystemctlrestartsshdsystemctlstatusss......
  • MySQL之join
    语法...fromtb1join(innerjoin)tb2oncondition...fromtb1leftjointb2oncondition...fromtb1rightjointb2oncondition...fromtb1fulljointb2oncondition【1】阿里巴巴Java开发手册【强制】超过三个表禁止join。需要join的字段,数据类型必须绝......
  • MYSQL数据库知识点
    CONCAT()函数的使用方法--双列合并SELECTCONCAT(id,'@',number2)FROMtable1--多列合并SELECTCONCAT(id,'AA',number,'B',number2)FROMtable1table1的数据以及拼接后的效果  DATE_FORMAT()时间格式化函数 ......
  • MySQL 之【视图】【触发器】【存储过程】【函数】【事物】【数据库锁】【数据库备份】
    一.多表联合查询 创建表和数据#多表查询语法select字段1,字段2...from表1,表2...[where条件]注意:如果不加条件直接进行查询,则会出现以下效果,这种结果我们称之为 笛卡尔乘积#查询人员和部门所有信息select*fromperson,dept笛卡尔乘积公式:A表中数据条数  *......