Mysql主从复制原理是啥?
主库将变更写入到binlog日志,然后从库连接到主库后,从库有一个io线程,将主库的binlog日志拷贝到自己本地,写入一个relay中继续日志中。接着从库中一个sql线程会从中继日志读取binlog,然后执行binlog日志中的内容,也就是在自己本地再次执行一遍sql,这样可以保证自己跟主库的数据是一样的。
上述转载:中华石衫大厂面试突击第一季(https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/mysql-read-write-separation.md)
如何通过本地搭建mysql主从配置
在mysql的配置文件中修改my.ini文件,在配置文件中配置日志输出的名称 log-bin=mysql-bin,默认日志保存在data目录中去。(端口号为3306为主库,端口号为3307的为从库)
两台mysql的配置如下:
在navicat中创建两个navicat连接 分别连接两个mysql服务器
- 在主服务器上(3306端口)创建用户用于中从复制的授权
#'slave'@'192.168.0.106'
# slave是用户名 后面slave是密码
# 192.168.0.106 是允许访问的远程ip地址,这里要写从属读服务器的IP
# 因为演示环境是在本机访问,因此都是192.168.0.106生产环境要改为自己的ip
create user 'slave'@'192.168.0.106' IDENTIFIED BY 'slave'
#为slave用户授予主从复制的权限
grant replication slave on *.* to 'slave'@'192.168.0.106';
#激活权限
flush PRIVILEGES
# 查看是否配置成功
show master status
# 一般的编辑器是无法打开mysql的bin-log配置文件
show binlog events in 'mysql-bin.000001'
- 在从属服务器上(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