您好,登錄后才能下訂單哦!
之前使用的一套mysql 5.6.25,由于一些原因我進行了清除。大家知道我們第二次執行mysql_install_db初始化數據庫時,是不會存儲root的臨時密碼。
那么要進入mysql數據庫,就引入如下的一篇文章。
0,以無密碼認證方式啟動數據庫
[root@standbygtid mysql]#nohup mysqld_safe --user=mysql --skip-grant-tables&
1,配置root用戶的密碼
mysql> set password for 'root'@'localhost'='system';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
2,刷新修改用戶密碼的操作到mysql.user表
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
3,修改數據庫用戶密碼,提示密碼需要41個字節
mysql> set password for 'root'@'localhost'='system';
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number
4,采用password函數修改用戶密碼成功
mysql> set password for 'root'@'localhost'=password('system');
Query OK, 0 rows affected (0.00 sec)
5,關閉數據庫
[root@standbygtid mysql]#mysqladmin -uroot -psystem shutdown
6,啟動數據庫
[root@standbygtid mysql]# nohup mysqld_safe --user=mysql&
7,可以用上述配置的數據庫用戶密碼登陸
[root@standbygtid mysql]# mysql -uroot -psystem
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.25-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
8,password函數不管采用的字符串是多少位,產生的字節寬度全是 41
mysql> select password('system'),length(password('system'));
+-------------------------------------------+----------------------------+
| password('system') | length(password('system')) |
+-------------------------------------------+----------------------------+
| *576EE5B74C20E68F2A5A240F3E408E6DE43DD73F | 41 |
+-------------------------------------------+----------------------------+
1 row in set (0.00 sec)
mysql> select password('syste'),length(password('syste'));
+-------------------------------------------+---------------------------+
| password('syste') | length(password('syste')) |
+-------------------------------------------+---------------------------+
| *795AF4045357E7DA27CBF22263514F881880C4AC | 41 |
+-------------------------------------------+---------------------------+
1 row in set (0.00 sec)
9,上述 41字節到底是什么含義呢,查閱mysql 5.6官方文檔,上述這個41個字節是和采用密碼認證的方法有關系,而
采用密碼認證的方法是由系統變量old_passwords控制。
10,old_passwords系統變量的含義
old_passwords控制password函數所使用的密碼認證方法,它會影響create user以及grant操作如何產生數據庫用戶密碼。
old_passwords的幾個值
值 密碼哈希方法 密碼哈希方法采用的插件 是否默認值
0 mysql 4.1版本采用的哈希方法 mysql_native_password 是
1 mysql 4.1之前的哈希方法 sha256_password
2 sha-256哈希方法 sha256_password
11,可見不同的old_password的值,會影響password函數產生的值的寬度
mysql> set old_passwords=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select password('syste'),length(password('syste'));
+-------------------------------------------+---------------------------+
| password('syste') | length(password('syste')) |
+-------------------------------------------+---------------------------+
| *795AF4045357E7DA27CBF22263514F881880C4AC | 41 |
+-------------------------------------------+---------------------------+
1 row in set (0.00 sec)
mysql> set old_passwords=1;
Query OK, 0 rows affected (0.00 sec)
mysql> select password('syste'),length(password('syste'));
+-------------------+---------------------------+
| password('syste') | length(password('syste')) |
+-------------------+---------------------------+
| 46acda267e174d58 | 16 |
+-------------------+---------------------------+
1 row in set (0.00 sec)
mysql> set old_passwords=2;
Query OK, 0 rows affected (0.00 sec)
mysql> select password('syste'),length(password('syste'));
+----------------------------------------------------------------------+---------------------------+
| password('syste') | length(password('syste')) |
+----------------------------------------------------------------------+---------------------------+
| $5$\]^D8P`aMt\vp2Pu$lDCzMsToPBl56CdhB2pjetpvqEiL9BMhdt1TDbMbzL6 | 68 |
+----------------------------------------------------------------------+---------------------------+
1 row in set (0.01 sec)
12,上述old_passwords的不同值是對應于下述不同的插件
mysql> show plugins;
+----------------------------+----------+--------------------+---------+-------------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+---------+-------------+
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | PROPRIETARY |
| mysql_old_password | ACTIVE | AUTHENTICATION | NULL | PROPRIETARY |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | PROPRIETARY |
13,如果你想指定數據庫在啟動或創建時的默認的用戶密碼認證插件
這個插件是對應上述show plugins的值,而沒有對應的系統變量,只有選項,見下
--default-authentication-plugin
可選值:
mysql_native_password 默認值
sha256_password
可以在啟動數據庫時在命令行上指定或者在配置文件中指定這個選項
14,如果在升級mysql時,一定要好好考量old_password的值或者--default-authentication-plugin,否則舊版本的mysql
客戶端可能會登陸不上升級后的mysql數據庫。
1,出現問題,根據錯誤提示進行字面意思分析
2,出現問題,在官方手冊查詢對應出錯語句的語法,可以獲取進一步的診斷信息或線索
3,提出的問題,一定要放在一個大的背景下,就是要向業務服務,你的業務的目標是什么,比如:數據庫用戶的可靠性及安全性,數據庫馬上要升級嗎,數據庫的性能,等等。
4,數據庫的學習是一個迭代式的過程,有些知識,不是一下子可以全面了解的,需要從字面或其它的技術反向進行進一步的掌握
大家可以關注我的微信公眾號,每天會定期發送一些數據庫相關的文章,歡迎交流。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。