关于MySQL的命名规范

1. 命名规范

1.1 建库规范

  • 数据库,表,字段,索引全部用小写英文字母,英文单词之间用下划线(_)隔开。

1.2 表字段规范

  • 列设计规范根据业务区分使用tinyint/int/bigint,分别会占用1/4/8字节。
  • 使用tinyint来代替enum,enum增加新值要进行DDL操作。
  • 根据业务区分使用char/varchar解读:
  1. 字段长度固定,或者长度近似的业务场景,适合使用char,能够减少碎片,查询性能高。
  2. 字段长度相差较大,或者更新较少的业务场景,适合使用varchar,能够减少空间 。
  3. 使用varchar(20)存储手机号,不要使用整数
  • 设置lower_case_table_names=1,是使用大小写不敏感,数据库存储用小写,默认值为0。
    示例:
root@localhost [wiz]>show variables like 'lower_case_table_names';

|| Variable_name|| Value ||
||lower_case_table_names ||0 ||


1.3 建表规范

  • 每个表需要指定表主键。
  • 字段名称用英文小写字母,单词之间用下划线(_)隔开。
  • 列名必须见名知义。
  • 每个字段需要有备注,字符串类型字段默认不能为NULL,但数字类型,时间类型的字段可以是NULL。
  • 不要指定表存储引擎,字符编码。
  • 表备注需清晰:如:run_status:运行状态 | 【0:未运行】【1:已运行】【2:已停止】|checkbox用|分隔开是为了模板自动生成代码时进行前端的JSON构建输出
  • 下面5个字段是必须的:
    id:varchar(36):主键唯一ID,新的设计可以考虑自增ID,需要考虑数据迁移方案
    createdtime:datetime,创建时间
    createduser:varchar(36),创建人ID
    lastmodifiedtime:datetime,最后修改时间
    lastmodifieduser:varchar(36),最后修改人ID
    status:int状态【0:正常】【1:删除】
    新的架构
    id:varchar(36):主键唯一ID,新的设计可以考虑自增ID,需要考虑数据迁移方案
    created_time:datetime,创建时间
    created_user:varchar(36),创建人ID
    last_modified_time:datetime,最后修改时间
    last_modified_user:varchar(36),最后修改人ID
    status:int状态【0:正常】【1:删除】
    示例:
    CREATE TABLE `base_users` (
      `user_id` int(11) NOT NULL  AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID主键',
      `username` varchar(20) NOT NULL COMMENT '用户名',
      `mobile` varchar(20) NOT NULL COMMENT '手机号码',
      `realname` varchar(50) DEFAULT NULL COMMENT '用户姓名',
      `idcardno` varchar(18) NOT NULL COMMENT '身份证',
      `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
      `add_time` datetime NOT NULL COMMENT '添加时间'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
    
    create unique index uni_idcardno on base_users(idcardno);
    
    create index idx_username_mobile on base_users(username,mobile);

1.4 索引规范

1.4.1 建索引规则

  • 唯一索引使用uni_[字段名]来命名。
  • 非唯一索引使用idx_[字段名]来命名。
  • 理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a), (a,b), (a,b,c)。
    示例:
    //唯一索引
    create unique index uni_idcardno on base_users(idcardno);
    //普通索引
    create index idx_username_mobile on base_users(username,mobile);

1.4.2 最佳索引规则

  • Primary key > Unique key > 一般索引

2. MySQL备份还原

2.1 MySQL备份

备份工具:
mysqldump/mydump/xtrabackup,根据实际环境和需求来选择备份方式,判断依据:数据库大小,备份方式。

2.1.1 备份数据库

mysqldump -uroot -pmysql \
--set-gtid-purged=on  \
--single-transaction \
--triggers --routines --events \
--databases sys > db_name.sql

2.1.2 表备份

mysqldump -uroot -pmysql \
--single-transaction \
--set-gtid-purged=on  --triggers --routines --events \
--tables  zabbix usrgrp  > usrgrp.sql

2.1.3 备份表结构

-d, --no-data       No row information.

2.1.4 mydumper还原

mydumper -u root -p mysql -h 192.168.50.x \
--port 3306 \
--triggers  --events --routines \
--daemon \
--database zabbix -o ./data/

2.2 MySQL还原

mysql -uroot -pmysql --database dbname < x.sql

3. MySQL慢查询优化

yum install –y tcpdump  percona-toolkit

pt-query-digest/mysqldumpslow

//用tcpdump抓包工具
tcpdump -s 65535 -x -nn -q -i any -c 1000 port 3306 > mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt

4. MySQL连接工具

\192.168.50.89\soft
用户名/密码: test/test
sqlyog

5. MySQL监控

zabbix/cacti

6. MySQL高可用

cetus

https://github.com/Lede-Inc/cetus

ProxySQL

7. 常用命令

//查看连接
show processlist;

//数据库状态
status

//查看Innodb状态
show engine innodb status\G;

//查看日志
show binary logs;

//kill查询
kill ID_number;

//查看数据库
show databases;

//查看表
use db_name;show tables;

//查看表结构
show create table tbl_name\G;

//查看数据库
select database();
 
//查看当前用户
select user();
 
 
posted @ 2020-10-26 08:54  方大帝的博客  阅读(1037)  评论(0编辑  收藏  举报