1. 命名規范
1.1 建庫規范
- 數據庫,表,字段,索引全部用小寫英文字母,英文單詞之間用下划線(_)隔開。
1.2 表字段規范
- 列設計規范根據業務區分使用tinyint/int/bigint,分別會占用1/4/8字節。
- 使用tinyint來代替enum,enum增加新值要進行DDL操作。
- 根據業務區分使用char/varchar解讀:
- 字段長度固定,或者長度近似的業務場景,適合使用char,能夠減少碎片,查詢性能高。
- 字段長度相差較大,或者更新較少的業務場景,適合使用varchar,能夠減少空間 。
- 使用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();