MySQL資料庫初始化

一、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-tw/n/147237.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LEFH的頭像LEFH
上一篇 2024-11-01 14:07
下一篇 2024-11-01 14:07

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python怎麼導入資料庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的資料庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • Go中struct的初始化

    本文將從多個方面詳細闡述Go中struct的初始化方式,包括使用字面量初始化、使用new函數初始化以及使用構造函數等。通過本文的介紹,讀者能夠更深入的了解Go中struct的初始化…

    編程 2025-04-28

發表回復

登錄後才能評論