一、主从复制要求:

  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. Linuxmy.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日志,进行分析,查找insertPOS的位置,根据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. 从服务器ip47.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) 以上配置为读写分离操作,如果需要做到读写分离、主从复制,还必须手动配置开启主从复制模式

posted on 2017-09-29 21:17  习惯了错过╮肆意的放纵づ  阅读(240)  评论(0编辑  收藏  举报