美文网首页数据库转载部分DB优化
MySQL的主从复制及读写分离

MySQL的主从复制及读写分离

作者: 牍中玉的小木屋 | 来源:发表于2019-10-18 10:28 被阅读0次

    本次实验用于测试MySQL的一主一从,双活,读写分离等功能,以及MySQL的基本参数配置;项目中使用docker容器化,以便环境的统一、快速开发。具体的docker的安装过程可以参考我的另一篇文章:
    https://www.jianshu.com/p/87247e288f1a

    环境

    系统 centos7.2
    数据库 docker官方最新的mariadb
    测试工具 navicate
    

    步骤

    1. docker安装mariadb
    • 搜索mariadb镜像
    • 拉取官方镜像
    docker search mariadb
    docker pull mariadb
    
    搜索并安装mariadb.png
    1. 创建目录
    • 创建根目录(双活模式)
    • 创建应用目录conf、master-1、master-2
    mkdir /DATA/mariadb/MM -p
    cd  /DATA/mariadb/MM
    mkdir conf
    mkdir master-1
    mkdir master-2
    
    目录.png
    1. 创建容器
    • 端口映射:33066、33067
    • 卷映射:master-1、master-2
    • 容器命名:mariadb-mm-1、mariadb-mm-2
    • 创建容器的过程可以参考:https://www.jianshu.com/p/ec52b18698d4
    docker run -itd --privileged=true -p 33066:3306 -v /DATA/mariadb/MM/master-1/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mariadb-mm-1 mariadb
    docker run -itd --privileged=true -p 33067:3306 -v /DATA/mariadb/MM/master-2/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mariadb-mm-2 mariadb
    docker ps
    
    容器.png
    1. 配置双活模式
    • 从docker容器中拷贝出配置文件,修改后,重新拷贝到docker容器中;
    • 主MySQL创建用户,并分配权限:replication slave ,replication client
    • 从数据库,修改master的配置:change master

    1. 主MySQL,拷贝容器中的配置文件:my.cnf

    mkdir /DATA/mariadb/MM/conf/master-1 -p
    cd /DATA/mariadb/MM/conf/master-1
    docker cp mariadb-mm-1:/etc/mysql/my.cnf ./
    vim my.cnf
    

    2. 在my.cnf中的 [mysqld] 下面添加如下内容并保存

    skip_name_resolve=ON
    innodb_file_per_table=ON
    server-id=1
    log-bin=master-bin
    log-bin-index=master-bin.index
    
    master.png

    参数解释:
    skip_name_resolve :提高外部访问速度
    innodb_file_per_table : 独立表空间
    server-id(必须开启): mysql服务的标识,防止死循环,在主主模式中用到
    log-bin(必须开启):binary log 文件名
    log-bin-index:索引

    3. 将修改后的my.cnf拷贝到容器中,并重启容器

    docker cp /DATA/mariadb/MM/conf/master-1/my.cnf mariadb-mm-1:/etc/mysql/my.cnf
    docker restart mariadb-mm-1
    

    下图为修改配置后的文件目录变化,可以看出,多了两个文件:master-bin.000001、master-bin.index


    开启复制后mysql的data目录的变化.png

    4. 进入容器,并进入mysql控制台,创建用户并授权

    docker exec -it mariadb-mm-1 bash
    mysql -uroot -p123456
    grant replication slave ,replication client on *.* to 'slave'@'%' identified by '123456';
    flush privileges;
    

    参数解释:
    replication client:开启后,用户可以使用 show master status,show slave status 和 show binary logs 来确定复制状态
    replication slave(必须开启):开启后,用户才可以使用复制功能

    5. 查看主MySQL的master信息,并保存,等到配置slave服务器时用到

    show master status;
    show master status\G;
    
    master状态信息.png

    6. 主MySQL配置完成后,配置slave服务器

    mkdir /DATA/mariadb/MM/conf/master-2 -p
    cd /DATA/mariadb/MM/conf/master-2
    docker cp mariadb-mm-2:/etc/mysql/my.cnf ./
    vim my.cnf
    
    skip_name_resolve=ON
    innodb_file_per_table=ON
    server-id=2
    relay_log=slave_relay_bin
    
    slave.png
    docker cp ./my.cnf mariadb-mm-2:/etc/mysql/my.cnf
    docker restart mariadb-mm-2
    docker exec -it mariadb-mm-2 bash
    mysql -uroot -p123456
    

    7. 从数据库,change master语句,并开启 slave 服务

    stop slave;
    change master to master_host='106.13.135.66',master_port=33066,master_user='slave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=659;
    start slave;
    show slave status\G;
    
    slave状态.png

    至此为止,一主一从模式,已经完成。


    相关文章

      网友评论

        本文标题:MySQL的主从复制及读写分离

        本文链接:https://www.haomeiwen.com/subject/arqimctx.html