主从复制

复制的基本原理

slave 会从 master 读取 binlog 二进制文件来进行数据同步。

image-20200825192623835

MySQL 复制过程分成三步:

  1. master 将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;

  2. slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);

  3. slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化的

复制的基本原则

  1. 每个 slave 只有一个 master
  2. 每个 slave 只能有一个唯一的服务器 ID

  3. 每个 master 可以有多个 salve

复制的最大问题

因为发生多次 IO,存在延时问题

一主一从常见配置

  1. mysql 版本一致且后台以服务运行

  2. 主从都配置在[mysqld]结点下,都是小写。

    主机修改 my.ini (windows)配置文件

    # 主服务器唯一 ID
    server-id=1
    # 启用二进制日志
    log-bin=自己本地的路径/data/mysqlbin 
    # 启用错误日志 [非必须]
    log-err=自己本地的路径/data/mysqlerr
    # 根目录 [非必须]
    basedir=自己本地的路径
    # 临时目录 [非必须]
    tmpdir=自己本地的路径
    # 数据目录 [非必须]
    tmpdir=自己本地的路径/data
    # 设置不要复制的数据库  [非必须]
    binlog-ignore-db=mysql
    # 设置需要复制的数据库 binlog-do-db=需要复制的主数据库名字 设置 logbin 格式  [非必须]
    binlog_format=STATEMENT(默认)
    
  3. 从机配置文件修改 my.cnf 的[mysqld]节点

    # 从机服务 id
    # 注意 my.cnf 中有 server-id = 1 
    server-id = 2
    # 设置中继日志 
    relay-log=mysql-relay	
    
  4. 因修改过配置文件,请主机+从机都重启后台 mysql 服务

    service iptables stop
    
  5. 主机从机都关闭防火墙、安全工具(腾讯管家等)

  6. 在 Windows 主机上建立帐户并授权 slave

    -- 创建用户,并授权
    GRANT REPLICATION SLAVE ON *.* TO 'silince'@'从机器数据库 IP' IDENTIFIED BY '123456';
    -- 刷新
    flush privileges;
    
  7. 查询 master 的状态,并记录下 File 和 Position 的值

    -- 查询 master 的状态;记录下File和Position的值
    show master status;
    
  8. 在 Linux 从机上配置需要复制的主机

    -- 查询 master 的状态
    CHANGE MASTER TO MASTER_HOST='主机 IP',MASTER_USER='silince',MASTER_PASSWORD='创建的密码', MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position数字;
    
  9. 启动从服务器复制功能

    start slave;
    show slave status\G;
       
    -- 主从配置成功 显示
    Slave_IO_Running: Yes 
    Slave_SQL_Running: Yes
    
  10. 主机新建库、新建表、insert记录,从机复制

  11. 如何停止从服务复制功能

    stop slave;