mysql權限-管理修復工具-找回root密碼講解

MySQL 權限經(jīng)驗原則:
權限控制主要是出于安全因素,因此需要遵循一下幾個經(jīng)驗原則:
只授予能滿足需要的最小權限,防止用戶干壞事。比如用戶只是需要查詢,那就只給 select 權限就可以了,不要給用戶賦予 update、insert 或者 delete 權限。
2、創(chuàng)建用戶的時候限制用戶的登錄主機,一般是限制成指定 IP 或者內(nèi)網(wǎng) IP 段。@’192.168.1.28’hostname
3、初始化數(shù)據(jù)庫的時候刪除沒有密碼的用戶。安裝完數(shù)據(jù)庫的時候會自動創(chuàng)建一些用戶,這些用戶默認沒有密碼。
4、為每個用戶設置滿足密碼復雜度的密碼。CRM 疑是地上霜 CRM14floor&& 雙
5、定期清理不需要的用戶。回收權限或者刪除用戶。帳號審計查看:

mysql> use mysql;
mysql> select database();
+------------+
| database() |
+------------+
| mysql |
+------------+
1 row in set (0.00 sec)
mysql> select * from user\G
*************************** 1. row ***************************
Host: localhost
User: root
Password: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y

總結:
存儲權限的表有:
1、user 表
2、db 表
3、host 表
4、table_priv 表
5、columns_priv 表
每個授權表包含范圍字段和權限字段。
MySQL 權限實戰(zhàn):
1、查看用戶權限mysql> select * from mysql.user\G 查看所有

mysql> select * from mysql.user where user='root' and host='localhost'\G 精確查看

查看當前用戶權限:
查看某個用戶的權限:
mysql 創(chuàng)建用戶并授權---grant 的用法
格式:grant 權限 on 數(shù)據(jù)庫名.表名 to 用戶@登錄主機 identified by "用戶密碼";
grant[英][grɑ:nt] 承認; 同意; 準許; 授予;
例1:允許tree用戶從localhost登錄

mysql> grant all on book.* to tree@localhost identified by "123456";

grant 命令說明:
ALL PRIVILEGES 是表示所有權限,你也可以使用 select、update 等權限
ON 用來指定權限針對哪些庫和表。
. 中前面的號用來指定數(shù)據(jù)庫名,后面的號用來指定表名。
TO 表示將權限賦予某個用戶。
tree@'localhost'表示 HA 用戶,@后面接限制的主機,可以是 IP、IP 段、域名以及%,%表示任何地方。注意:
這里%有的版本不包括本地,以前碰到過給某個用戶設置了%允許任何地方登錄,但是在本地登錄不了,這個和版本有關系,遇到這個問題再加一個 localhost 的用戶就可以了。
IDENTIFIED BY 指定用戶的登錄密碼。
WITH GRANT OPTION 這個選項表示該用戶可以將自己擁有的權限授權給別人。注意:經(jīng)常有人在創(chuàng)建操作用戶
的時候不指定 WITH GRANT OPTION 選項導致后來該用戶不能使用 GRANT 命令創(chuàng)建用戶或者給其它用戶授權。
備注:可以使用 GRANT 重復給用戶添加權限,權限疊加,比如你先給用戶添加一個 select 權限,然后又給用戶添
加一個 insert 權限,那么該用戶就同時擁有了 select 和 insert 權限。
允許tree2用戶從任意遠端主機連接mysql服務器:
mysql> grant all privileges on . to tree2@'%' identified by '123456' with grant option;
with grant option 意思是 tree2 用戶可以把自己的權限下放給新創(chuàng)建的用戶。 另外,加不加 privileges 都可
以。
測試:

[root@xuegod64 ~]# mysql -u tree2 -h 192.168.1.63 -p123456

mysql> #登錄正常
但是:

[root@xuegod63 ~]# mysql -u tree2 -h 192.168.1.63 -p123456 #不能登錄

