基于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 status\G
        
    
    2、 show slave status\G ,显示 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的信息

 

posted @ 2020-10-29 16:24  码来  阅读(114)  评论(0编辑  收藏  举报