Mysql主从复制原理是啥?

主库将变更写入到binlog日志,然后从库连接到主库后,从库有一个io线程,将主库的binlog日志拷贝到自己本地,写入一个relay中继续日志中。接着从库中一个sql线程会从中继日志读取binlog,然后执行binlog日志中的内容,也就是在自己本地再次执行一遍sql,这样可以保证自己跟主库的数据是一样的。
image.png
上述转载:中华石衫大厂面试突击第一季(https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/mysql-read-write-separation.md

如何通过本地搭建mysql主从配置

  1. 在mysql的配置文件中修改my.ini文件,在配置文件中配置日志输出的名称 log-bin=mysql-bin,默认日志保存在data目录中去。(端口号为3306为主库,端口号为3307的为从库)

    两台mysql的配置如下:
    image.pngimage.png

  2. 在navicat中创建两个navicat连接 分别连接两个mysql服务器

  3. 在主服务器上(3306端口)创建用户用于中从复制的授权
  1. #'slave'@'192.168.0.106'
  2. # slave是用户名 后面slave是密码
  3. # 192.168.0.106 是允许访问的远程ip地址,这里要写从属读服务器的IP
  4. # 因为演示环境是在本机访问,因此都是192.168.0.106生产环境要改为自己的ip
  5. create user 'slave'@'192.168.0.106' IDENTIFIED BY 'slave'
  6. #为slave用户授予主从复制的权限
  7. grant replication slave on *.* to 'slave'@'192.168.0.106';
  8. #激活权限
  9. flush PRIVILEGES
  10. # 查看是否配置成功
  11. show master status
  12. # 一般的编辑器是无法打开mysql的bin-log配置文件
  13. show binlog events in 'mysql-bin.000001'
  1. 在从属服务器上(3307端口)创建用于从属服务器的配置
CHANGE MASTER TO 
# mysql主服务器的ip地址
MASTER_HOST='192.168.0.106',
# mysql主服务器的端口号
MASTER_PORT=3306,
# mysql创建用于同步的用户名
MASTER_USER='slave',
# 密码
MASTER_PASSWORD='slave',
# 用于同步的bin-log配置文件
MASTER_LOG_FILE='mysql-bin.000001',
# 从那开始进行数据同步
MASTER_LOG_POS=455

# 开始主从复制
start slave

上述配置转自 www.itlaoqi.com 中的 http://www.itlaoqi.com/chapter/1638.html