zoukankan      html  css  js  c++  java
  • 搭建主从复制mysql(docker中)

    1、搭建主库

    #创建目录
    mkdir /data/mysql/master01
    如果不存在:mkdir /data/mysql/master01 -p
    #进入master01目录
    cd /data/mysql/master01

    #创建conf和data文件夹 用来存放配置和数据
    mkdir conf data

    #给文件夹授权
    chmod 777 * -R

    #创建配置文件
    cd /data/mysql/master01/conf
    vim my.cnf

    #输入如下内容
    [mysqld]
    #开启二进制日志

    log-bin=mysql-bin
    #服务id,不可重复
    server-id=1
    #创建并运行容器
    docker run --name=mysql-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
    #创建同步账户以及授权 账户wlwpass 密码wlwpass

     create user 'wlwpass'@'%' identified by 'wlwpass';






    flush privileges;

    
    

     解决错误:

    修改my.conf文件

    vim /data/mysql/master01/conf/my.conf

    文件后添加:

    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

    #重启mysql服务并打印日志

    docker restart mysql-master01 && docker logs -f mysql-master01

    再重新flush privileges;

    但是我还是报错,于是:

    show variables like '%sql_mode%';
    set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

     

     show master status;

     发现File和Position为空值

     发现日志没打开

    vim /data/mysql/master01/conf/my.conf

    log-bin配置项表示binlog的base name,产生的日志文件名称类似,mysql-bin.00001,mysql-bin.00002,mysql-bin.00003。

    重启mysql

    如果使用了GTID(global transaction ID),Executed_Gtid_Set表示已经在这个master上执行的GTID集合,与这个server上的系统变量gtid_executed 含义相同。

    如果该server是slave,则执行show slave status中是输出的对应列Executed_Gtid_Set,含义也相同。


    以上还是解决不了打开不了日志,用下面方法

    docker exec mysql-master01 bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
    docker exec mysql-master01 bash -c "echo 'server-id=1' >> /etc/mysql/mysql.conf.d/mysqld.cnf"

     成功!!!!!!!

    #查看二进制日志相关的配置项 show global variables like 'binlog%';

     #查看server相关的配置项 show global variables like 'server%';

     主库配置结束


    搭建从库
    #创建目录
    mkdir /data/mysql/slave01
    cd /data/mysql/slave01
    mkdir conf data
    chmod 777 * -R

    #创建配置文件
    cd /data/mysql/slave01/conf
    vim my.cnf
    #输入如下内容
    [mysqld]
    server-id=2 #服务id,不可重复
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

    docker run --name=mysql-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v
    /data/mysql/slave01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=iot@2020
    mysql:5.7

    主的配置:

     在从中配置映射:

    CHANGE MASTER TO
    master_host='10.2.10.67',
    master_user='wlwpass',
    master_password='wlwpass',
    master_port=3306,
    master_log_file='mysql-bin.000001',
    master_log_pos=154;

  • 相关阅读:
    Java SE 第十一讲(面向对象之封装)续二
    Java SE 第二十六讲 包与导入语句剖析
    Java SE 第三十一,二,三 Java数组剖析,Java数组内存地址解析
    Java SE 第三十四,五,六讲 Array类解析及数组疑难剖析,冒泡排序,交换排序以及快速排序
    Java SE 第三十八,九,四十,四十一,四十二,三四IDE详细介绍,ArrayList源代码深入剖析,L
    java高效的获取指定的精度的double数
    C++ 字符常量
    C++ endl
    C++基本数据类型
    vs2005的treeview简单使用之无限级别菜单建立
  • 原文地址:https://www.cnblogs.com/su-ke/p/13805110.html
Copyright © 2011-2022 走看看