解決方法:
mysql> grant all privileges on . to 'tree2'@'192.168.1.63' identified by '123456' with grant
option;
[root@xuegod63 ~]# mysql -u tree2 -p123456 #不能登錄
解決方法:
mysql> grant all privileges on . to 'tree2'@'localhost' identified by '123456' with grant option;
總結: % 指的是任意遠程主機,不包括本地地址和localhost。 另外grant是立即生效。不需要執(zhí)行:mysql>
flush privileges;
只有手動修改了mysql相關字段,才需要執(zhí)行mysql> flush privileges;
只授權部分權限:
mysql> grant select,insert,update,delete,create,drop on aa.* to 'custom'@'localhost' identified by '123456';
方法二: 直接修改表中權限文件:
mysql> use mysql;
mysql> insert into user (Host,User,Password) values('localhost','grace','123456');
mysql> select Host,User,Password from user where User="grace";
+-----------+-------+----------+
| Host | User | Password |
+-----------+-------+----------+
| localhost | grace | 123456 |
+-----------+-------+----------+
可以看到密碼是明文存放的,現(xiàn)在以加密方式存儲:

mysql> insert into user (Host,User,Password) values('localhost','grace1',password("123456"));
Query OK, 1 row affected, 3 warnings (0.00 sec)
mysql> select Host,User,Password from user where User="grace1";
+-----------+--------+-------------------------------------------+
| Host | User | Password |
+-----------+--------+-------------------------------------------+
| localhost | grace1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+--------+-------------------------------------------+
1 row in set (0.01 sec)
mysql> flush privileges; #刷新權限表,使配置文件生效

或重啟mysql 數(shù)據(jù)庫使用這個命令使權限生效,尤其是你對那些權限表 user、db、host 等做了 update 或者 delete 更新的時候。以前遇到過使用 grant 后權限沒有更新的情況,只要對權限做了更改就使用 FLUSH PRIVILEGES 命令來刷新權限。

mysql> flush privileges;
[root@xuegod63 ~]# service mysqld restart

測試:

[root@xuegod63 ~]# mysql -u grace -p123456 #登錄不成功
ERROR 1045 (28000): Access denied for user 'grace'@'localhost' (using password: YES)
[root@xuegod63 ~]# mysql -u grace1 -p123456 #登錄成功

回收權限

mysql> revoke delete on *.* from 'tree'@'localhost';42.7 修改 mysql 用戶密碼
42.7.1 grant 修改立即生效
mysql> grant all on book.* to mk1@localhost identified by "123456";
mysql> grant select,insert,update,delete,create,drop on aa.* to 'custom'@'localhost' identified
by '123456';

測試:

[root@xuegod63 ~]# mysql -u mk1 -p123456
[root@xuegod63 ~]# mysql -u custom -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| book |
| test |

設置帳戶密碼:

[root@xuegod63 ~]# mysqladmin -u root -p
42.7.2 set password
mysql> set password for mka@"localhost" = password('456789');
mysql> FLUSH PRIVILEGES;
重置 mysql root 密碼

方法一:

[root@xuegod63 mysql]# /etc/init.d/mysqld stop
[root@xuegod63 mysql]# mysqld_safe --skip-grant-tables --skip-networking

在另一個終端打開:

mysql> update mysql.user set password=password('1234567') where host=' localhost' and
user='root';
[root@xuegod63 aa]# /etc/init.d/mysqld restart

本節(jié)課的考題:
1、 刪除了所有用戶怎么辦

mysql> delete from mysql.user; 刪除所有用戶
mysql> flush privileges;

沒有用戶可以登錄
解決辦法:service mysqld stop
mysqld_safe --skip-grant-tables --skip-networking
另外終端
Mysql

mysql> insert into mysql.user (host, user, password) values ('localhost', 'root',
password('123456'));
mysql> flush privileges;
mysql> grant all privileges on *.* to 'root'@'localhost';
/etc/init.d/mysqld restart

或者
Mysql 登陸后

mysql> flush privileges; 先刷新表,一定要先刷新
不能出現(xiàn)這個錯誤:
mysql> grant all privileges on *.* to system@localhost identified by '123456' with grant option;
mysql> flush privileges;
/etc/init.d/mysqld restart
mysql -usystem -p123456

mysql 日常維護工具:
開始之前,把 xuegod63 和 xuegod64 都恢復:

