首页 > 数据库 >mysql-搭建主从复制

mysql-搭建主从复制

时间:2024-12-14 15:31:10浏览次数:9  
标签:主从复制 Slave slave Master mysql master docker 搭建

mysql-搭建主从复制


Master(主):
docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Slave(从):
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Master对外映射的端口是3339,Slave对外映射的端口是3340。因为docker容器是相互独立的,
每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。

 

配置主服务器
docker exec -it master /bin/bash

#使用yum install vim
vim /etc/mysql/my.cnf


[mysqld]
server-id=100
# 开启binlog日志
log-bin=mysql-bin


保存并退出

docker restart master
docker exec -it master /bin/bash


下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
mysql -uroot -p123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';


配置从服务器
docker exec -it slave /bin/bash

#使用yum install vim
vim /etc/mysql/my.cnf


[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin

 

链接Master(主)和Slave(从)
docker exec -it master /bin/bash
mysql -uroot -p123456
show master status;

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。

 

docker exec -it slave /bin/bash
mysql -uroot -p123456
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 154, master_connect_retry=30;

mysql> change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 154, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.03 sec)


root@xuxb-VirtualBox:~# docker inspect --format='{{.NetworkSettings.IPAddress}}' master
172.17.0.2


master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒


在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 172.17.0.2
Master_User: slave
Master_Port: 3339
Connect_Retry: 30
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: edu-mysql-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: No
Slave_SQL_Running: No


mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

如果主从同步有问题,show slave status \G; 可以查看,我就是看出来端口有问题。然后再去修改mysql> change master xxxxx
Last_IO_Errno: 2003
Last_IO_Error: error connecting to master 'slave@172.17.0.2:3339' - retry-time: 30 retries: 11


mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.17.0.2
Master_User: slave
Master_Port: 3306
Connect_Retry: 30
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: edu-mysql-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是 No,因为我们还没有开启 主从复制过程。使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;。


参考:
https://mp.weixin.qq.com/s?__biz=Mzg4ODQ1NTE2Mg==&mid=2247568072&idx=1&sn=d6c5ef64330f345033b73190ad481d80&chksm=ce262000a02ca1545fbe45a73feb1078e1f431beda740ac759a71c09d2dc8cb41e5f17ab3f95&scene=27

标签:主从复制,Slave,slave,Master,mysql,master,docker,搭建
From: https://www.cnblogs.com/xuxiaobo/p/18606798

相关文章

  • docker搭建nginx-php环境
    首先,创建一个Dockerfile文件,内容如下:FROMphp:7.4-fpmRUNsed-i's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g'/etc/apt/sources.listRUNsed-i's/security.debian.org/mirrors.tuna.tsinghua.edu.cn/g'/etc/apt/sources.list#安装NginxRUNapt-ge......
  • 免费送源码:Java+ssm+MySQL SSM智慧旅游系统 计算机毕业设计原创定制
     摘要随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。智慧旅游系统设计,主要的模块包括查看首页、站点内容(轮播图、公告栏)系统用户(管理员、注册用户、导游)公共内容(旅游资讯、资讯分类)模块管理(地区管理、景点信息......
  • 免费送源码:Java+B/S+MySQL 多元化智能选课系统的设计与实现 计算机毕业设计原创定制
    摘 要多元化智能选课系统使用Java语言的Springboot框架,采用MVVM模式进行开发,数据方面主要采用的是微软的Mysql关系型数据库来作为数据存储媒介,配合前台技术完成系统的开发。论文主要论述了如何使用JAVA语言开发一个多元化智能选课系统,本系统将严格按照软件开发流程进行各个......
  • MySQL 事务
     概念介绍         事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。        事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。假......
  • WIFI&蓝牙(ESP32)转CAN总线&串口TTL模块 - micropython开发环境搭建
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 题外话:脚本语言运行原理: https:......
  • Mac安装mysql8.0版本数据库
    一、环境和所需软件概述1.1目前环境:MacOS(10.15.3)1.2所需软件:mysql-8.0.18-macos10.15-x86_64.dmg(8.0系列都可以)二、安装步骤(全部采用高清大图吧!!)2.1进入mysql安装包下载页面,下版本的dmg文件,下载地址如下:msyql官网下载地址-------------图一-----------------......
  • Linux安装MySQL8.0
    在linux系统的下切换到/usr/local目录下创建mysql文件夹,也可以自定义文件夹。#切换目录cd/usr/local#创建文件夹mkdirmysql切换到刚创建的目录下,并使用wget下载mysql压缩包。我们选择MySQL8.0.20cdmysqlwgethttps://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8......
  • Windows安装MySQL8.0
    一、下载MySQL安装包MySQL直接去官网下载就行,选择community版本(免费)下载,链接:https://dev.mysql.com/downloads/mysql/。在“MySQLCommunityServer”页面,根据您的Windows系统版本(32位或64位)选择合适的安装包进行下载。一般来说,现在大多数电脑都是64位系统,我们以6......
  • 【linux下mysql主从复制操作流程】
    linux下mysql主从复制操作流程在Linux下实现MySQL主从复制(Master-SlaveReplication)是一个常见的需求,用于读写分离、数据备份等场景。以下是一个详细的操作流程,包括每个步骤、注意事项以及总结。一、准备环境安装MySQL确保主服务器(Master)和从服务器(Slave)都已经安装了My......
  • centos 7 普通用户安装mysql8 安装包2. 使用lsb_release a命令1. 使用cat /etc/redhat
       [root@bigdatapackage333]#rpm-qa|grepmariadbmariadb-libs-5.5.64-1.el7.x86_64[root@bigdatapackage333]#rpm-qa | grepmysql[root@bigdatapackage333]#[root@bigdatapackage333]#rpm-e--nodepsmariadb-libs-5.5.64-1.el7.x86_64[root@bigdatapack......