MySQL 之 【数据库主从搭建】


MySQL主从复制介绍

MySQL的主从复制(Master-Slave Replication)是一种数据同步技术,用于将数据从一个MySQL主服务器(Master)复制到一个或多个从服务器(Slave)。这种架构可以提供以下优势:
1.读写分离:主从复制可以将数据库的读写操作分离。主服务器执行写操作和更新,而从服务器只执行读操作,这有助于提高系统的性能和可扩展性。
2.数据备份:从服务器可以作为主服务器的备份,防止数据丢失。当主服务器发生故障时,可以切换到从服务器,保证业务的连续性。
3.负载均衡:通过将读操作分配到多个从服务器上,可以平衡负载,提高系统的吞吐量和响应速度。
4.扩展性:主从复制可以轻松地添加更多的从服务器,以满足不断增长的业务需求。
主从复制的过程如下:
主服务器将数据更改记录到二进制日志(Binary Log)中。
从服务器连接到主服务器,并请求主服务器发送二进制日志中的更改事件。
主服务器将二进制日志中的事件发送给从服务器,从服务器将这些事件写入到自己的中继日志(Relay Log)中。
从服务器读取中继日志中的事件,并将这些更改应用到自己的数据库中,从而实现与主服务器的数据同步。
总之,MySQL的主从复制是一种常见的数据同步技术,用于提高系统的性能、可扩展性和数据安全性。

一、环境准备

MySQL版本:8.0及以上
Docker-compose环境

创建主库目录及数据目录【用于挂载】
mkdir -p /data/master/database
mkdir -p /data/master/docker
创建从库目录及数据目录【用于挂载】
mkdir -p /data/slave/database
mkdir -p /data/slave/docker

二、配置文件

my.cnf配置文件

主库配置
vim /data/master/docker/mysql/conf/my.cnf

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
# #主库----start--- 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
# #主库----end---
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

从库配置
vim /data/slave/docker/mysql/conf/my.cnf

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
# #从库----start--- 
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin 
# #从库----end--- 
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

Dockerfile配置

主库配置
vim /data/master/docker/mysql/Dockerfile

# 使用官方的mysql作为基础镜像
FROM mysql:8.0.19
# 设置mysql用户和组
ENV MYSQL_ROOT_USER: root \
    MYSQL_ROOT_PASSWORD: 123456\
    MYSQL_ROOT_HOST: localhost
# 定义数据目录
ENV MYSQL_DATA_DIR=/var/lib/mysql
# 创建数据目录
RUN mkdir -p $MYSQL_DATA_DIR && chown -R mysql:mysql $MYSQL_DATA_DIR
# 暴露mysql的端口号
EXPOSE 3306

从库配置
vim /data/slave/docker/mysql/Dockerfile

# 使用官方的mysql作为基础镜像
FROM mysql:8.0.19
# 设置mysql用户和组
ENV MYSQL_ROOT_USER: root \
    MYSQL_ROOT_PASSWORD: 123456\
    MYSQL_ROOT_HOST: localhost
# 定义数据目录
ENV MYSQL_DATA_DIR=/var/lib/mysql
# 创建数据目录
RUN mkdir -p $MYSQL_DATA_DIR && chown -R mysql:mysql $MYSQL_DATA_DIR
# 暴露mysql的端口号
EXPOSE 3306

docker-compose.yml配置

主库
vim /data/master/docker-compose.yml

version: '3.0'
# 服务容器配置
services:
  mysql:
    restart: always
    build:
      context: ./docker/mysql
    ports:
      - "3306:3306"
    volumes:
      - /data/master/database/data:/var/lib/mysql
      - /data/master/database/logs:/var/log/mysql
      - ./docker/mysql/conf/my.cnf:/etc/mysql/my.cnf
      - ./docker/mysql/conf/conf.d:/etc/mysql/conf.d
    environment:
      MYSQL_ROOT_PASSWORD: 123456

从库
vim /data/slave/docker-compose.yml

version: '3.0'
# 服务容器配置
services:
  mysql:
    restart: always
    build:
      context: ./docker/mysql
    ports:
      - "4306:3306"
    volumes:
      - /data/slave/database/data:/var/lib/mysql
      - /data/slave/database/logs:/var/log/mysql
      - ./docker/mysql/conf/my.cnf:/etc/mysql/my.cnf
      - ./docker/mysql/conf/conf.d:/etc/mysql/conf.d
    environment:
      MYSQL_ROOT_PASSWORD: 123456

三、实操

1.启动容器【主库和从库】

cd /data/master
docker-compose up -d --build
容器正常启动、MySQL服务正常启动如下
在这里插入图片描述

2.连接并操作主从库

连接主库
docker-compose exec -it mysql bash
mysql -u root -p
在主库创建用户并授权
CREATE USER ‘slave’@‘%’ IDENTIFIED BY ‘123456’;
GRANT REPLICATION SLAVE ON . TO ‘slave’@‘%’;
刷新权限
FLUSH PRIVILEGES;
查看主服务器状态(显示如下图)
show master status;


在这里插入图片描述

连接从库
pass
订阅主从关系命令如下【以下命令要在MySQL控制台执行】
change master to master_host=‘MySQL主服务器IP地址’,master_port=3306,master_user=root,master_password=‘123456’,master_log_file=‘mysql-bin.000010’,master_log_pos=4580;
#配置详解
/*
change master to
master_host=‘MySQL主服务器IP地址’,
master_user=‘之前在MySQL主服务器上面创建的用户名’,
master_password=‘之前创建的密码’,
master_log_file=‘MySQL主服务器状态中的二进制文件名’,
master_log_pos=‘MySQL主服务器状态中的position值’;
*/
#启用从库
start slave;
#查看从库状态(如下图)
show slave status\G;
在这里插入图片描述

3.测试主从

测试步骤省略

总结

1.这种方式适用于全新的主从搭建,如果主库存在了一段时间才开始搭建从库同步主从的话,需要做一次主库的全量备份作为从库的基础数据源,在重新恢复新的主从,不然主从同步会出错。
2.记一次已经存在主从,需要重新搭建主库的情况下,如果主库配置参数一致的话需要stop slave,先把从库停掉,不然主库容器无法启动。
3.从库容器重新构建(up -d --build)/重启不影响主从(无需再订阅主从)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值