Mysql读写分离(docker版)

数据库不能承担起系统的高并发要求时,可以在用读写分离,实时的热备份,进行一主多从,从机承担大量的读取请求,而主机负责写入。
由主机产生二进制文件,从机进行读取并执行从而进行数据同步。
由于存在一定时间的延迟,那么这样还是适用于多读少写,或者对数据的实时性要求不是很高的网站。
数据架构可以是
一主多从,每个从机于主机直连。
一主多从,从机还能做为主机进行链式的链接,减少主机的日志读取压力,同时当主机宕机后,从机可以上来承担起主机的责任,只需要切换到新的主机。

采用docker进行启动多个mysql实例进行操作。

  1. 准备工作

    1. docker pull mysql
    2. 启动镜像
      docker run -d -e MYSQL_ROOT_PASSWORD=root --name mysql-test mysql
    3. 连接镜像 安装vim,并提交新tag
      docker exec -t -i mysql-test bin/sh
      apt-get update
      apt-get install vim
      exit;
      docker commit -m 'mysql install vim' mysql-test mysql:init
  2. 设置主机
    docker run -d --name mysql-master -v /root/mysql/master:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:init
    连接主机实例,进入/etc/mysql/conf.d,编辑docker.cnf
    在[mysqld]下面添加

     server-id=1   //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
     log-bin=master-bin
     log-bin-index=master-bin.index
    

    新建用户连接该机器mysql,创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。

    create user repl;
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%'         IDENTIFIED BY 'mysql';
    

    查看 master 的日志
    SHOW MASTER STATUS;

  3. 设置从机
    启动镜像实例

    docker run -d --name mysql-slave -v /root/mysql/slave:/var/lib/mysql -p 3307:3306 -link mysql-master:master -e MYSQL_ROOT_PASSWORD=root mysql:init
    

    连接主机实例,进入/etc/mysql/conf.d,编辑docker.cnf,在【mysqld】下面添加

     server-id=2
     relay-log-index=slave-relay-bin.index
     relay-log=slave-relay-bin 
    

    重启mysql
    docker stop mysql-slave
    docker start mysql-slave
    连接从机mysql
    建立从机与主机的链接

    change master to master_host='master', //Master 服务器Ip
    master_port=3306,
    master_user='repl',
    master_password='mysql', 
    master_log_file='master-bin.000001',//Master服务器产生的日志
    master_log_pos=0;
    start slave;//开启从机
    
  4. 读写分离,配置完成。可以进行测试了。

你可能感兴趣的:(Mysql读写分离(docker版))