zoukankan      html  css  js  c++  java
  • 数据库(三)—— 数据库存储引擎、日志、备份、主从复制、高可用架构

    数据库存储引擎、日志、备份、主从复制、高可用架构

    一、存储引擎

    1、存储引擎作用

    存储引擎和磁盘上的数据交互

    2、mysql存储引擎类型

    Innodb存储引擎
    	ibd:存储表的数据行和索引
    	frm:表基本结构信息
    
    Myisam存储引擎
    	frm:表基本结构信息
    	myi:存储索引
    	myd:存储数据行
    

    二、Innodb存储引擎特性

    1、事务

    Atomic(原子性)
    	所有语句作为一个单元全部成功执行或全部取消。不允许出现中间过程.
    
    Consistent(一致性)
    	如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。 
    
    Isolated(隔离性)
    	事务之间不相互影响。
    	两个方面:  修改同一行 , 一致性读
    
    Durable(持久性)
    	事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。
    

    (1)ACD特性的实现

    ​ 对数据进行操作时,现将数据从数据库中读入内存,其中undo是记录操作以前的数据,redo是记录数据修改的记录,存入数据库。如果在修改数据时,断电,那么内存中的数据全部丢失,然而之前有没有提交。所以,只要结合redo和原始数据,即可恢复修改后的数据。实现了ACD特性。

    (2)I特性的实现

    行级锁:事务修改行,会锁定这行(持有这行的锁)

    隔离级别:

    RU    读未提交
    RC    读已提交
    RR    可重复读    默认
     S     串行化
    

    2、事务的控制语句

    begin;
    xxx
    xxx
    commit;
    
    begin;
    xxx
    xxx
    
    begin;
    xxxxx
    xxx
    rollback;
    

    自动提交

    autocommit = 1   # mysql 中默认是开启 事务,自动提交
    

    三、日志

    1、错误日志

    mysql的错误日志存储在 /var/log/mysql.log

    ​ DDL、DCL :以语句方式(statement)记录
    ​ DML(已提交的事务语句):默认是以行模式记录(row模式,数据行的变化)

    2、二进制日志

    记录所有变更类的语句,可以做数据恢复 和操作的审计

    (1)配置日志

    log_bin = /opt/mysql/data/mysql-bin
    binlog_format = row
    server_id = 5
    

    (2)查看日志信息

    mysql> show binary logs;
    mysql> show master status;
    

    (3)日志内容查看

    # 按事件查看日志内容
    mysql> show binlog events in 'mysql-bin.000012';
    
    # 直接查看日志内容
    mysqlbinlog --base64-output=decode-rows -vvv /opt/mysql/data/mysql-bin.000012 |more
    

    (4) 截取二进制日志

    [root@standby data]# mysqlbinlog --start-position=219 --stop-position=186613 /opt/mysql/data/mysql-bin.000012 >/tmp/binlog.sql
    

    3、慢日志

    记录慢语句的日志文件,默认人关闭状态

    slow_query_log_file=/opt/mysql/data/standby-slow.log     # 慢日志所在文件目录
    
    slow_query_log=1     # 开启慢日志
    long_query_time=1	   # 设置慢操作的时间,小于1s,视为慢操作
    log_queries_not_using_indexes=1      # 不走索引的语句视为慢语句
    

    使用Box Anemometer基于pt-query-digest将MySQL慢查询可视化

    四、备份恢复

    1、备份的种类

    ​ 逻辑备份:SQL语句的备份
    ​ 物理备份:数据页备份

    2、mysql数据导入redis

    # 将mysql数据导出到文件中
    	# 将目标文件添加为安全文件,修改mysql配置文件
        secure-file-priv = /tmp
        # 导出
        mysql> select xxxx from t1  into outfile '/tmp/redis.txt'
        
    
    # 一键将mysql数据导redis
    mysql -uroot -p123 -e "select concat('hmset city_',id,' id ', id,' name ',name,' countrycode ',countrycode,' district ',district,' population ',population) from world.city limit 10 "|redis-cli
    

    3、利用mysqldump备份

    # -A 全库备份
    mkdir backup
    mysqldump -uroot -p123 -A >/backup/aaa.sql
    
    # -B 备份指定数据库 
    mysqldump -uroot -p123 -B world BBS >/backup/bbb.sql   # 备份world和BBS数据库
    
    # 备份表
    mysqldump -uroot -p123 BBS user article >/backup/ccc.sql   # 备份BBS库中的user和article表
    

    4、备份时记录参数

    --master-data=2       # 备份时记录二进制日志的状态
    --single-transaction  # 开启innodb热备功能
    -R
    --triggers
    
    # 完整的备份语句,带参数
    mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R --triggers >/backup/aaa.sql
    

    五、主从复制

    1、主库开启二进制日志

    vim /data/3307/my.cnf
    	log_bin=/data/3307/mysql-bin
    
    # 重启
    [root@standby 3307]# systemctl restart mysqld3307
    

    2、授权用户

    [root@standby backup]# mysql -S /data/3307/mysql.sock
    grant replication slave on *.* to repl@'10.0.0.%' identified by '123';
    
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    
    

    3、从库开启复制功能

    [root@standby 3307]# mysql -S /data/3308/mysql.sock
    
    mysql> CHANGE MASTER TO
      MASTER_HOST='10.0.0.200',
      MASTER_USER='repl',
      MASTER_PASSWORD='123',
      MASTER_PORT=3307,
      MASTER_LOG_FILE='mysql-bin.000001',
      MASTER_LOG_POS=154;
    
    
    # 启动从库
    mysql> start slave;
    # 查看从库是否启动
    mysql> show slave statusG
    	# 成功,可看到
        Slave_IO_Running: Yes
    	Slave_SQL_Running: Yes
    
    

    六、”高可用“架构

    1、MySQL高可用架构

    (1)MHA:需要一主两从,自愈

    (2)MGR

    (3)galera

    (4)PXC

    2、高性能架构

    (1)读写分离

    (2)分布式架构

  • 相关阅读:
    3(翻译)如何在cocos2d里面使用动画和spritesheet
    Objectivec2.0 每种数据类型定义属性的方法
    cocos2d 入门必备4个基本概念
    如何在Mac上搭建自己的服务器——Nginx
    JN_0001:在微信朋友圈分享时长大于10s的视频
    JN_0002:Win10禁止U盘拷贝文件的方法
    abstract class 和 interface区别
    ref和out
    .Net配置错误页
    Unity3d 物体沿着正七边形轨迹移动
  • 原文地址:https://www.cnblogs.com/linagcheng/p/10307384.html
Copyright © 2011-2022 走看看