读写分离及主从复制

一、主从复制要求:

  a) 至少有两个服务器

  b) 分别设置主服务器和从服务器

  c) 对主服务器有任何操作都会同步到从服务器上

二、实现原理:

  a) MySQL中有一个日志bin日志(也叫二进制日志),此日志记录了所有操作数据库的的sql语句

  b) 主从复制原理实际上是多台服务器都开启了bin日志,然后主服务器会把执行过的sql语句记录到bin日志中,之后从服务器读取此bin日志,把该日志内容保存到自己日志中去,从服务器并将记录的sql语句执行一遍,这样主服务器与从服务器的数据就同步了。

  c) 实现的技术:用户的授权,log_bin日志的开启

  d) 问题:如何解决主从同步过程中的延迟问题?

  e) 答:在主从同步过程中添加一个缓存服务器,把刚更新的数据暂时保存在缓存服务器中

三、log_bin日志

  a) 如何开启log_bin日志:

  1. 打开my.ini的配置文件
  2. Linux在my.cnf配置文件进行配置

  b) 如何查看log_bin日志的内容

  1. 使用一个命令
  2. Mysqlbinlog -no-defaults 日志文件名和路径

  a) Log_bin日志的一些命令操作

  1. 前提:数据MySQL相关命令
  2. Flush logs产生一个新的log_bin日志
  3. Reset master;清空以前的log_bin日志,并产生一个新的log_bin日志
  4. Show master status;查看最新的log_bin日志,包括最新的POS位置

  b) 使用log_bin日志完成一个案例,恢复数据的一个案例

  1. 步骤    新建一张表
  2. Create table test(id int);
  3. Flush logs产生一个新的log_bin日志文件
  4. Insert into test values(100);
  5. Insert into test values(200);
  6. Insert into test values(300);
  7. Flush logs产生一个新的log_bin日志
  8. Delete from test
  9. 要求恢复数据
  10. 比如一家公司,在上午十点备份了一次数据,到十点半时,由于员工的误操作,把所有数据都删除了,要求回复到十点半
  11. 思路:打开log_bin日志,进行分析,查找insert和POS的位置,根据POS的位置来回复数据
  12. 第一步:查看当前日志信息
  13. 第二步:查看操作sql位置
  14. 第三步:使用一下命令还原
  15. Mysqlbinlog -no-default 日志文件 -start-pos=开始pos点-stop-pos=结束pos点 |Mysql -uroot -proot test

三、主从配置

  说明:在同步之前,要同步的数据库在两个数据库服务器中必须都存在,两个数据库应该一致。开启主从同步后,主服务器的写操作都会同步到从服务器中

 

 

 

  a) 配置主服务器:

  1. 主和从服务器都要开启log_bin日志,每台服务器设置一个唯一的server-id的值。并重启服务器
  2. 主服务器:47.93.58.95
  3. 要给从服务器授权一个用户,该用户授权复制
  4. 要查看主服务器里面log_bin日志和pos的位置(停止对主服务器的操作,暂时不往里面做更新操作)
  5. Show master status

  b) 配置从服务器

  1. 从服务器ip:47.93.58.96
  2. 执行stop slave停止从服务器
    1. Stop slave
    2. 具体的配置

  a) Change master to master_host=主服务器的ip,master_user=授权的用户名,master_password=授权的密码,master_log_file=log_bin 日志文件的名称,master_log_pos=pos位置;

  b) 

  1. 开启从服务器start slave

    a) Start salve

    b) 

    c) 查询从服务器状态

  1. show slave status
    1. Slave_IO_Running:Yes
    2. 此进程负责从服务器从主服务器上读取binlog日志,并写入从服务器的中继日志
    3. Slave_SQL_Running:Yes
    4. 此进程负责读取并且执行中继日志中的binlog日志

  a) 注:以上两个都为yes则表名成功,只要其中一个进程的状态是no,则表示复制进程停止,错误原因可以从“last_error”字段中的值看到

  1. 演示结果:

    a) 主服务器插入数据,可以在从服务器上同步

    b) 主服务器

    c) 

    d) 从服务器

    e) 

  c) 如何撤销从服务器

  1. Stop slave
  2. Reset slave all
    1. 从服务器
    2. 主服务器

