前言
作為一個(gè)開發(fā),在mysql(mariadb)數(shù)據(jù)庫中,我?guī)缀醪粫?huì)用數(shù)據(jù)庫的root帳號(hào)來折騰項(xiàng)目的數(shù)據(jù)庫,一般是一個(gè)數(shù)據(jù)庫帳號(hào)對(duì)應(yīng)一個(gè)項(xiàng)目或者一個(gè)系列的項(xiàng)目,看實(shí)際需求。root帳號(hào)僅僅作為一個(gè)分配管理的角色存在。既然數(shù)據(jù)庫的root用的少,那么會(huì)忘記密碼的概率就很大。
當(dāng)然我以前也遇過直接給root帳號(hào)用于生產(chǎn)環(huán)境的公司;這種給我感覺是放出root帳號(hào)用來跑項(xiàng)目,只能說心真大,前者存在被刪庫跑路的風(fēng)險(xiǎn),后者存在被rm -rf /的風(fēng)險(xiǎn)。(運(yùn)維管理能力不一定是開發(fā)必備能力,但是如果擁有這個(gè)能力是加分項(xiàng)吧,今天不討論這個(gè)話題)
文章基于:
- Linux系統(tǒng)下部署的mariadb。
- 要有
sudo(root)權(quán)限,為了方便,下面所有執(zhí)行的指令已經(jīng)在sudo su下執(zhí)行。 - 服務(wù)的
啟動(dòng)/停止使用systemctl。
環(huán)境描述:
- OS:
Ubuntu 20.04 LTS - mariadb:
10.3.31
1. 停止所有mysql服務(wù)
systemctl stop mysql.service
可以ps或者在htop看一下是否已經(jīng)關(guān)閉。
2. 通過mysqld_safe啟動(dòng)數(shù)據(jù)庫
mysqld_safe --defaults-file=my.cnf --skip-grant-tables &
網(wǎng)絡(luò)上面有的說是修改my.cnf文件,但是后面又要改回來,特別麻煩,倒不如直接通過--skip-grant-tables參數(shù)啟動(dòng)。
3. 進(jìn)入數(shù)據(jù)庫
通過
mysql -u root
進(jìn)入數(shù)據(jù)庫,此時(shí)數(shù)據(jù)庫沒有驗(yàn)證流程,可以直接進(jìn)入。
4. 修改root密碼
/*選擇`mysql`配置的數(shù)據(jù)庫*/
use mysql;
/*修改root密碼為:123*/
UPDATE user SET password=PASSWORD('123') WHERE user='root';
/*刷新權(quán)限,可以不執(zhí)行這句*/
FLUSH PRIVILEGES;
第一句use mysql;選擇mysql配置的數(shù)據(jù)庫;
第二句修改root密碼,因?yàn)閙ysql用戶的密碼是密文存儲(chǔ)的,因此使用PASSWORD(...)方法來加密(方法是大寫);其中上面語句修改密碼為123,大家可以自行設(shè)定自己的密碼。
第三句是刷新權(quán)限,可以不執(zhí)行,反正都要重啟數(shù)據(jù)庫(現(xiàn)在用safe模式啟動(dòng)的)。
5. 關(guān)閉安全模式,重啟mysql
通過htop或者pkill關(guān)閉與mysql相關(guān)的進(jìn)程,以停止安全模式。
systemctl start mysql.service
后話
上面的方法屬于硬剛mariadb的配置庫的user表,雖然說這樣做不安全,為了改個(gè)密碼,偶爾這樣巴薩卡一下是ok的。
如果是mysql 8.0以上(非mariadb),據(jù)說是不能這樣硬剛的,沒有實(shí)際測試,可以參考:https://www.cnblogs.com/ivictor/p/9243259.html