侧边栏壁纸
  • 累计撰写 106 篇文章
  • 累计创建 19 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

MySQL主从复制

zero
2021-01-20 / 0 评论 / 0 点赞 / 18 阅读 / 4127 字
温馨提示:
本文最后更新于 2024-07-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1.复制的基本原理

slave会从master读取binlog来进行数据同步

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

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

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

2.复制的基本原则

  • 每个slave只有一个master

  • 每个slave只能有一个唯一的服务器ID

  • 每个master可以有多个salve

3.复制的最大问题

延时

4.一主一从常见配置

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

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

  • 主机修改my.ini配置文件

    需要在docker内安装vim

    root@7246f4d3f11d:/etc/mysql# apt-get install vim
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    E: Unable to locate package vim

    执行apt-get update进行更新

    再次执行apt-get install vim

    进入mysql容器

    docker exec -it 容器id /bin/bash

    数据库配置文件在/etc/mysql/my.cnf

    数据库文件在/var/lib/mysql

    1. [必须]主服务器唯一ID

      server-id=1 #同一局域网内注意要唯一
    2. [必须]启用二进制日志

      log-bin=自己本地的路径/mysqlbin

      ## 开启二进制日志功能,可以随便取(关键)

    3. [可选]启用错误日志

      log-err=自己本地的路径/mysqlerr

    4. [可选]根目录

      basedir="自己本地路径"

      basedir="" #这里带引号

    5. [可选]临时目录

      tmpdir="自己本地路径"

    6. [可选]数据目录

      datadir="自己本地路径/data/"

    7. read-only=0

      主机读写都可以

    8. [可选]设置不要复制的数据库

      binlog-ignore-db=mysql

    9. [可选]设置需要复制的数据库

      binlog-do-db=需要复制的主数据库名字

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

    1. [必选]从机唯一ID

      server-id = 200

    2. [可选]启用二进制日志

修改过配置文件,主机从机均需重启mysql服务

docker restart 容器id

主机建立账户并授权slave

  • 建立账户

    create user 'root200'@'192.168.1.200' identified by 'hzzq88801548d200';
  • 赋权

    grant REPLICATION SLAVE ON *.* to 'root200'@'192.168.1.200';
  • 刷新权限

    flush privileges;
  • 查看数据库状态

    mysql> show master status;
    +-----------------+----------+--------------+------------------+-------------------+
    | File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-----------------+----------+--------------+------------------+-------------------+
    | myql-bin.000004 |   445830 |              | mysql            |                   |
    +-----------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)

    记录下file和Position的值

从机上配置需要赋值的主机

  • 命令

    change master to master_host='192.168.1.200',
    master_user='root205',
    master_password='123456',
    master_log_file='mysql-bin.000001',
    master_log_pos=156;
  • 开启slave

    start slave;
  • show slave status \G;

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    这两个都为yes,代表成功

  • 停止主从复制

    stop slave;

0

评论区