• 读书笔记-mysql王者


    • 系统默认表
    • mysql远程连接方法: mysql -u root -p 123456 -P 3306 -h 192.168.20.6
    • 用户权限:分为root和其他用户,root用户要避免web连接
    • query cache:生产中建议关闭,因为只缓存静态数据,如果数据经常读写作用不大
      SHOW VARIABLES LIKE '%query_cache_size%'
      SHOW VARIABLES LIKE '%query_cache_type%'
    • Innodb存储结构
      InnoDb主要分为表空间,段,区和页

      SHOW VARIABLES LIKE '%innodb_autoextend_increment%' 初始自动化扩展值为64m
      SHOW VARIABLES LIKE '%innodb_data%'
      默认为12M
      段:每个段由N个区和32个零散页组成

      区:由连续的页组成,是物理上连续的一段空间,每个区固定大小是1MB
      页:
    • 内存结构: 分为SGA(系统全局区)和PGA(程序缓存区)

    • 各大线程及其作用

    • 内存刷新机制
    • 数据库文件

    1.禁止用字符型做主键
    2.禁止无主键或唯一索引的表出现
    3.主要数据类型:整型,浮点型,字符类型和日期类型

    • 整型:


      int和tinyint用的最多
      主键要选择不经常修改的,尽量与业务无关的,没有具体含义的字段
      因为Innodb是索引组织表,需要保证索引结构不经常翻转,避免造成性能损耗

      如果要显示0003这样,显示宽度的值,需要加上zerofill,不然的话,int(1)和int(10)都是一样的
    • 浮点型:生产环境不建议使用float和double,因为是属于不精确的类型,一般使用decimal类型


    • 时间类型

    TIMESTAMP
    4个字节储存;值以UTC格式保存;.时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。

    DATETIME
    8个字节储存;实际格式储存;与时区无关;datetime 以'YYYY- MM-DD HH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'TIMESTAMP值不能早于1970或晚于2037

    INT
    存时间戳。占用资源少,查询速度快。条件范围搜索使用between没什么问题。查询条件自由拼接。
    datetime和timestamp相对于int来说也有一个小小的好处,就是对于时间类型来说,可以有一系列的时间函数可以用.

    • 字符串类型


      推荐使用int保存ip地址

    • 字符集: mysql5.7推荐使用utf8mb4

    • 表delete导致的碎片:

    • 索引种类:
      主键索引和唯一索引:



    前缀索引:


    eg: alter table x_test add index(x_name(4));
    联合索引: 使用过程需要满足最左前缀原则,一般把选择性高的列放前面
    eg:


    用不到索引:

    哈希索引:

    • Innodb锁类型:
      读锁:一个事务获取了数据行的读锁,另外一个事务能获取读锁,但是不能获得写锁

    写锁: 一个事务获取了写锁,其他事务就不能获取该行的其他锁,写锁优先级最高

    MDL锁:

    意向锁:

    • Innodb行锁种类
    • Innodb的行锁是加载索引上的,如果索引删除了,会变成对所有行上锁
    • 间隙锁: SELECT * FROM x_test WHERE id <4145026 LOCK IN SHARE MODE; 在小于这个范围的值都会被锁定
    • 记录锁和间隙锁组合: SELECT * FROM x_test WHERE id <4145026 for update 在这条记录和小于这条记录的范围都会被锁定

    mysql备份

    • 根据运行状态,可以分为热备和冷备,热备分为逻辑备份和裸文件备份,按照备份后内容分为全量备份和增量备份

      冷备: 直接将数据文件复制到新的地方

      热备:
      1.myslqdump:
      单表备份: mysqldump --single-transaction -uroot -p123456 demo test > test.sql
      单表恢复: mysql -uroot -p123456 demo < test.sql
    1. select ... into outfile

      导出: 必须要指定目录(show global variables like '%secure_file_priv%';) select * from test into outfile '/var/lib/mysql-files/a.sql';
      导入: load data infile '/var/lib/mysql-files/a.sql' into table test;
      load data的插入速度是insert的12倍
      3.mydumper

      4.裸文件备份:XtraBackup 直接复制低等数据文件备份,备份时不会锁表

    主从复制


    • 一般企业用到的mysql集群
  • 相关阅读:
    博雅机器学习十讲1
    tensorflow学习笔记1
    卓有成效的程序员3
    卓有成效的程序员2
    卓有成效的程序员1
    探索需求6
    数据预处理
    数据科学介绍
    探索需求5
    探索需求4
  • 原文地址:https://www.cnblogs.com/Baronboy/p/14132435.html
Copyright © 2020-2023  润新知