首页 > 数据库 >从零搭建MySQL主从复制-一主二从

从零搭建MySQL主从复制-一主二从

时间:2024-07-29 13:24:06浏览次数:15  
标签:主库 主从复制 MySQL tiantian MASTER mysql docker 日志 一主二

从零搭建MySQL主从复制-一主二从

文章目录

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库中, 然后从库对这些日志重新执行(也叫重做), 从而使得从库与主库的数据保持同步

MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库, 实现链状复制

1. 服务器准备

CentOS7 + 2核4G + 1Mbps + 50G + 公网IP + 一个月
在这里插入图片描述

2. Docker安装

官网:http://www.docker.com

安装手册:https://docs.docker.com/install/linux/docker-ce/centos(CE-社区版)

2.1、安装需要的软件包

yy -utils提供了yy-config-manager相关功能,device-mapper-persistent-data和lvm2是设备映射器驱动程序所需要的。

yum install -y yum-utils \
               device-mapper-persistent-data \
               lvm2

2.2、设置docker下载镜像

推荐阿里云下载地址

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3、更新yum软件包索引

我们在更新或配置yum源之后,通常都会使用yum makecache 生成缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度

yum makecache fast

2.4、安装docker ce

yum install -y docker-ce

2.5、启动docker

systemctl start docker

2.6、版本验证

docker version

2.7、设置开机启动

#查看服务是否自动启动(是:enabled | 否:disabled)
systemctl list-unit-files|grep docker.service 

#设置开机启动:如不是enabled可以运行如下命令设置自启动
systemctl enable docker
#重新加载服务配置
systemctl daemon-reload 

#如果希望不进行自启动,运行如下命令设置
systemctl disable docker
#重新加载服务配置
systemctl daemon-reload 

3. MySQL主从部署

3.1 部署MySQL master节点*1

3.1.1 创建容器

  • 端口: 3307 密码: tiantian
docker run -d \
-p 3307:3306 \
-v /tiantian/mysql/master/conf:/etc/mysql/conf.d \
-v /tiantian/mysql/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=tiantian \
--name tt-mysql-master \
mysql:8.0.29

3.1.2 设置唯一Id

# 编辑my.cnf文件
vi /tiantian/mysql/master/conf/my.cnf

# 追加以下内容
[mysqld]
# mysql服务ID, 保证整个集群中唯一
server-id=2
# 是否只读, 1:只读 0:读和写
read-only=0
binlog_format=STATEMENT
# 设置需要复制的数据库,默认复制全部
binlog-do-db=db1
# 设置不需要复制的数据库
binlog-ignore-do-db=db2

3.1.3 重启mysql

docker restart tt-mysql-master

3.1.3 master中创建slave用户并授权[可直接用可视化工具创建]

  • 账号: tt_salve
  • 密码: tiantian
    在这里插入图片描述
create user 'tt_salve'@'%';

alter user 'tt_salve'@'%' IDENTIFIED WITH mysql_native_password BY 'tiantian';

GRANT REPLICATION SLAVE ON *.* TO 'tt_slave'@'%';  

FLUSH PRIVILEGES;

3.1.4 记录主库binlog日志中的初始位置, 等会搭建主从时要用到

字段含义说明

  • File: 从哪个日志文件中开始推送日志
  • Position: 从哪个位置开始推送日志
  • binlog_ignore_db: 指定不需要同步的数据库
    在这里插入图片描述

3.2 部署MySQL slave节点*2

3.2.1 启动容器

  • 端口 3308,3309
  • 密码 tiantian
  1. 将所有slave1替换slave2
  2. 将slave1的server-id改为3
  3. 将slave2的server-id改为4
docker run -d \
-p 3308:3306 \
-v /tiantian/mysql/slave1/conf:/etc/mysql/conf.d \
-v /tiantian/mysql/slave1/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=tiantian \
--name tt-mysql-slave1 \
mysql:8.0.29

# 编辑文件my.cnf
vi /tiantian/mysql/slave1/conf/my.cnf

# 写入以下内容
[mysqld]
server-id=3
# 是否只读, 1:只读 0:读和写
read-only=1
binlog_format=STATEMENT

# 重启mysql
docker restart tt-mysql-slave1

3.2.2 在从机上配置主从关系, 将一开始查询到的binlog日志中的

  1. MASTER_USER: 主库的IP地址
  2. MASTER_PORT: 主库的端口
  3. MASTER_USER: 主库账号
  4. MASTER_PASSWORD: 主库密码
  5. File填入MASTER_LOG_FILE
  6. Position填入MASTER_LOG_POS
