• mysql主从搭建(docker)


    一、主从概述

    MySQL主从又叫Replication、AB复制。简单讲就是A与B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,实现数据实时同步。有这样几个关键点:

    1)MySQL主从是基于binlog,主上需开启binlog才能进行主从;

    2)主从过程大概有3个步骤;

    3)主将更改操作记录到binlog里;

    4)从将主的binlog事件(SQL语句) 同步本机上并记录在relaylog里;

    5)从根据relaylog里面的SQL语句按顺序执行。

     二、主从作用

    主从作用有实时灾备,用于故障切换;读写分离,提供查询服务;备份,避免影响业务。

    主从形式

    1)一主一从

    2)主主复制

    3)一主多从:扩展系统读取的性能,因为读是在从库读取的。

    4)多主一从:5.7版本开始支持

    5)联级复制

     三、主从复制原理

    四、主从复制步骤

    主库将所有的写操作记录在binlog日志中,并生成log dump线程,将binlog日志传给从库的I/O线程

    从库生成两个线程,一个是I/O线程,另一个是SQL线程I/O线程去请求主库的binlog日志,并将binlog日志中的文件写入relay log(中继日志)中SQL线程会读取relay loy中的内容,并解析成具体的操作,来实现主从的操作一致,达到最终数据一致的目的。

     

    五、主从复制配置步骤

    1)确保从数据库与主数据库里的数据一致

    2)在主数据库里创建一个同步账户授权给从数据库使用

    3)配置主数据库(修改配置文件)

    4)配置从数据库(修改配置文件)

    5)需求

    6)搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,主服务器进行写操作,从服务器进行读操作

    六、环境说明使用Docker启动两个

    名称

    Ip

    Port

    M1

    192.168.106.133

    3307

    M1S1

    192.168.106.133

    3308

     

     

    docker run --name M1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1

    docker run --name M1S1 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1

    七、修改配置文件

    将容器里面的配置文件复制出来,主要修改服务器的配置;在root目录下创建一个mysqlms的目录存放从Docker容器里面复制过来的配置文件。进入目录:cd /mysqlms 

    docker cp M1:/etc/mysql/conf.d/docker.cnf m1.cnf

    docker cp M1S1:/etc/mysql/conf.d/docker.cnf m1s1.cnf

    1、主机的配置m1.cnf

    主机里面要记录SQL 语句,以后从机会把该SQL 语句偷过去

    server-id=1

    log-bin=master.bin

    2、从机的配置m1s1.cnf

    server-id=2

    3、配置文件修改后,复制到容器里面

    docker cp m1.cnf M1:/etc/mysql/conf.d/docker.cnf

    docker cp m1s1.cnf M1S1:/etc/mysql/conf.d/docker.cnf

    重启MySQL(m1,m1s1)

    docker restart M1 M1S1

    4、进入主机里面执行相关配置

    docker exec -it M1 bash

    mysql -uroot -p123456

    创建用户

    create user 'rep'@'%' identified by '123456';

    给该用户授予权限:

    grant replication slave on *.* to 'rep'@'%';

    刷新权限

    flush privileges;

    至此,M1 里面已经创建了一个用户:rep 123456 拥有所有库,所有表replication slave。  

    接下来,我们尝试使用M1 里面的rep 用户登录:

    ​​​​​​​5、进入从机里面执行相关配置

    docker exec -it M1S1 bash

    mysql -u root -p123456

    change master to master_host="192.168.175.110",master_port=3307,master_user="rep",master_password="123456",master_log_file="master.000001",master_log_pos=854;

    其中,master_log_file:该文件具体叫什么名称,需要从主机里面去看看。进入M1 里面使用root 用户登录M1,执行下面的SQL:

    启动主从:(在M1S1里面执行)start slave ;

    查询主从的状态(M1S1)show slave status \G;

    成功的标志:

    ​​​​​​​

    八、搭建失败的原因

    1.第一个不是yes是connecting

    是因为从机使用你配置的主机信息没有登陆到主机里面!修改(从机里面)

    stop slave;

    Change master to master_host="192.168.175.110",master_port=3307,master_user="rep",master_password="123456",master_log_file="master.000001",master_log_pos=854;

    start slave;

    ​​​​​​​2.第二个不是yes是no

    原因是主机和从机里的数据不一致

    从机会复制主机里面的SQL语句,来自己执行!实验时先把从机里面的db3 删除—>再把主机里面的db3 删除->从机里面复制该删除的命令->从机执行删除的命令(db3),事务无法提交,将一直阻塞!

    现在从机里面要删除db3 ,但是没有db3,导致一直阻塞,以后的主从复制不会进行了。解决:在从机新建一个db3,然后停止主从,启动主从:

    ​​​​​​​3.第一个不是yes,是no

    就是你的server-id 没有配置成功的原因,需要重新修改配置文件,复制配置文件到容器里面,然后重启就ok

    ​​​​​​​九、MySQL主从的操作规范

    1. 只能在主机里面执行DML 语句,不能在从机里面执行DML语句(会破坏主从)

    2. 在从机里面可以执行查询语句

    3. 主机只有一台,但是从机可以有多台

    ​​​​​​​十、测试

    在M1 里面创建数据库,看M1S1 有没有复制过去

     

  • 相关阅读:
    分布式存储系统之Ceph集群访问接口启用
    微火课堂:共享WiFi项目怎么代理,如何挑选合适的服务商?
    等保测评三级等保—安全设计思路
    python批量删除excel文件中的sheet页
    华为OD 最大岛屿体积(100分)【java】A卷+B卷
    腾讯 13 年,我所总结的Code Review终极大法
    JAVA设计模式详解 解构设计模式思想 详细代码对比
    11/27周总结报告
    杰理之可能出现有些芯片音乐播放速度快【篇】
    比较4个点的7种分布
  • 原文地址:https://blog.csdn.net/qq_52183856/article/details/134507942