一、mysqld –initialize –console命令介紹
mysqld –initialize –console命令用於生成一個全新的MySQL數據目錄,並且創建root賬戶的默認密碼,該密碼將會在日誌中輸出。
二、mysqld –initialize –console命令使用
1、生成全新的MySQL數據目錄
使用mysqld –initialize –console命令生成全新的MySQL數據目錄,示例如下:
$ mysqld --initialize --console 2020-04-05T01:25:29.822188Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initializing of server in progress as process 3342 2020-04-05T01:25:29.824964Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting. 2020-04-05T01:25:29.826628Z 0 [ERROR] [MY-013236] [Server] Newly created data directory /var/lib/mysql/ is unusable. You can safely remove it.
如果全新的MySQL數據目錄已經存在,將會輸出以上錯誤信息。
如果全新的MySQL數據目錄不存在,將會輸出以下類似的信息:
$ mysqld --initialize --console 2020-04-05T01:08:33.765043Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initializing of server in progress as process 3037 2020-04-05T01:08:33.853206Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: GCPsO1G[s4&6 2020-04-05T01:08:38.226778Z 0 [System] [MY-013170] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initialization completed successfully (log sequence number 0).
以上信息表示MySQL數據目錄初始化成功,並生成了root賬戶的默認密碼:GCPsO1G[s4&6。
2、修改MySQL數據目錄位置
使用mysqld –initialize –console命令時,默認MySQL數據目錄為/var/lib/mysql,可以通過–datadir參數來指定MySQL數據目錄位置,示例如下:
$ mysqld --initialize --console --datadir=/data/mysql
以上命令將會在/data/mysql目錄下生成全新的MySQL數據目錄。
三、mysqld –initialize –console命令原理
mysqld –initialize –console命令執行原理如下:
1、生成臨時密碼
執行命令時,MySQL服務器會生成一串隨機的臨時密碼,平時我們不可見,密碼會被輸出在日誌中,如以下信息:
2020-04-05T01:08:33.853206Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: GCPsO1G[s4&6
2、初始化數據目錄
執行mysqld –initialize –console命令時,MySQL 會檢查指定數據目錄是否存在,如果不存在,MySQL就會按照默認的存儲引擎創建必要的文件和子目錄。
當 MySQL 執行成功時,表示數據庫初始化完成並且數據庫可以正常工作了。
3、啟動MySQL服務器實例
執行mysqld –initialize –console命令並不會啟動 MySQL服務器實例。需要執行mysqld_safe啟動 MySQL服務器實例。
四、mysqld –initialize –console命令注意事項
1、MySQL數據目錄不為空
如果MySQL數據目錄不為空時,執行mysqld –initialize –console命令將會輸出以下信息,初始化中止:
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists) 2020-04-05T01:03:30.171566Z 0 [ERROR] [MY-010119] [Server] Aborting 2020-04-05T01:03:30.172188Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.
2、MySQL版本不同
MySQL的版本不同,執行mysqld –initialize –console命令時的日誌信息可能會略有不同。
3、MySQL數據目錄權限問題
如果MySQL數據目錄的權限不正確,執行mysqld –initialize –console命令可能會失敗。我們需要使用chmod 命令修改 MySQL 數據目錄權限(默認權限為700),示例如下:
$ sudo chmod 700 /var/lib/mysql/
4、生成的密碼強度
mysqld –initialize –console命令生成的密碼強度並不高,我們需要在MySQL服務啟動後,修改root賬戶的密碼:
$ mysql -u root -p Enter password: ********* mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
總結
mysqld –initialize –console命令是MySQL服務初始化必不可少的命令之一,不僅會生成全新的MySQL數據目錄,還會生成root賬戶的臨時密碼,需要注意的是,生成的密碼強度並不高,需要及時修改密碼。
原創文章,作者:LEFH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/147237.html