[root@xuegod63 ~]# yum install mysql-server -y
[root@xuegod63 ~]# service mysqld restart
上傳 book.sql 到 xuegod63,然后導入數(shù)據(jù)庫
[root@xuegod63 ~]# mysqlmysql> create database book;
[root@xuegod63 ~]# mysql -uroot -p book < book.sql
Enter password:
[root@xuegod63 ~]# mysqladmin -u root password "123456"

mysql 修復工具 mysqlcheck

什么時候用這個工具?
舉例:
數(shù)據(jù)庫服務器(mysql)因機房掉電,異常關機。等服務器重新起來,啟動mysql服務后,發(fā)現(xiàn)部分表有所損壞。報can't open file: "xxxx.MYI"(errno: 145)

mysqlcheck使用
mysqlcheck客戶端工具可以檢查和修復MyISAM表,還可以優(yōu)化和分析表。
實際上,它集成了mysql工具中check、repair、analyze、optimize的功能。

analyze[英]['?n?la?z] 分析
optimize[英][??pt?ma?z] 優(yōu)化

/usr/local/mysql/bin/mysqlcheck #源碼編譯安裝位置
rpm -qf which mysqlcheck yum 安裝查看
參數(shù)選項
option中有以下常用選項:
-c, --check (檢查表);
-r, --repair(修復表);
-a, --analyze (分析表);
-o, --optimize(優(yōu)化表); //其中,默認選項是-c(檢查表)
-u, 使用 mysql 中哪個用戶進行操作
mysqlcheck 語法:
使用以下3種方式來調(diào)用mysqlcheck:

mysqlcheck[options] db_name [tables]

mysqlcheck[options] ---database DB1 [DB2 DB3...]

mysqlcheck[options] --all--database如果沒有指定任何表或使用---database或--all--database選項,則檢查整個數(shù)據(jù)庫。

例:
[root@xuegod63 ~]# rpm -qf which mysqlcheck
mysql-5.1.71-1.el6.x86_64
檢查表(check);
[root@xuegod63 ~]# mysqlcheck -u root -p123456 -c book books
book.books OK

修復表(repair);
[root@xuegod63 ~]# mysqlcheck -u root -p123456 -c book books
book.books OK
修復指定的數(shù)據(jù)庫

[root@xuegod63 ~]# mysqlcheck -uroot -p -r --database book
Enter password:
book.books OK
book.category OK

參數(shù):
-B, --databases Check several databases
檢查修復所有的數(shù)據(jù)庫

[root@xuegod63 ~]# mysqlcheck -u root -A -r -p
Enter password:
book.books OK
book.category OK
mysql.columns_priv OK

參數(shù)-A 等于 --all-databases
實戰(zhàn)1:每天定時自動優(yōu)化MySQL數(shù)據(jù)庫
[root@xuegod63 ~]# crontab -e //把它加入 cron job 每天在 01:00 自動執(zhí)行
[root@xuegod63 ~]#
0 1 * * * mysqlcheck -A -o -r -u你的用戶名 -p你的密碼 > /dev/null 2>&10 3 * * * mysqlcheck -uroot -p123456 -r -o -A > /dev/null 2>&1

mysql備份與恢復:
按照備份時對數(shù)據(jù)庫的影響范圍,備份的方法
Hot backup(熱備) Cold Backup(冷備) Warm Backup(溫備)
Hot backup:指在數(shù)據(jù)庫運行中直接備份,對正在運行的數(shù)據(jù)庫沒有任何影響。(Online Backup)官方手冊為在線備份
Cold Backup:指在數(shù)據(jù)庫停止的情況下進行備份(OfflineBackup) 官方手冊稱為離線備份
Warm Backup:備份同樣在數(shù)據(jù)庫運行時進行,但是會對當前數(shù)據(jù)庫的操作有所影響,例如加一個全局讀鎖以保證備份數(shù)據(jù)的一致性
按照備份后文件內(nèi)容:
邏輯備份-->
指備份后的文件內(nèi)容是可讀的,通常為文本文件,內(nèi)容一般是SQL語句,或者是表內(nèi)的實際數(shù)據(jù),如
mysqldump和SELECT * INTO OUTFILE的方法,一般適用于數(shù)據(jù)庫的升級和遷移,恢復時間較長
裸文件備份-->
拷貝數(shù)據(jù)庫的物理文件,數(shù)據(jù)庫既可以處于運行狀態(tài)(mysqlhotcopy 、ibbackup、xtrabackup這類工具),也可以處于停止狀態(tài),恢復時間較短。
按照備份數(shù)據(jù)庫的內(nèi)容來分,又可以分為:
完全備份:對數(shù)據(jù)庫完整的備份
增量備份:在上一次完全備份基礎上,對更新的數(shù)據(jù)進行備份(xtrbackup)
日志備份:二進制日志備份,主從復制邏輯備份工具:mysqldump
使用的時候MySQL當要導入或者導出數(shù)據(jù)量大的庫的時候,用PHPMYADMIN甚至MySQL Administrator 這些工具都會力不從心,這時只能使用 MySQL 所提供的命令行工具 mysqldump 進行備份恢復。數(shù)據(jù)量大的時候不推薦使用,可支持 MyISAM,InnoDB
MySQL 數(shù)據(jù)的導出和導入工具:mysqldump。
導出數(shù)據(jù):
語法: mysqldump [OPTIONS] database [tables] >導出的文件名.sql
例:1.導出整個 book 數(shù)據(jù)庫
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 > 導出的文件名.sql # 注意是-p 空格后是數(shù)據(jù)庫名,不是密碼。

[root@xuegod63 ~]# mysqldump -u root -p book > /opt/book.sql

或:

[root@xuegod63 mysql]# mysqldump -u root -p123456 book > /opt/book.sql

查看內(nèi)容:
[root@xuegod63 mysql]# vim /opt/book.sql
例:2.導入數(shù)據(jù)庫
法一:
[root@xuegod63 ~]# mysql -u root -p book < /opt/book.sql
Enter password: 輸入密碼即可。
如果導入時,沒有對應的數(shù)據(jù)庫,需要你手動創(chuàng)建一下:
mysql> create database book;
方法二:使用source 命令導入數(shù)據(jù)
如mysql -u root -p
mysql>use 數(shù)據(jù)庫
然后使用source命令,后面參數(shù)為腳本文件(如這里用到的.sql)
mysql> drop table books; #刪除數(shù)據(jù),再導入數(shù)據(jù)
mysql> source /opt/book.sql ;
。。。
Query OK, 44 rows affected (0.00 sec) #查詢行,44 行的影響(0 秒)Records: 44 Duplicates: 0 Warnings: 0 #記錄:44 份:0 警告:0
。。。
Duplicates ?dju:pl?ke?t 重復的
mysql> create database book;
mysql -usystem -p123456 book
mysql -usystem -p123456 book
c:導入表

mysql> drop table books;
mysql> source /root/books.sql; ##導入表時,不需要重新,創(chuàng)建表。
mysql> select * from books;

D:導入表結構和數(shù)據(jù)

mysql> create database book;
mysql -usystem -p123456 book
mysql -usystem -p123456 book

例:導出單張表:

[root@xuegod63 mysql]# mysqldump -u root -p123456 book books > books.sql

導入book庫中的books表。

導入:

mysql> drop table books;
mysql> source /root/books.sql; ##導入表時,不需要重新,創(chuàng)建表。
mysql> select * from books;

例:導出所有數(shù)據(jù)庫:

[root@xuegod63 ~]# mysqldump -u root -p123456 -A > all1.sql
[root@xuegod63 ~]# mysqldump -u root -p123456 --all-databases > all2.sql

或:
參數(shù):-A, --all-databases Dump all the databases.

[root@xuegod63 /]# vim all.sql #查看sql語句,導入數(shù)據(jù)時,會自動創(chuàng)建對應的數(shù)據(jù)庫導入:
[root@xuegod63 /]# mysql -u root -p123456 < all.sql

D:導出庫的表結構

mysqldump -usystem -p123456 -d book>booktable.sql #只導出 book 庫的表結構

E:只導出數(shù)據(jù)

mysqldump -usystem -p123456 -t book>bookdata.sql #只導出 book 庫中的數(shù)據(jù)

F:導出數(shù)據(jù)庫,并自動生成庫的創(chuàng)建語句

mysqldump -uroot -p123456 -B book2 >book2.sql
mysql -uroot -p123456 < book2.sql 導入不用指定數(shù)據(jù)名
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377