zoukankan      html  css  js  c++  java
  • 基于Docker的Mysql 主从架构搭建

    一、创建mysql主从服务器容器
    docker run -it docker run -it  --name mysql_slave5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    docker run -it docker run -it  --name mysql_master5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
     
    二、修改账号权限
    授权root用户可以从任何机器上访问服务
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypassword'
    FLUSH   PRIVILEGES;
     
    三、查看日志文件的位置
    查看日志文件和文件位置-如果需要日志挂在则需要这个地址:
    show variables like '%log%'
     
    四、配置主从同步
    登陆到容器master节点上,修改主节点的配置文件:
    1. 安装vim :apt-get install vim
    2. 解决vim不能复制的问题: vim ~/.vimrc  
    set mouse=c
    syntax on

        3. 配置mysql的server-id和日志功能

        

    [mysqld] 
    ## 同一局域网内注意要唯一 
    server-id=100 
    ## 开启二进制日志功能,可以随便取(关键) 
    log-bin=mysql-bin
    1.   重启mysql和对应的容器
            service mysql restart,
            docker start mysql_master5.7
    1.  在主库上创建同步日志使用的账号并授予权限
            CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
            GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    1.   部署slave,修改配置文件,然后重启mysql和容器

        

    [mysqld] 
    ## 设置server_id,注意要唯一 
    server-id=101 
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 
    log-bin=mysql-slave-bin 
    ## relay_log配置中继日志 
    relay_log=edu-mysql-relay-bin
            7.    master中执行,查看日志状态: show master status
            8.     在Slave 中进入 mysql
                change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 154, master_connect_retry=30;
                参数解析:
        
    1 host  :Master容器的独立IP,查询语句, 
    docker inspect --format='{{.NetworkSettings.IPAddress}' mysql_master5.7
    2 master_user :数据同步的用户名,在Master上自己创建的
    3 master_password: 数据同步的密码,在Master上自己创建的用户带有的密码
    4 master_port :Master服务器容器的端口号,指的是容器的端口号
    5 master_log_file: Slave从Master的那个日志文件复制数据 ,show master status;可以查看文件名称,和position参数
    6 master_log_pos:从master_log_file文件的具体那个位置开始复制文件
    7 master_connect_retry:链接失败的时候重试的时间间隔,默认60s(单位秒)
          9. Slave服务器上执行  show slave status 查看同步状态和配置信息,可以看到运行状态都是No
                 Slave_IO_Running: No
                Slave_SQL_Running: No
             10.    启动Slave服务:start slave;,然后在次执行 show slave status,查看同步进程是开启的了。
             11.    在主库中添加数据,查看数据是否正常同步
     
    五、问题整理
        1、数据同步失败日志 : show slave statusG
            
        
        2、 show slave statusG ,显示 Slave_SQL_Running: No
                1)程序可能在slave上进行了写操作
                2.)也可能是slave机器重起后,事务回滚造成的.
              有两种解决办法:
                    1) slave跳过一个事务同步

        

    mysql> stop slave ;
    mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; //跳过一个event,如果正好落到一个事务里面则,跳过那个事务
    mysql> start slave ;

            2) 手动同步salve数据参数:

         

    1 查看master中同步的日志和对应的位置: show master status;
    2 停止slave, stop slave
    3  slave上执行脚本,重新设置数据参数:
      change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 2060, master_connect_retry=30; 4 启动slave,start slave 同步过程中master不能插入数据,即日志的position不能修改

      3)如果要求数据完全一致,则主库数据完全同步到从库,重新设置slave中master的信息

  • 相关阅读:
    .net 有游戏框架了?庆祝下
    python爬虫解决gbk乱码问题
    N46期第10周作业
    N46期第四周作业
    N46期第三周作业
    N46期第九周作业
    月考
    第二阶段
    N46期第八周作业
    第七周
  • 原文地址:https://www.cnblogs.com/lean-blog/p/13897422.html
Copyright © 2011-2022 走看看