mysql主从服务器

项目服务器框架

  •  

     

MySQL主从复制

mysql主从服务器配置

  • 什么是主从服务器?
    • 主从复制又叫AB复制,
    • 两台服务器做了主从后,A写入数据,B也会跟着写数据。  
    • 主从基于binlog的,主上需开启binlog进行主从
  • 主从过程
    • 主将更改记录到bin-log中
      • 主 二进制日志(binnary log)
      • 从 中继日志(relay log)
      • 中继 :zhōngjì 处在两条线路之间、把两条线路连接起来的中继站
    • 从库发起连接,连接到主库
    • 主库,创建log dump(日志转储)线程,把bin-log 内容发送到从库中
      • dump转储:就是将动态(易失)的数据,保存为静态的数据(持久数据),如把某一刻的内容,dump成文件
    • 从库,创建IO线程,把主库传来的bin-log内容写入到relay-log中
    • 从库,创建SQL线程,执行relay-log中的内容同步到DB中
    •  

       

  • 主从复制的作用?
    • 热备份,从库作为备份数据库,主库出现问题后可以切换到从库继续工作
      • 拓展:热备份(也称为动态备份或在线备份),这种技术可以在系统正常运行时进行备份,并且可以备份正在使用或编辑的数据库
      • 冷备份,是对数据库进行脱机备份,在备份过程中用户无法访问数据库,但冷备份速度更快更安全。
    • 读写分离,均衡数据库负载
  • 主从复制后主服务器挂了怎么办
    • 将从数据库提升位主库
    • 登录所有的从库,查看master.info文件,对比选择pos最大的作为新的主库    
  • 主从形式
    •     

docker搭建主从mysql

  • 相关连接
  • 搭建
    • 启动主机mysql
      • docker run -d -p 3306:3306 
        -e MYSQL_ROOT_PASSWORD=tsbx8888
        -e MYSQL_ROOT_HOST=%
        --name mysql-master
        -v /home/mysql-master/data:/var/lib/mysql
        -v /home/mysql-master/conf/my.cnf:/etc/mysql/my.cnf
        -v /home/mysql-master/mysql-files:/var/lib/mysql-files/
        -v /home/mysql-master/logs:/var/log/mysql mysql:8.0.22
      • 命令解释
        • -d:后台运行
        • -p:  (宿主机:容器)  将容器端口映射到宿主主机端口 
        • -name: 将容器命名为 mysql-master
        • -v:  将配置文件挂载到宿主机 
        • -e MYSQL_ROOT_HOST=%  这个选项就是用来设置允许远程访问的。
        • --restart=always 表示此容器开机启动,只要docker也设置了开机自启,docker不死
        • -v /etc/localtime:/etc/localtime 容器时间与宿主机同步
        • --privileged=true 挂载文件权限设置
      • 相关命令
        • docker ps -a #查看全部的容器(运行的加未运行的)
        • docker exec -it 容器ip前两位 bash #进入容器
    • 启动从机mysql

      • docker run -d -p 3307:3306 
        -e MYSQL_ROOT_PASSWORD=tsbx8888
        -e MYSQL_ROOT_HOST=%
        --name mysql-slave -v /home/mysql-slave/data:/var/lib/mysql -v /home/mysql-slave/conf/my.cnf:/etc/mysql/my.cnf -v /home/mysql-slave/mysql-files:/var/lib/mysql-files/ -v /home/mysql-slave/logs:/var/log/mysql mysql:8.0.22
    • 在宿主主机文件夹:/home/mysql-slave/conf/ 新建my.cnf (缺少这个配置文件容器起不来)并设置mysql大小写不明感

    • 修改主机的my.cnf配置文件

      • [mysqld]

        #主服务器唯一id
        server-id=1
        #开启二进制日志功能,可以随便取(关键)
        log-bin=master-bin
        #设置不要复制的数据库(可以设置多个)
        binlog-ignore-db=mysql
        binlog-ignore-db=information_schema
        binlog-ignore-db=sys
        binlog-ignore-db=performance_schema
        #设置需要复制的数据库
        binlog-do-db=mes_db
        #二进制日志格式,有三种 row,statement,mixed
        binlog-format=STATEMENT

         
      • 二进制三种模式的区别

        • statement 基于语句模式,主机通过sql语句复制到从机

        • row基于行的日志记录,表中需使用主键来确保行被有效识别

        • mixed混合模式自动切换   

    • 修改从机的my.cnf配置文件 

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

      • docker restart mysql-master mysql-slave
  • 搭建主从复制

    • 主机设置
  •  

    • 进入主机容器

      • docker exec -it 容器id或者容器名称  /bin/bash
    • 登录mysql客户端

      • mysql -uroot -ptsbx8888
    • 授予用户 [slave] REPLICATION SLAVE权限和REPLICATION CLIENT权限

      • CREATE USER 'slave'@'%' IDENTIFIED BY 'tsbx8888';
        GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    • 查询master状态

      • # 展示状态
        show master status;

         

      • 记住file和position栏对应的内容:

      • 注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值的变化

    • 从机设置

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

      • change master to master_host='172.17.0.3', master_user='slave', master_password='tsbx8888', master_port=3306, master_log_file='master-bin.000001', master_log_pos=710, master_connect_retry=30;

         

      • 解释

        • master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

        • master_host :Master库的地址,指的是容器的独立ip,可以通过;宿主机IP+端口也可以(√)

          • docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP  进行查询

             

      • 在slave中mysql的终端执行命令:

        • # 开启主从复制
          start slave;
          # 再次查看状态
          show slave status \G

           

      • 如何停止从服务复制功能

        • 在slave容器内的 mysql 客户端内执行:

          • 使用stop slave;命令

      • 如何重新配置主从

        • 在slave容器内的 mysql 客户端内执行:

          • 使用这两个命令 stop slave;reset master;

      • mysql 主从数据不一致,提示: Slave_SQL_Running: No 的解决方法

        • 先停掉slave   mysql> stop slave;

        • 跳过错误步数,后面步数可变   mysql> set global sql_slave_skip_counter=1;

        • 再启动slave  mysql> start slave;

        • 查看同步状态  mysql> show slave status\G; 
        • 修改主库my.conf文件 :default_authentication_plugin=mysql_native_password     
        • 主库创建 slave 用户 密码是根据 mysql_native_password 加密方式
        • 重新配置从库;
        • mysql8.*的新特性 caching_sha2_password 密码加密方式
        • 以前版本的mysql密码加密使用的是 mysql_native_password
          新添加的用户密码默认使用的 caching_sha2_password
      • MySQL 中的mysql>变成了‘>怎么办?

        • 缺少引号  
      •  

          

Springboot配置主从myql

  • 相关连接
  • 实现的效果,主从搭建完毕,从主库中进行读写,从库实现热备(代码未改动连接主库

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2022-04-21 10:12  BBS_自律  阅读(41)  评论(0编辑  收藏  举报