首页 > 数据库 >MySQL主从复制(docker环境)

MySQL主从复制(docker环境)

时间:2024-11-01 20:49:27浏览次数:1  
标签:主从复制 slave log ## MySQL master mysql Master docker

MySQL主从复制示例

1创建master容器3307:

docker run -d --name mysql-master  \
-p 3307:3306 \
--privileged=true \
-v /root/mysql-master/log:/var/log/mysql  \
-v /root/mysql-master/data:/var/lib/mysql  \
-v /root/mysql-master/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
  • master配置文件
cd /root/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)
# (mixed(混合模式,有系统函数自动采用row,普通数据采用statement),statement(只记录执行语句,数据量小,系统函数会导致数据不一致),row(记录每条数据,数据量大,导致并发日志))
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误﹐避免slave端复制中断。
## 如∶1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
  • 重启master
// 重启
docker restart mysql-master
// 进入master容器
docker exec  -it mysql-master /bin/bash
// 连接MySQL
mysql -u root -p
// 创建slave账号密码  用于同步使用,%可以替换为固定ip
CREATE USER 'slave'@'%'IDENTIFIED BY '123456';
// 设置slave的权限
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
// 如果是MySQL8,需要在执行以下语句
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
// 刷新权限
flush privileges;

// 查看master主数据状态
mysql> show master status \G
*************************** 1. row ***************************
             File: mall-mysql-bin.000001
         Position: 154
     Binlog_Do_DB: 
 Binlog_Ignore_DB: mysql
Executed_Gtid_Set: 

2创建slave容器3308:

docker run -d --name mysql-slave \
-p 3308:3306 \
--privileged=true \
-v /root/mysql-slave/log:/var/log/mysql  \
-v /root/mysql-slave/data:/var/lib/mysql  \
-v /root/mysql-slave/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
  • slave配置文件
cd /root/mysql-slave/conf
vim my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能,开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
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
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
  • 重启slave
// 重启
docker restart mysql-slave
// 进入slave容器
docker exec  -it mysql-slave /bin/bash
// 连接MySQL
mysql -u root -p
  • 运行配置slave同步主机
