mysql-01 mysql+运维

mysql+运维

  如何实现后端mysql数据库的冗余备份、实时同步和优化改造呢?可以使用高可用、主从复制、读写分离、拆分库、拆分表等方法。

MySQL 主从复制

  MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

主要用途

读写分离

  在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

实时灾备

   数据实时备份,当系统中某个节点发生故障时,可以方便的故障切换,避免影响业务。

负载分担

  随着系统中业务访问量的增大,如果是单机部署数据库,就会导致I/O访问频率过高。有了主从复制,增加多个数据存储节点,将负载分布在多个从节点上,降低单机磁盘I/O访问的频率,提高单个机器的I/O性能。

过程分析

1)在master上开启bin-log日志功能(bin-log日志用于记录在master库中执行的增删改、更新操作的sql语句),Slave上执行slave start,Slave IO线程会通过在Master创建的授权用户连接上至Master,并请求master从指定的文件和位置之后发送bin-log日志内容;

2)Master接收到来自slave IO线程的请求后,master IO线程根据slave发送的指定bin-log日志position点之后的内容,然后返回给slave的IO线程。

3)返回的信息中除了bin-log日志内容外,还有master最新的binlog文件名以及在binlog中的下一个指定更新position点;

4)Slave IO线程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和position点记录到master.info文件中,以便在下一次读取的时候能告知master从响应的bin-log文件名及最后一个position点开始发起请求;

5)Slave Sql 线程检测到relay-log中内容有更新,会立刻解析relay-log的内容成在Master真实执行时候的那些可执行的SQL语句,将解析的SQL语句并在Slave里执行,执行成功后,Master库与Slave库保持数据一致。

MySQL支持的复制类型

1)基于语句的复制(默认):在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。

2)基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。

3)混合类型的复制:默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

同步、异步、半同步复制

1)同步复制:master的变化,必须等待slave-1,slave-2,…,slave-n完成后才能返回。

2)异步复制(默认):master只需要完成自己的数据库操作即可,至于slaves是否收到二进制日志,是否完成操作,不用关心。

3)半同步复制:master只保证slaves中的一个操作成功,就返回,其他slave不管。这个功能,是由google为MYSQL引入的。

欢迎打赏,谢谢
------ 本文结束------
0%