zoukankan      html  css  js  c++  java
  • 数据库日志、主从复制、备份和还原

    目录

    数据库的日志

    日志类型:

    各种日志的主要功能

    数据库的主从复制

    主从复制的类型

    主从复制的原理

    主从复制的步骤

    数据库的备份和还原


    因为 MySQL 和 MariaDB 两者在日志、SQL语句上基本一致,所以下面用Mysql举例。

    数据库的日志

    在Mysql中,默认只开启了错误日志。如果想开启其他的日志,需要手动在 /etc/my.cnf 配置文件中开启。

    日志类型:

    • 错误日志:记录启动、运行或停止时出现的问题,一般也会记录警告信息
    • 查询日志:记录建立的客户端连接和执行的语句
    • 慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询,可以帮我们定位服务器性能问题。
    • 二进制日志:任何引起或可能引起数据库变化的操作,主要用于复制和即时点恢复。
    • 中继日志:从主服务器的二进制日志文件中复制而来的事件,并保存为的日志文件
    • 事务日志:记录InnoDB等支持事务的存储引擎执行事务时产生的日志

    各种日志的主要功能

    错误日志:存放服务器启动和关闭过程中的信息、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动从服务器进程时产生的信息

    查询日志:这是最不应该记录的日志。因为一个非常繁忙的数据库服务器,其查询会有很多,每一次都记录日志会导致系统性能下降。而且还会有额外的空间开销。MySQL默认没有开启这个日志。注意不仅仅是SELECT。 

    慢查询日志:查询执行时长超过指定时长的查询,即为慢查询。这里的慢不一定是语句自身执行慢,如果一个操作锁定了某张表,尤其是独占锁锁定了这张表,那么其他人对于这张表的查询就阻塞掉了。但不管怎么讲,慢查询日志是我们通常拿来定位系统上查询操作执行速度过慢时常用到的一个评估工具。所以在生产环境中有时是很有必要启用慢查日志的。

    二进制日志:二进制日志的主要目的是在数据库存在故障时,恢复时能够最大可能地更新数据库(即时点恢复),因为二进制日志包含备份后进行的所有更新,二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。 二进制日志启动开关:log-bin [= file_name]    。查看二进制日志的工具为:mysqlbinlog 
    二进制日志的格式: 基于语句: statement   ; 基于行: row    ;混合方式: mixed

    中继日志:在从服务器上的日志。就是说复制的时候,主服务器任何能够产生数据修改的操作,在写入数据文件的同时,还会把这个语句(也可能是行)记录到二进制日志文件中一份。从服务器就是使用一个用户帐号不断的去连接主服务器,并尝试去读取主服务器上二进制日志中的每一个条目,从服务器将这些挨个的读到从服务器上,在执行之前,先要将这些读到的保存在本地的日志文件中,而后从本地日志文件中读一条执行一条。这个日志文件就叫做中继日志。

    事务日志:事务日志(InnoDB特有的日志)可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的,我们通常称之为预写式日志,修改数据需要写两次磁盘。

    数据库的主从复制

    主从复制是MySQL中最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。

    主从复制的类型

    1、基于语句的复制:
    主服务器上面执行的语句在从服务器上面再执行一遍
    存在的问题:时间上可能不完全同步造成偏差,执行语句的用户也可能不是同一个用户。
    2、基于行的复制:
    把主服务器上面改编后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的
    存在的问题:比如一个工资表中有一万个用户,我们把每个用户的工资+1000,那么基于行的复制则要复制一万行的内容,由此造成的开销比较大,而基于语句的复制仅仅一条语句就可以了。
    3、混合类型的复制:
    MySQL默认使用基于语句的复制,当基于语句的复制会引发问题的时候就会使用基于行的复制,MySQL会自动进行选择。

    主从复制的原理

    主服务器上面的任何修改都会保存在二进制日志Binary log里面
    从服务器上面启动一个I/O thread,连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log里面。
    从服务器上面开启一个SQL thread定时检查Realy log,如果发现有更改立即把更改的内容在本机上面执行一遍

    主从复制的步骤

    主服务器:ip:192.168.10.139   系统:Rhel7          数据库:Maria DB            
    从服务器:ip:192.168.10.129   系统:Centos6.5    数据库:MySQL

    主服务器配置

    1.修改主服务器配置文件 /etc/my.cnf  ,修改完后需要重启mysql服务:  systemctl  restart   mariadb

    [mysqld]
    log-bin=mysql-bin         //启用二进制日志 (必选)
    server-id=139             //设置服务器唯一ID,一般取IP最后一段(必选)
    binlog-do-db=140          //指定对db_nameA记录二进制日志 (可选) 
    binlog-ignore-db=mysql    //指定不对db_namB记录二进制日志(可选)
    

    2、为从服务器添加mysql账户并配置权限,在主服务器上,必须为从服务器创建一个用来连接主服务器的用户,并设置replication slave权限

    mysql>grant  replication  slave  on  *.*   to  backup@'192.168.10.129'   identified   by   '123';     //创建backup用户,密码为123,并且配置好权限

    3、刷新权限:flush   privileges;

    4、验证是否开启主从复制:select * from user where user = 'backup'  G;

    4、查看主服务器正在使用二进制日志状态:show master status;

    从服务器配置

    1、修改从服务器配置文件 /etc/my.cnf  ,修改完后需要重启mysql服务:  service  mysqld restart

    [mysqld]
    server-id=129              //必须服务器唯一ID,一般取IP最后一段

    2、进入数据库,设置主服务器信息:

    mysql> change master to master_host='192.168.10.139',
        -> master_user='backup',
        -> master_password='123',
        -> master_log_file='mysql-bin.000001',
        -> master_log_pos=245;
    

    3、开启从服务器复制二进制日志,实现同步功能: slave  start ;

    4、验证数据库相关参数: show  slave  status  G;

    注意:在进行主从配置之前,两个服务器上的数据库的信息要完全一致!!!

    数据库的备份和还原

    衡量备份还原的指标:

    • RPO:恢复点目标,恢复的程度
    • RIO:恢复时间目标,恢复花费的时间

    备份方式:

    • 冷备份:拷贝数据库目录,需要先停机再备份,对于在线不间断提供业务的不适用
    • 快照备份:lvm快照,mysql装在lvm创建的分区,可以热备份(在线备份),缺点在于所有的文件,包括数据、日志等需要存放在一个逻辑卷中,然后再对卷快照备份,只支持本地备份,生产环境用的也比较少
    • 逻辑备份: mysqldump工具,单线程备份,备份速度较慢;mydumper工具,mysqldump升级版,有限制条件

    备份单个库:

    • 备份:mysqldump  -uroot  -p   dbname1> 1.sql
    • 还原:mysql  -uroot  -p   dbname2 < 1.sql

    注意:这里还原的时候这个 dbname2 是数据库名,必须要有,dbname1和dbname2可以不一致


    备份多个库:

    • 备份:mysqldump  -uroot  -p  --database  db1  db2 > 1.sql
    • 还原: mysql  -uroot -p  < 1.sql

    备份全部库:

    • 备份:mysqldump  -uroot  -p  --all-databases >  1.sql
    • 还原:mysql  -uroot  -p  <  1.sql

    备份单个表:

    • 备份:mysqldump  dbname1  tb1 >  1.sql
    • 还原: mysql  -uroot  -p   dbname2 <  1.sql

    注意:这里还原的时候这个 dbname2 是数据库名,必须要有,dbname1和dbname2可以不一致

  • 相关阅读:
    安全工具
    WebRTC媒体协商及实践
    流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
    基于 WebRTC 技术的实时通信服务开发实践
    实时音视频互动系列(下):基于 WebRTC 技术的实战解析
    WebRTC基于浏览器的开发
    webRtc+websocket多人视频通话
    Android IOS WebRTC 音视频开发总结(四九) ffmpeg介绍
    Android IOS WebRTC 音视频开发总结(二五) webrtc优秀资源汇总
    The 3n + 1 problem UVA 100
  • 原文地址:https://www.cnblogs.com/csnd/p/11808002.html
Copyright © 2011-2022 走看看