语法:
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307,master_log_file='mall-mysql-bin.000001', master_log_pos=154, master_connect_retry=30;
// 参数说明:
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,[通过查看主数据的状态show master status \G,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态show master status \G,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。

// 执行slave连接master
mysql> change master to master_host='192.168.223.135', master_user='slave', master_password='123456', master_port=3307,master_log_file='mall-mysql-bin.000001', master_log_pos=154, master_connect_retry=30;
  • 在slave中查看主从同步状态
mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.223.135
                  Master_User: slave
                  Master_Port: 3307
                Connect_Retry: 30
              Master_Log_File: mall-mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mall-mysql-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mall-mysql-bin.000001
             Slave_IO_Running: No 同步没有运行
            Slave_SQL_Running: No 同步没有运行
1 row in set (0.01 sec)
可以看到配置信息没问题,但还没有启动 因此需要开启同步
  • 在slave开启同步设置

start slave

  • slave停止主从同步

stop slave

  • 如果启动失败,则在slave执行以下操作,则删除之前的relay_log信息,然后重新执行change master to...操作

reset slave

  • 在slave中再次查看主从同步状态
mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.223.135
                  Master_User: slave
                  Master_Port: 3307
                Connect_Retry: 30
              Master_Log_File: mall-mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mall-mysql-relay-bin.000002
                Relay_Log_Pos: 325
        Relay_Master_Log_File: mall-mysql-bin.000001
             Slave_IO_Running: Yes 同步有运行
            Slave_SQL_Running: Yes 同步有运行
  • 测试一波验证即可

标签:主从复制,slave,log,##,MySQL,master,mysql,Master,docker
From: https://www.cnblogs.com/zhuo512/p/18521247

相关文章

  • MySQL数据库学习指南
    一、数据库的用户管理操作1、启动MySQL服务器以管理员身份运行,否则权限不够会拒绝访问--网络命令启动MySQL80服务语句:netstartMySQL802、关闭MySQL服务器语句:netstopMySQL80     -网络命令关闭MySQL80服务3、连接MySQL服务器注意:连接服务器这里......
  • 【MySQL基础】高级查询
    文章目录一、聚合函数:`COUNT`、`SUM`、`AVG`、`MIN`、`MAX`1.统计总数:`COUNT`2.计算总和:`SUM`3.计算平均值:`AVG`4.找最小值:`MIN`5.找最大值:`MAX`综合使用聚合函数的例子小结二、分组查询——`GROUPBY`和`HAVING`1.按组来统计——`GROUPBY`2.为分组结果加条......
  • Docker 代理配置
    不提供代理,只是在有代理服务器的情况下一些Docker代理配置。关于dockerrun报错正常安装docker完毕后,可以使用dockerrunhello-world来运行,但是发现报错Unabletofindimage'hello-world:latest'locallydocker:Errorresponsefromdaemon:Get"https://regist......
  • mysql 8.4 主从复制
    master节点my.cnfserver-id=1log-bin=mysql-binbinlog-do-db=repl#需要同步的数据库,如果没有本行表示同步所有的数据库binlog-ignore-db=mysql创建复制用户CREATEUSER'repluser'@'192.168.4.222'IDENTIFIEDWITHcaching_sha2_passwordBYRANDOMPASSWORD;+----—......
  • 安装xtrabackup备份mysql
    一、工具xtrabackup说明说明:1、PerconaXtraBackup:是一个适用于Mysql的开源热备份工具,它在备份期间不锁表,而且可以备份InnoDB、XtraDB以及MyISAM存储引擎的表。2、PerconaXtraBackup2.4可以备份MySQL5.5、5.6和5.7,但不支持备份MySQL8.0,如果需要备份MYSQL8.......
  • Docker(一):Docker简介及安装
    目录1Docker简介1.1容器跟虚拟机的区别1、虚拟机是什么2、容器是什么3、容器和虚拟机的区别1.2为什么要学习容器1.3Docker是什么2Docker安装2.1安装docker-centos71、环境初始化2、安装docker-ce3、配置docker镜像加速器2.2安装docker-ubuntu22.041、安装2、......
  • MySQL 死锁日志分析方法
    作者:京东物流张凯引言MySQL死锁是线上经常遇到的现象,但是死锁分析却并不总是件容易的事情,本文介绍MySQL死锁日志的分析方法,帮助研发从日志中快速提取有效信息,从而提高死锁原因分析的效率。 死锁介绍触发条件死锁的触发条件包括四个:•互斥•占有且等待•不可抢占用......
  • 【昌哥IT课堂】MySQL8.3 EXPLAIN中的新JSON格式(译)
    MySQL提供了两个用于分析查询计划的强大工具:EXPLAIN和EXPLAINANALYZE。EXPLAIN显示优化器选择的执行计划,并在执行之前停止,而EXPLAINANALYZE实际执行查询并收集有关每个操作的处理时间和返回行数的统计信息。输出格式可以是表格形式(TRADITIONAL)、树形结构或JSON。前两种格式适用......
  • 浅析Dockerhub API:如何优雅地从dockerhub偷rootfs镜像
    成品:https://github.com/Moe-hacker/docker_image_puller前言:八月初的时候,咱无聊去扒了下dockerhub的接口,想通过网络请求直接从dockerhub偷镜像。然后写完才想起来dockkerhub在国内是被墙的,似乎这么一个功能用处也不大。。。。。然后咱就去旅游了,连项目Readme都没写(逃)。至于......
  • MySQL和Easy-Es语法对照表
    MySQL和Easy-Es语法对照表MySQLEasy-Eses-DSL/esjavaapiandandboolQueryBuilder.must(queryBuilder)计算得分andfilterboolQueryBuilder.filter(queryBuilder)不计算得分ororboolQueryBuilder.should(queryBuilder)!notboolQueryBuilder.mustNot(query......