四、读写分离的实现

  a) 在层次进行设计

  b) Class mysql{

    $dbm = 主服务器

    $dbs1= 从服务器

    $dbs2= 从服务器

    Public function query(){

      在query里面进行语句判断,分析链接不同的mysql服务器

      如果是查询则随机链接两台从服务器,如果是修改操作,则连接主服务器

    }

  }

  c) 

  d) 

  e) 

  f) Tp框架支持读写分离:

  1. DB_DEPLOY_TYPE => 1 //分布式数据库支持
  2. DB_TYPE => mysqli ,//数据库类型
  3. DB_HOST => localhost,192.168.3.250,//服务器地址
  4. DB_NAME => php,//数据库名
  5. DB_USER => root,//用户名
  6. DB_PWD => root//密码
  7. DB_PORT => 3306,//端口
  8. DB_PREFIX => ’’,
  9. DB_RW_SEPARATE => true,//支持读写分离

  g) 

五、说明:

  a) 以上配置为读写分离操作,如果需要做到读写分离、主从复制,还必须手动配置开启主从复制模式

时间: 2024-10-11 11:32:56

读写分离及主从复制的相关文章

全文索引Sphinx+binlog日志+Grant用户授权+读写分离和主从复制

一.全文索引Sphinx 1.什么是Sphinx Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.它是基于C语言开发出来的.中文翻译为斯芬克司斯芬克司. Sphinx最好的应用操作系统是Linux 2.Sphinx的优势 Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索.Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Pytho

【数据库】读写分离、主从复制

1. 数据库读写分离 读写分离,基本的原理就是让主数据库(master)处理事务性增.删.改操作(INSERT,DELETE,UPDATE),从数据库(slave)处理SELECT查询操作.数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库. 主库负责写数据.读数据.读库仅负责读数据.每次有写库操作,同步更新cache,每次读取先读cache在读DB MySQL读写分离基本原理是让master数据库处理写操作,slave数据库处理读操作.master将写操作的变更同步到各个slave节

MYSQL数据切分(分库分表),读写分离和主从复制

参考1 参考2 对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问题.通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式. 数据切分:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失: 负载均衡策略:可以降低单台机器的访问负载,降低宕机的可能性: 集群方案:解决了数据库宕机带来的单点数据库不能访问的问题: 读写分离策略:最大限度了提高了应用中读取数据的速度和并发量: 这里主要谈及数据切分和其相关数据库优

mysql读写分离(主从复制)实现

mysql主从复制 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 主从最好都是同一种系统比如都是linux,或者都是windows,当然混合着也是可以成功,不解释了 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql 1.3.修改root的密码 2.修改主服务器master: #vi /etc/my.cnf [mysqld] log-bin=mysql-bin   //[必须]启用二进制日志 server-id=222       /

redis读写分离,主从复制

master配置:(主服务 redis.conf) requirepass masterpassword (配置密码) port 6379 (配置端口) slave配置 requirepass slavepassword (配置密码) port 6380(配置端口) slaveof 127.0.0.0 6379  (主配置地址 端口) masterauth masterpassword  (主配置密码) 启动主从服务

mysql主从复制与读写分离

MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部

MySQL 复制过滤器、监控维护及主从复制的读写分离

MySQL 复制过滤器.监控维护及基于SSL的主从复制 =============================================================================== 概述: 本章将主要介绍MySQL复制中如何过滤,监控维护,以及基于SSL的主从复制,具体内容如下: MySQL 复制过滤器 ·从服务器库级别过滤 MySQL 清理日志:PURGE 复制监控 ·Master ·Slave 如何确定主从节点的数据是否一致 MySQL基于SSL的主从复制(

Proxysql,MariaDB 主从复制和读写分离

准备: 4台vm (centos 7.3): 192.168.1.120 proxysql 192.168.1.121 node1 master 192.168.1.122 node2 slave 192.168.1.123 node3 slave 一. 在node1,node2,node3安装mariadb, mariadb-server (以root用户安装) 1. yum安装 # yum install mariadb mariadb-server -y 2. 启动服务 # systemc

mysql主从复制-读写分离-原理

Mysql主从复制和读写分离 在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是不能满足实际需求的.因此,一般通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力. Mysql主从复制和读写分离 l 主从复制: Mysql的主从复制和mysql的读写分离两者有紧密的联系,首先要部署主从复制,只有主从复制完成了,才能再此基础上进行数据的读写分离. Mysql支持的复制类型: 1. 基于语句的复制:在主服