主从同步

大致图(来自网上)
  • 二进制日志(binary log)、中继日志(relay log)
    1、master将改变的数 记录在本地的二进制日志中;
    2、slave将master的binary log拷贝到自己的relay log
    3、中继日志事件,将数据读取到自己的数据库中

MYSQL主从复制是异步的,串行化,有延迟
master:slave = 1 : n

主机配置

master的配置文件:

[mysqld]
# id
server-id=1
# 二进制文件日志保存路径
log-bin="D:/data/mysql-bin"
# 错误记录文件日志
log-error="D:/log/mysql-error"
#主从同步是,忽略的数据库
binlog-ignore-db=...
#(可选)指定主从同步时,同步哪些数据库
binlog-do-db=...

  • 主数据库授权哪个数据库为自己的slave

GRANT REPLICATION slave,reload,super ON . TO 'root'@'192.168.11.%' IDENTIFIED BY 'root';
flush privileges;

  • 查看主数据库的状态
    show master status;
    image.png

    记录File和Position的值(可能会变,做同步前,需要查看下最新),从机配置需要用到

从机配置:

slave的配置文件:

[mysqld]
# id
server-id=2
log-bin=mysql-bin
replicate-do-db=test

  • 从机授权

CHANGE MASTER TO
MASTER_HOST = '192.168.2.1',
MASTER_USER = 'root',
MASTER_PASSWORD = '123456',
MASTER_PORT=3306,
master_log_file = 'mysql-bin.000001',
master_log_pos=575;

开启主从机同步

  • 开启
    从机:

start slave;
检验:show slave status \G,观察:


image.png

确保二者都是YES
可查看下面的Last_IO_Error字段提示信息:
错误原因,有可能是使用了相同的server-id

分别查看主从中server-id

show variables like '%server_id%'

若是版本问题,导致的server-id不生效,可通过全局变量设置解决:
set global server_id = 2;

你可能感兴趣的:(主从同步)