日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql索引,用户及授权(root密码恢复)

發布時間:2025/3/21 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 表名 \G

4.刪除索引

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密码恢复)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。