1. 程式人生 > 實用技巧 >關於MySQL的命名規範

關於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();