zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    实时27实战机器学习:图片验证码识别(Java实现)
    大屏26深度学习模型来从文档图片中自动化地提取出关键信息成为一项亟待解决的挑战
    f-string想必作为Python3.6版本开始引入的特性,通过它我们可以更加方便地向字符串中嵌入自定义内容
    大屏25JAVA+selenium+tess4j识别登陆验证码截图与识别
    前端12 highcharts和echarts选择
    大屏20基于 Selenium 的 Web 自动化测试框架完美版自动化解决方案 [开源项目]
    大屏24字典python+selenium的行为
    大屏23Tesseract字库训练Tesseract 3
    大屏21解决数据问题python-tesseract-ocr的安装及使用
    大屏22解决数据问题java浏览器源.docx
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309023.html
Copyright © 2011-2022 走看看