• docker搭建mysql读写分离


    写在前面

    当mysql数据量不大且达到读写瓶颈的时候,读的性能消耗远大于写,我们可以将读和写分离开。本实例采用docker容器搭建,通过mycat中间件做分发

    准备mysql主从服务

    1. 准备mysql容器
    docker pull mysql:5.7
    1. 创建主从数据映射目录
    // 创建目录,数据和配置不至于丢失
    mkdir -p /usr/local/docker_app/mysql/master/conf.d/
    mkdir -p /usr/local/docker_app/mysql/slave/conf.d/
    1. 创建master配置文件/usr/local/docker_app/mysql/master/conf.d/my.cnf
    vi /usr/local/docker_app/mysql/master/conf.d/my.cnf

      修改文件配置

    [mysqld]
    log-bin=master-bin
    server-id=1
    1. 创建slave配置文件/usr/local/docker_app/mysql/slave/conf.d/my.cnf
    vi /usr/local/docker_app/mysql/slave/conf.d/my.cnf

    修改文件配置

    [mysqld]
    log-bin=slave-bin
    server-id=2

    5.启动master服务

    复制代码

     docker run -d --name mysql-master 
        -p 3306:3306 
        -v /usr/local/docker_app/mysql/master/conf.d/data:/var/lib/mysql 
        -v /usr/local/docker_app/mysql/master/conf.d:/etc/mysql/conf.d 
        -e MYSQL_ROOT_PASSWORD=root 
        -d mysql:5.7

    复制代码

    1. 启动slave服务

    复制代码

    docker run -d --name mysql-slave 
        -p 3307:3306 
        -v /usr/local/docker_app/mysql/slave/conf.d/data:/var/lib/mysql 
        -v /usr/local/docker_app/mysql/slave/conf.d:/etc/mysql/conf.d 
        -e MYSQL_ROOT_PASSWORD=root 
        -d mysql:5.7

    复制代码

    1. 进入容器修改master 的读写权限
      # 进入容器shell
      $ docker exec -it mysql-master /bin/sh

    复制代码

    mysql -uroot -p
    
    // mysql shell
    // 用户名:root
    // 密码:root
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

    复制代码

       进入容器修改slave的读写权限

    # 进入容器shell
    $ docker exec -it mysql-slave/bin/sh

    复制代码

    //进入mysql
    mysql -uroot -p
    
    // mysql shell
    // 用户名:root
    // 密码:root
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

    复制代码

    8.进入mysql-master查看master状态

    复制代码

    // mysql shell
    show master status;
    
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | master-bin.000003 |     154  |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+

    复制代码

    1. 获取master容器的host
       docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
    1. 进入mysql-slave关联主从模式(自行更改那些参数)
      // mysql shell
      change master to master_host='172.17.0.2', master_user='root',master_password='root', master_log_file='master-bin.000003',master_log_pos=154;
    // mysql shell
    // 启用slave
    start slave;
    1. 测试主从
      在master创建test数据库,再到slave中查看是否存在test库,若存在则基本完成,若未成功检查binlog、master host、position是否正确;目前已经可以给前台使用,只不过要区分读写数据源,挺麻烦!
    show databases;
    
    create database test;
  • 相关阅读:
    mybatis概述
    Spring的配置分别是xml和java style
    JavaScript对象数据过滤、修改
    Spring框架
    设计模式-工厂方法模式(Fatory Patterm)
    简单的数据结构
    java链式操作
    centos7 php开发环境安装-composer
    centos7 php开发环境安装-php
    centos7 php开发环境安装-Apache
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309023.html
Copyright © 2020-2023  润新知