CHANGE MASTER TO
    MASTER_HOST='8.138.114.9',
    MASTER_PORT=3307,
    MASTER_USER='tt_slave',
    MASTER_PASSWORD='tiantian',
    MASTER_LOG_FILE='binlog.000003', 
    MASTER_LOG_POS=1072;

-- 开始复制,执行:  
START SLAVE;  

-- 检查复制状态 若 "Last_XX_Error" 字段没有内容则搭建成功了
SHOW SLAVE STATUS

3.2.3 测试: 当主库创建数据库表从库能查询到

在这里插入图片描述

4. 主从复制的原理

在这里插入图片描述
从上图来看, 复制分成三步

  1. Master主库在事务提交时, 会把数据变更记录在二进制日志文件Binlog
  2. 从库读取主库的二进制日志文件Binlog, 写入到从库的中继日志Relay Log
  3. slave重做中继日志的事件, 将改变反映它自己的数据

标签:主库,主从复制,MySQL,tiantian,MASTER,mysql,docker,日志,一主二
From: https://blog.csdn.net/m0_72918997/article/details/140768858

相关文章

  • CentOS安装MySQL
    参考文章【CentOS安装mysql简单教程】https://blog.csdn.net/qq_50523945/article/details/131069683【运维系列:centos7yum安装使用时提示cannotfindavalidbaseurlforrepo:base/7/x86_64的解决方法(亲测有效☆)】https://blog.csdn.net/weixin_54626591/article/detai......
  • MySQL基础篇(一)
    1.事物的四大特性事务是逻辑上的一组操作,要么都执行,要么都不执行原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性(Consistency):执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不......
  • chsap连接Mysql
    前置操作打开MySql服务 添加引用MySql.Data.dll 数据库查询数据读取一条数据,直接运行就能看到打印台输出。1usingMysql.Data.MyAqlClient;2staticvoidMain(string[]args)3{4stringconnStr="Database=test007;DataSource=127.0.0.1;port=3306;User......
  • Linux基本操作手册与mysql知识
    Linux基本操作手册修改主机名:vim/etc/hostname修改主机hosts文件:vim/etc/hosts创建用户:useraddusername删除用户:userdel-rusername(不加-r只是删除用户,无法删除用户原本主目录)修改用户名:usermod-l新用户旧用户,(不建议修改,应改选择删除而重新创建,因为修改......
  • docker启动MySQL容器演示(centos)
    环境配置vboxcentos7.9docker(已经配置阿里镜像源)首先拉取MySQL镜像dockerpullmysql:版本号版本号不打也可以,会默认下载最新版(latest)下载后使用dockerimages查看镜像如图我下载了MySQL5.7/8.0/latest版本然后执行下面的命令就可以启动(运行)容器了dockerrun-d-......
  • MYSQL数据库(二)
    二、数据库中的约束1.非空约束(ONTNULL)字段的值不能为空2.唯一约束(UNIQUE)字段的值不能重复3.主键约束(PRIMARYKEY)主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,通过它可以强制表的实体完整性,效果上相当于非空约束+唯一约束4.外键约束(FOREIGNKEY)作用:......
  • mysql中的事务
     一、事务的定义        事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。特点:一个事务中如果有一个数据库操作失败,那么整个事务的所有数据库操作都会失败,数据库数据就会回滚到该事务开始之前的状......
  • mysql系列:sql执行原理
    sql执行流程当谈到数据库管理系统(DBMS)的核心功能时,SQL执行引擎无疑是其中最关键的部分之一。SQL执行引擎负责将我们编写的结构化查询语言(SQL)转化为实际可以操作数据库的物理操作序列。它不仅仅是一个简单的语法解析器,更是一种复杂的软件模块,涉及到查询优化、执行计划生成、......
  • MYSQL如何实现将数据同步到ES?
    MYSQL如何实现将数据同步到ES?这个问题既要考虑到既能保持数据一致性,又能够保证实时性的一个解决方案三种方式:最直接的就是在业务代码中去实现双写,也就是说每一次修改MySQL数据的时候,同时更新到ES中,注意:这种方法耦合度很高,一旦发生需求变更会有额外的一个维护......
  • 实战:MyBatis适配多种数据库:MySQL、Oracle、PostGresql等
    概叙很多时候,一套代码要适配多种数据库,主流的三种库:MySQL、Oracle、PostGresql,刚好mybatis支持这种扩展,如下图所示,在一个“namespace”,判断唯一的标志是id+databaseId,刚好写了三个同样的方法,一个不带databaseId,两个带databaseId,此时当前库如果连接的是oracle则执行databaseId=......