mysql主从复制原理及实验

读写分离实现原理

  1. 首先MySQL主库在事务提交的时候会把数据变更作为Events记录在二进制文件Binlog中,MySQL主库的sync_binlog参数控制Binlog日志刷新到磁盘。

  2. 主库推送二进制日志文件Binlog中的事件到从库的中继日志Rely Log,之后从库根据Relay Log重做数据变更操作,通过逻辑赋值达到主库和从库数据一致的目的。MySQL通过3个线程完成主从复制:其中Binlog Dump线程跑在主库上,I/O线程和SQL线程跑在从库上,主库随后创建Binlog Dump线程读取数据库事件并发送给I/O线程,I/O线程获取到事件数据后,更新到从库的Relay log中去,之后从库的SQL线程读取RelayLog并应用。


    原理图.png

实验介绍

实验背景

  • 两台Mac电脑A和B,使用MAMP自带的mysql数据库,通过
 vim ~/.zshrc
添加
 alias mysql=/Applications/MAMP/Library/bin/mysql

实现mysql命令重定向。
A作为主库服务器主要负责写,B作为从库服务器负责读。
B开启了远程ssh登录,用SecureCRT同时连接本地和B。

连接窗口.png

实验步骤

1.连接数据库

分别在两个窗口连接数据库,两个数据库事先建立数据库learn,和一个表content

content表结构.png

 mysql -u root -p
2.编辑mysql配置文件
  1. 主库配置
server-id = 1 #主机设置为1,从机设置为IP的最后一段保证唯一性
log-bin=mysql-bin
主库配置文件.png

创建一个专门用来同步数据的账号

grant replication slave  on *.* to 'mysync'@'%' identified by '123456789';
show master status # 查看主库的状态
主库状态.png

2.从库配置

#主服务器地址,同步数据的用户名,密码,日志文件的位置,日志文件名
 change master to master_host='192.168.0.105',master_user='mysync',master_password='123456789',master_log_file='mysql-bin.000001',master_log_pos=439;
start slave;#开启从服务器

检验从服务器是否配置好

show slave status \G;
#查看服务器状态 
Slave_IO_Running :connect 
Slave_SQL_Running:yes
的时候表示成功

验证,如果在主库的表插入一条记录,会发现从库表也有了相同的记录。主库增删改都会在从库体现。

主库插入.png

查询从库发现中文显示问号,但是去从库里面实际观察发现存入的是中文


查询从库中文显示问号.png
查看字符集.png

更改为UTF8

 set character_set_connection=utf8;
 set character_set_results=utf8;
 set character_set_client=utf8
从库读取.png

你可能感兴趣的:(mysql主从复制原理及实验)