• 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

    • 相关连接
    • 实现的效果,主从搭建完毕,从主库中进行读写,从库实现热备(代码未改动连接主库
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Windows server 2016 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同。”
    Windows Server 2016 辅助域控制器搭建
    Windows Server 2016 主域控制器搭建
    Net Framework 4.7.2 覆盖 Net Framework 4.5 解决办法
    SQL SERVER 2012更改默认的端口号为1772
    Windows下彻底卸载删除SQL Serever2012
    在Windows Server2016中安装SQL Server2016
    SQL Server 创建索引
    C#控制台或应用程序中两个多个Main()方法的设置
    Icon cache rebuilding with Delphi(Delphi 清除Windows 图标缓存源代码)
  • 原文地址:https://www.cnblogs.com/nextgg/p/16172972.html
Copyright © 2020-2023  润新知