三種方式
- linux命令行執行mysqladmin客戶端程序
- mysql命令行set password命令
- mysql命令行update命令 (推薦使用,避免多用戶問題)
方式一:mysqladmin方式
格式
$ mysqladmin -uuser_name -p'oldPasswd' password 'newPasswd'
其中user_name即為用戶名,oldPasswd即為舊密碼,newPasswd即為新密碼;
示例
$ mysqladmin -uroot -p'1qaz!QAZ' password 123456
方式二:set password方式
需要先通過mysql -uroot -p進入mysql命令行
格式
mysql> set password for user_name@localhost=password('newPasswd');
Query OK, 0 rows affected (0.94 sec)
其中user_name即為用戶名,newPasswd即為新密碼;
示例
mysql> set password for root@localhost = password('1qw2!QW@');
方式三:update命令
需要先通過mysql -uroot -p進入mysql命令行
格式
mysql> update mysql.user set password=password('newPasswd') where user='userName';
mysql> flush privileges;
其中user_name即為用戶名,newPasswd即為新密碼;
示例
mysql> update mysql.user set password=password('1qaz!QAZ') where user='root';
Query OK, 0 rows affected (0.94 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.94 sec)
Q & A
問題:修改密碼后服務端生效,但是navicat還能使用舊密碼連接mysql?
其實mysql數據庫中,我們所說的用戶不僅僅只是'root',更多的是指root@localhost和root@%這種帶有'userName'@'hostName'的才是具體的用戶。
1)當我們使用:
mysql> set password for root@localhost=password('newPasswd');`
可能只是改了root@localhost這個用戶,有可能還有root@%用戶。
2)查看user表:
mysql> select host, user, password from mysql.user where user='root';

從user表中,我們可以看到root對應到多個host,使用之前的set語句可能我們只是更改了其中一個用戶,我們可以通過update命令更新mysql.user表,全局更新所有root@hostName的密碼;
3)所以,我們應該使用:
mysql> update mysql.user set password=password('newPasswd') where user='root';
Query OK, 1 row affected (0.11 sec)
Rows matched: 5 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.94 sec)
這樣可以全局改變所有帶有root@的用戶密碼,再通過navicat使用舊密碼連接數據庫時,遠程訪問拒絕。
