读写分离及主从复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读写分离及主从复制相关的知识,希望对你有一定的参考价值。

技术分享

一、主从复制要求:

  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. 技术分享
  3. 技术分享
  4. Linuxmy.cnf配置文件进行配置
  5. 技术分享

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

 

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

 

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

 

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

 

  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日志,进行分析,查找insertPOS的位置,根据POS的位置来回复数据
  12. 第一步:查看当前日志信息
  13. 技术分享
  14. 第二步:查看操作sql位置
  15. 技术分享
  16. 第三步:使用一下命令还原
  17. Mysqlbinlog -no-default 日志文件 -start-pos=开始pos-stop-pos=结束pos |Mysql -uroot -proot test
  18. 技术分享
  19. 技术分享

三、主从配置

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

 技术分享

技术分享

技术分享

 

 

  a) 配置主服务器:

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

  b) 配置从服务器

  1. 从服务器ip47.93.58.96
  2. 技术分享
  3. 执行stop slave停止从服务器
    1. Stop slave
    2. 技术分享
    3. 具体的配置

  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
  2. 技术分享
    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. 技术分享
    3. 主服务器
    4. 技术分享

四、读写分离的实现

  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) 以上配置为读写分离操作,如果需要做到读写分离、主从复制,还必须手动配置开启主从复制模式

以上是关于读写分离及主从复制的主要内容,如果未能解决你的问题,请参考以下文章

MySQL主从复制及读写分离实际部署与验证

MySQL主从复制与读写分离配置及实操

基于Centos 7搭建MySQL主从复制及读写分离

MySql之主从复制及读写分离

MySQL 数据库——主从复制与读写分离

MySQL数据库的主从复制和读写分离!