MySQL 主从复制 读写分离

MySQL集群有多重模式,常见的方案有replication,pxe等,本文介绍master-slave方案,即replication。主实例master进行写入,更新,删除等更改操作,从一个或者多个slave实例仅提供查询,因为我们数据库操作中,查询操作比其他操作多频繁得多,从而减轻数据库整体压力,提高数据库性能
要求:
1. 版本一致
2. 初始化表,并在后台启动mysql
3. 数据库结构一致
上代码,
先配置主服务器,编辑mysql配置文件,加入下面参数

  [mysqld]
  log-bin=mysql-bin   #[必须]启用二进制日志
  server-id=21          #[必须]服务器唯一ID,默认是1,一般取IP最后一段

修改从服务器,编辑mysql配置文件,加入下面参数

  [mysqld]
    log-bin=mysql-bin   #[不是必须]启用二进制日志
   server-id=132        #[必须]服务器唯一ID,默认是1,一般取IP最后一段
   #master-connect-retry  #用来设置在和主服务器连接丢失的时候,重试的时间间隔,默认是60秒 自行设置
   #read-only        #仅支持读操作     还有同步延迟等其他参数可以上网查阅资料    
修改完后重启MySQL服务
在主服务器上建立帐户并授权slave,执行sql
GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; 
#一般不用root帐号,%表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.2.132,加强安全。
执行sql show master status; 查看master状态,至此,再无需操作master实例
image.png
配置从服务器Slave,执行sql
change master to master_host='192.168.2.21',master_user='mysync',master_password='q123456',master_log_file='mysql-bin.000001',master_log_pos=556;   #注意不要断开,556数字前后无单引号。
start slave #启动主从复制 
show slave status#查看从服务器状态
#注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

新建一个数据库,创建表,在主服务器写入数据,从服务器自动同步,结果如下
MySQL 主从复制 读写分离_第1张图片
image.png
实现原理
  1. 根据server-id 区分各自实例 注意底部是否已经设置好为1
  2. 主实例开启二进制日志,每次执行的sql都保存到这里
  3. 主实例开放账号允许从实例连接 (可以绑定特定的数据库)
  4. 从实例通过change master to 定向连接主实例,通过定时器每隔一定时间(毫秒)对比同步日志节点位置,发现本地节点pos编号与主实例不一致,拉取差异日志sql,执行同步
至此,mysql简单的主从复制配置完成。但是个人认为学习是必要的。在真正的开发上,没有足够信心的情况下,建议使用云产品,如阿里云 腾讯云等提供成熟的MySQL集群,较少运维负担。谢谢大家

你可能感兴趣的:(MySQL 主从复制 读写分离)