Mysql索引,用户及授权(root密码恢复)
目錄
一.MySQL索引
1.MySQL索引的基本概念
1)優缺點
2)分類
2.創建索引
1)普通索引index
3.查看索引
4.刪除索引
二.用戶及授權
1.授權
2.相關查詢指令
3.授權庫mysql
4.撤銷權限
5.root密碼恢復
一.MySQL索引
1.MySQL索引的基本概念
索引(Index)是幫助MySQL高效獲取數據的數據結構。我們可以簡單理解為:它是快速查找排好序的一種數據結構。
可以用來快速查詢數據庫表中的特定記錄,所有的數據類型都可以被索引。
Mysql索引主要有兩種結構:B+Tree索引和Hash索引
1)優缺點
優點
?????? - 可以大大提高MySQL的檢索速度
?????? - 索引大大減小了服務器需要掃描的數據量
?????? - 索引可以幫助服務器避免排序和臨時表
?????? - 索引可以將隨機IO變成順序IO
缺點
?????? - 雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存索引文件。
?????? - 建立索引會占用磁盤空間的索引文件。一般情況這個問題不太嚴重,但如果你在一個大表上創建了多種組合索引,索引文件的會膨脹很快。
?????? - 如果某個數據列包含許多重復的內容,為它建立索引就沒有太大的實際效果。
?????? - 對于非常小的表,大部分情況下簡單的全表掃描更高效;
2)分類
普通索引
?????? - 不應用任何限制條件的索引,該索引可以在任何數據類型中創建。
?????? - 字段本身的約束條件可以判斷其值是否為空或唯一。
?????? - 創建該類型索引后,用戶在查詢時,便可以通過索引進行查詢。
唯一性索引
?????? - 使用UNIQUE參數可以設置唯一索引。
?????? - 創建該索引時,索引的值必須唯一,通過唯一索引,用戶可以快速定位某條記錄
?????? - 主鍵是一種特殊唯一索引。
全文索引
?????? - 使用FULLTEXT參數可以設置索引為全文索引。
?????? - 全文索引只能創建在CHAR、VARCHAR或者TEXT類型的字段上。查詢數據量較大的字符串類型的字段時,使用全文索引可以提高查詢速度。
?????? - 在默認情況下,應用全文搜索大小寫不敏感。如果索引的列使用二進制排序后,可以執行大小寫敏感的全文索引。
單列索引
?????? - 顧名思義,單列索引即只對應一個字段的索引。
?????? - 應用該索引的條件只需要保證該索引值對應一個字段即可。
?????? - 可以包括普通、唯一、全文索引
多列索引
?????? - 多列索引是在表的多個字段上創建一個索引。
?????? - 該索引指向創建時對應的多個字段,用戶可以通過這幾個字段進行查詢。
?????? - 要想應用該索引,用戶必須使用這些字段中的第一個字段。
2.創建索引
1)普通索引index
?????? - 一個表中可以有多個index
?????? - 字段的值可以重復,且可以賦值為null
?????? - 通常在where條件中的字段上配置Index
?????? - index索引字段的標志為mul
創建表時創建索引
CREATE TABLE 表名(字段列表,index(字段名),index(字段名), );在已有表中創建索引
CREATE INDEX 索引名 ON 表名(字段名);3.查看索引
DESC 表名; # 注意觀察Key這一列 或 SHOW INDEX FROM 表名 \G4.刪除索引
DROP INDEX 索引名 ON 庫.表名;二.用戶及授權
1.授權
1)創建用戶并授權
語法:
GRANT 權限列表 ON 庫名.表名 TO '用戶名'@'客戶端地址' IDENTIFIED BY '密碼' WITH GRANT OPTION;????????權限列表:用戶的操作權限,如SELECT,INSERT,UPDATE等,如果要授予所的權限則使用ALL
????????表名:表名,如果要授予該用戶對所有數據庫和表的相應操作權限則可用*表示,如*.*
WITH GRANT OPTION:用戶擁有授權權限
示例:
# 授予zzg用戶在本地登陸的權限 mysql> grant select,update(phone_number,email) on nsd2021.employees to zzg@'localhost' identified by 'NSD2021@tedu.cn'; ? # 授予zzg用戶在任意地址登陸的權限 GRANT SELECT, INSERT, UPDATE(phone_number,email) ON nsd2021.employees to zzg@'%' IDENTIFIED BY 'NSD2021@tedu.cn';客戶端連接測試
# 安裝mysql/mariadb客戶端 [root@zzgrhel8 ~]# yum install -y mariadb ? [root@zzgrhel8 ~]# mysql -h服務器 -u用戶名 -p密碼2.相關查詢指令
1)查看用戶信息
SELECT USER();2)顯示登陸用戶自己的權限
SHOW GRANTS;3)管理員查看指定用戶的權限,用戶不存在則報錯
SHOW GRANTS FOR 用戶名@'客戶端地址';4)用戶修改自己的密碼
SET password=password('密碼');5)管理員修改指定用戶密碼
SET PASSWORD FOR 用戶名@'客戶端地址'=password('密碼');6)刪除用戶
DROP USER 用戶名@'客戶端地址';3.授權庫mysql
1)相關表
?????????????? user:記錄已有的授權用戶及權限。該表中主要關心host和user字段
??????????? ?? db:記錄已有授權用戶對數據庫的訪問權限。該表中主要關心host、db和user字段
????????tables_priv:記錄已有授權用戶對表的訪問權限
????????columns_priv:記錄已有授權用戶對字段的訪問權限
mysql> grant select,insert,update(phone_number,email) on nsd2021.employees to zzg@'localhost' identified by 'NSD2021@tedu.cn';?2)查看所有授權用戶
mysql> select user, host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | root | % | | tom | % | | zzg | % | | mysql.sys | localhost | | root | localhost | | zzg | localhost | +-----------+-----------+ 6 rows in set (0.01 sec)?3)查詢zzg@'%'的權限
mysql> show grants for zzg@'%'; ? mysql> select host, user, db from mysql.db; +-----------+-----------+---------+ | host | user | db | +-----------+-----------+---------+ | % | tom | nsd2021 | | localhost | mysql.sys | sys | +-----------+-----------+---------+ 2 rows in set (0.00 sec) ? ? mysql> select * from tables_priv where User like '%zzg%'\G *************************** 1. row ***************************Host: localhostDb: nsd2021User: zzgTable_name: employeesGrantor: root@localhostTimestamp: 0000-00-00 00:00:00Table_priv: Select,Insert Column_priv: Update 1 row in set (0.00 sec)4.撤銷權限
語法
REVOKE 權限列表 ON 庫名.表名 FROM 用戶名@'客戶端地址';示例:
# 查看用戶有哪些權限 SELECT host, user FROM mysql.user; # 查看權限 SHOW GRANTS FOR 用戶名@'客戶端地址'; # 撤回授權權限 REVOKE GRANT OPTION ON *.* FROM 用戶名@'客戶端地址'; # 撤回用戶刪除權限 REVOKE DELETE ON *.* FROM 用戶名@'客戶端地址'; # 創建tom用戶,具有授權權限 mysql> grant all on *.* to tom@'%' identified by 'NSD2021@tedu.cn' with grant option; # tom登陸后,創建jerry用戶 [root@zzgrhel8 ~]# mysql -utom -pNSD2021@tedu.cn -h192.168.1.11 MySQL [(none)]> grant select on nsd2021.* to 'jerry'@'%' identified by 'NSD2021@tedu.cn';5.root密碼恢復
步驟
????????停止MySQL服務
????????跳過授權表啟動MySQL服務程序
????????修改root密碼
????????以正常方式重啟MySQL服務程序
示例:
# 停止MySQL服務 [root@mysql1 ~]# systemctl stop mysqld # 修改配置文件,跳過授權表啟動MySQL服務程序 [root@mysql1 ~]# vim /etc/my.cnf [mysqld] skip-grant-tables ... ... ? # 啟動服務 [root@mysql1 ~]# systemctl start mysqld # 修改root密碼 [root@mysql1 ~]# mysql mysql> update mysql.user set authentication_string=password('123456')-> where user='root' and host='localhost'; Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1 ? mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) # 以正常方式重啟MySQL服務程序 [root@mysql1 ~]# systemctl stop mysqld [root@mysql1 ~]# vim /etc/my.cnf [mysqld] # skip-grant-tables ... ... [root@mysql1 ~]# systemctl start mysqld [root@mysql1 ~]# mysql -uroot -p123456總結
以上是生活随笔為你收集整理的Mysql索引,用户及授权(root密码恢复)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql基础运用(视图,变量,存储,流
- 下一篇: MySQL主从同步(复制)