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的信息

  • 相关阅读:
    广域网(ppp协议、HDLC协议)
    0120. Triangle (M)
    0589. N-ary Tree Preorder Traversal (E)
    0377. Combination Sum IV (M)
    1074. Number of Submatrices That Sum to Target (H)
    1209. Remove All Adjacent Duplicates in String II (M)
    0509. Fibonacci Number (E)
    0086. Partition List (M)
    0667. Beautiful Arrangement II (M)
    1302. Deepest Leaves Sum (M)
  • 原文地址:https://www.cnblogs.com/lean-blog/p/13897422.html
Copyright © 2011-2022 走看看