• MySql 主从


    MySql 主从

    MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。

    最多有一个主服务器,可以有多个从服务器

    实现MySQL主从复制需要进行的配置:
    主服务器:

    • 开启二进制日志
    • 配置唯一的server-id
    • 获得master二进制日志文件名及位置
    • 创建一个用于slave和master通信的用户账号
      从服务器:
    • 配置唯一的server-id
    • 使用master分配的用户账号读取master二进制日志
    • 启用slave服务

    启动两个mysql 容器

    docker run -p 3301:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    docker run -p 3302:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    

    配置master

    使用如下命令进入到Master容器内部,使用容器ID或者名称均可:

    docker exec -it mysql-master /bin/bash cd /etc/mysql
    
    # 安装vim
    apt-get update
    apt-get install vim #修改配置
    vim my.cnf
    

    my.cnf 文件

    [mysqld]
    ## 同一局域网内注意要唯一
    server-id=100
    ## 开启二进制日志功能,可以随便取(关键)
    log-bin=master-bin
    binlog-format=ROW // 二级制日志格式,有三种 row, statement, mixed
    binlog-do-db=数据库名 //同步的数据库名称,如果不配置,表示同步所有的库
    

    或者在本地修改,然后拷贝到docker容器中的目录中

    docker cp my.cnf mysql-master:/etc/mysql/my.cnf

    重启mysql service

    service mysql restart
    docker container restart mysql-master
    

    创建数据库同步账户

    docker exec -it mysql-master /bin/bash
    mysql -uroot -p123456
    
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    

    配置 Slave 服务器

    使用如下命令进入到Master容器内部,使用容器ID或者名称均可:

    docker exec -it mysql-slave /bin/bash cd /etc/mysql
    cd /etc/mysql
    # 安装vim
    apt-get update
    apt-get install vim #修改配置
    vim my.cnf
    

    my.cnf 文件

    [mysqld]
    ## 设置server_id,注意要唯一
    server-id=101
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin
    ## relay_log配置中继日志
    relay_log=mysql-relay-bin
    read_only=1 ## 设置为只读,该项如果不设置,表示slave可读可写
    

    重启服务和容器

    service mysql restart 
    docker restart mysql-slave
    

    开启master-salve主从复制

    docker exec -it mysql-master /bin/bash 
    mysql -uroot -p123456
    

    进入Master库mysql客户端:输入 查看Master状态:

    查询主节点的ip地址

    docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
    

    进入到Slave库myslq客户端,执行如下命令:

    docker exec -it mysql-slave /bin/bash
    mysql -uroot -p123456
    

    设置同步

    change master to master_host='172.17.0.2',
    master_user='slave', master_password='123456', master_port=3306, master_log_file='master-bin.000002', master_log_pos=617, master_connect_retry=30;
    

    验证

    start slave;
    show slave status G
    

    Slave_IO_Running 和 Slave_SQL_Running是查看主从是否运行的关键字段,默认为NO,表示没有进行主从复制。
    使用 start slave;
    开启主从复制过程,然后再次查询主从同步状态

    show slave status G;。
    

    试一下, 在master创建一个数据库和一个表

    CREATE DATABASE demo;
    USE demo;
    create table emp_list_key
     (
    	empno varchar(20) not null , 
    	empname varchar(20),
    	deptno int,
    	birthdate date not null,
    	salary int
    )
     partition by list(deptno)
     subpartition by KEY(birthdate)
     subpartitions 3
     (
    		partition p1 values IN (10),  
    		partition p2 values IN (20),
    		partition p3 values in (30)
     );
     
    insert into emp_list_key (empno,empname,deptno,birthdate,salary) values (1,'zhangsan1',10,'2017-06-20',998);
    insert into emp_list_key (empno,empname,deptno,birthdate,salary) values (2,'zhangsan2',10,'2018-06-20',1998);
    insert into emp_list_key (empno,empname,deptno,birthdate,salary) values (3,'zhangsan31',20,'2019-06-20',2998);
    insert into emp_list_key (empno,empname,deptno,birthdate,salary) values (4,'zhangsan32',30,'2020-06-20',2998);
    
  • 相关阅读:
    POJ2503 Babelfish
    POJ3687 Labeling Balls(拓扑)
    POJ2251 Dungeon Master(bfs)
    POJ1321 棋盘问题(dfs)
    POJ3009 Curling 2.0(DFS)
    POJ2248 A Knight's Journey(DFS)
    POJ3080 Blue Jeans
    POJ1260 Pearls(dp,矩阵链乘法)
    POJ3349 Snowflake Snow Snowflakes(哈希)
    POJ2479 Maximum sum(dp)
  • 原文地址:https://www.cnblogs.com/Dannier/p/mysql-master-slave.html
Copyright © 2020-2023  润新知