Mysql8.0主从配置

一、环境准备

主从配置需要运行两个mysql服务,这里选择docker,可以很方便的在本地启动多个mysql服务。

1. 启动mysql服务

为了更方便管理,我选择docker-compose进行编排,创建mysql.yml,文件内容如下:

version: '3.1'
services:
  mysql_master:
    container_name: mysql_master
    image: mysql:8.0.29
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - /users/path/mysql/data:/var/lib/mysql
      - /users/path/mysql/conf.d:/etc/mysql/conf.d
      - /users/path/mysql/sql:/mysql/sql
    ports:
      - 3306:3306

  mysql_slave:
    container_name: mysql_slave
    image: mysql:8.0.29
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - /users/path/mysql/slave/data:/var/lib/mysql
      - /users/path/mysql/slave/conf.d:/etc/mysql/conf.d
      - /users/path/mysql/sql:/mysql/sql
    ports:
      - 3305:3306

注意将/users/path替换为真实路径,mysql_master作为主库,mysql_slave为从库。主库端口号为3306,从库端口号3305。

2. 配置文件

  1. 创建主库配置文件/users/path/mysql/conf.d/my.conf,内容如下:
[mysqld]
server-id=1
# 从mysql8.0开始bin-log为默认开启状态,这里无需配置
  1. 创建从库配置文件/users/path/mysql/slave/conf.d/my.conf,内容如下:
[mysqld]
server-id=2

然后,运行如下命令:

docker-compose -f mysql.yml up -d

这样,就启动了两个mysql服务,接下来就是主从设置了。

二、主从设置

1. 主库(数据源)设置

1.1 将主库数据快照导入从库(如果不需要导入,则跳过此过程)

当主库已经存在数据库和数据表,需要先导入从库,可以进行如下操作:
进入主库容器,导出快照:

# 这里--all-databases表示到处所有数据库,也可以换成--databases 来指定要导出的数据库
> mysqldump -uroot -p123456 --all-databases --master-data > /mysql/sql/masterdump.db

进入从库容器,导入快照:

> mysql -h source < /mysql/sql/masterdump.db
1.2 进入主库,创建复制用户,并授权(用于从库连接主库,并需要拥有复制权限)
> CREATE USER 'repl'@'%' IDENTIFIED BY '123456';
> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
1.3 获取主库binary log坐标(如果进行了1.1步骤,则可以跳过此步骤)

首先,进入主库,在当前回话,运行:

-- 此语句的作用是:刷新所有的表,然后阻塞所有写语句,以便binary log坐标不会发生变动
> FLUSH TABLES WITH READ LOCK;
-- 此语句是查看主库状态,可以看到binary log的当前坐标
> SHOW MASTER STATUS;

在这里插入图片描述

2. 设置从库

  • 需要先获取主库容器的ip,在docker容器宿主机上运行如下命令获取容器IP:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql_master

例如:
在这里插入图片描述

  • 接下来设置从库数据源,启动复制线程,进入从库会话,运行:
-- 设置数据源
> CHANGE REPLICATION SOURCE TO SOURCE_HOST='172.18.0.2', SOURCE_USER='repl', SOURCE_PASSWORD='123456', SOURCE_LOG_FILE='binlog.000011', SOURCE_LOG_POS=1093;
-- 启动,从mysql8.0.22,用下面的语句代替START SLAVE;
> START REPLICA;
-- 查看状态
> SHOW REPLICA STATUS\G;
  • 如果主库运行了FLUSH TABLES WITH READ LOCK,需要释放锁:
> UNLOCK TABLES;

数据库主从就配置完了,可以在主库进行增删改查,看是否同步到了从库。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值