首先這裏所描述的過程適用於所有平臺的MySQL。5.7.6之前,使用mysql_install_db在UNIX和類UNIX系統。MySQL 5.7.7之前,Windows分佈包括了在MySQL數據庫建表的數據目錄。
以下說明假定您當前的位置是MySQL的安裝目錄,這裏以BASEDIR爲例
1 shell> cd BASEDIR
要初始化數據目錄,調用 mysqld的與 --initialize或 --initialize不安全的選項,這取決於你是否希望服務器生成的一個隨機初始密碼'root'@'本地賬號'的賬戶。
在Windows環境下,使用這些命令:
1 C:\> bin\mysqld --initialize
2 C:\> bin\mysqld --initialize-insecure
在Unix和類Unix系統,重要的是要確保數據庫的目錄和文件都是由擁有 MySQL的登錄帳戶,以便服務器具有讀寫訪問它們,當你以後運行它。爲了確保這一點,如果你運行的mysqld爲root,包括 --user選項,如下所示:
1 shell> bin/mysqld --initialize --user=mysql
2 shell> bin/mysqld --initialize-insecure --user=mysql
否則,執行程序,而身份登錄mysql的,在這種情況下可以省略 --user從命令選項。
無論任何平臺,使用 --initialize爲“ 默認安全 ”的安裝(即包括產生一個隨機的初始根密碼)。在這種情況下,密碼被標記爲過期,你需要選擇一個新的密碼。隨着 --initialize-insecure 的選項,沒有root口令生成; 假設你把服務器投入使用之前指定一個密碼及時查詢賬戶。
如果mysqld的沒有標識的安裝目錄或數據目錄的正確位置.它可能需要指定其他選項,如 --basedir或 --datadir.如果mysqld的沒有標識的安裝目錄或數據目錄的正確位置。例如(輸入在一行上的命令):
1 shell> bin/mysqld --initialize --user=mysql
2 --basedir=/opt/mysql/mysql
3 --datadir=/opt/mysql/mysql/data
另外,對於Unix和類Unix系統,假設選擇文件名是 /opt/mysql/mysql/etc/my.cnf。把相關的選項設置中的選項文件和傳遞文件命名爲 mysqld的。把文件中的這幾行:
1 [mysqld]
2 basedir=/opt/mysql/mysql
3 datadir=/opt/mysql/mysql/data
然後調用mysqld,如下(輸入上的一行命令 -- --defaults-file第一個選項):
1 shell> bin/mysqld --defaults-file=/opt/mysql/mysql/etc/my.cnf
2 --initialize --user=mysql
在Windows中,假設C:\ my.ini中包含這些命令:
1 [mysqld]
2 basedir=C:\\Program Files\\MySQL\\MySQL Server 5.7
3 datadir=D:\\MySQLdata
然後調用mysqld.如下(--defaults-file必須是第一個選項)
1 C:\> bin/mysqld --defaults-file=C:\my.ini --initialize
當調用的 --initialize或 --initialize-insecure選項 ,mysqld執行下面的初始化程序。
注意
服務器寫入的任何消息,以它的標準錯誤輸出。這可能會被重定向到錯誤日誌.
服務器會檢查數據目錄,如下所示的存在:
如果沒有數據目錄存在,則服務器將創建它。
如果數據目錄存在並且不爲空(即,它包含文件或子目錄),產生一個錯誤消息後在服務器退出:
1 [ERROR] --initialize specified but the data directory exists. Aborting.
1.在這種情況下,刪除或重命名數據目錄,然後重試。
在MySQL 5.7.11中,現有的數據目錄允許非空,如果每個條目或者具有開頭一段的名稱(.),請使用名爲--ignore-db-dir 設置。
2.在數據目錄中,服務器創建 的mysql系統數據庫及其表,其中包括授權表,服務器端幫助表,時區表。
3.服務器初始化system tablespace 和管理所需的相關數據結構的InnoDB表。
注意
經過mysqld的設置了 InnoDB的system tablespace,改變一些表空間的特性需要建立一個全新的實例。這包括在system tablespace的第一個文件,撤銷日誌的數量的文件名 ??。在配置文件運行前的mysqld。如果你不想使用默認值,請確保該設置innodb_data_file_path中 和innodb_log_file_size 參數配置到位.同時一定要指定影響的創建和位置需要其他參數 InnoDB的文件,如 innodb_data_home_dir和 innodb_log_group_home_dir。
如果這些選項在您的配置文件中文,但該文件是不是在MySQL的讀取默認的位置,使用指定文件位置 --defaults-extra-file設置.
4.服務器創建一個'root'@'localhost'的超級用戶帳戶。對於該帳號的密碼,服務器的操作取決於你如何調用它:
-- 當用 --initialize賬戶而不用--initialize-insecure賬戶時。服務器生成一個隨機的密碼,將其標記爲已過期,並寫入顯示密碼的消息:
1 [Warning] A temporary password is generated for root@localhost:
2 iTag*AfrH5ej
-- 當用 --initialize-insecure賬戶時候。服務器不會生成一個密碼,會將其標記爲過期,並寫入一條警告消息:
1 Warning] root@localhost is created with an empty password ! Please
2 consider switching off the --initialize-insecure option.
5.如果--init-file選項被給出以命名的SQL語句的文件時,服務器執行文件中的語句。可以進行自定義的引導序列。
服務器工作在引導方式,一些功能是不可用,限制在文件中所允許的語句。這些措施包括,涉及到賬戶管理(如報表CREATE USER或 GRANT),複製和標識符。
6.然後退出服務器
當您通過啓動服務器初始化數據目錄--initialize或--initialize-insecure,正常啓動的服務器(也就是沒有任何的這些選項),並指定'root'@'localhost'的一個新密碼:
---啓動服務器。
---鏈接到服務器..
如果你使用--initialize 但不使用--initialize-insecure初始化數據目錄,連接到服務器的 根目錄使用的隨機密碼,服務器初始化過程中產生的:
1 shell> mysql -u root -p
2 Enter password: (enter the random root password here)
如果您不知道該密碼,查看服務器錯誤日誌。
如果你使用--initialize-insecure初始化數據目錄連接到服務器的root沒有密碼:
1 shell> mysql -u root --skip-password
---連接後,會分配一個新的root密碼:
1 mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
注意
由服務器執行的數據目錄初始化序列不能代替被執行的操作 mysql_secure_installation或 mysql_ssl_rsa_setup。