MYSQL初始化數(shù)據(jù)目錄的實(shí)現(xiàn)步驟
安裝MySQL后,必須初始化數(shù)據(jù)目錄,包括mysql
系統(tǒng)schema中的表:對(duì)于某些MySQL安裝方法,數(shù)據(jù)目錄初始化是自動(dòng)的
對(duì)于其他安裝方法,您必須手動(dòng)初始化數(shù)據(jù)目錄。其中包括在Unix和類(lèi)Unix系統(tǒng)上從通用二進(jìn)制和源碼發(fā)行版安裝,以及在Windows上從zip壓縮包安裝。
本節(jié)介紹如何為那些不能自動(dòng)初始化數(shù)據(jù)目錄的MySQL安裝方式,進(jìn)行手動(dòng)初始化數(shù)據(jù)目錄。
數(shù)據(jù)目錄初始化概述
在此處顯示的示例中,服務(wù)器打算在mysql
登錄帳戶(hù)的用戶(hù)ID下運(yùn)行。如果帳戶(hù)不存在,請(qǐng)創(chuàng)建該帳戶(hù),或者替換您計(jì)劃用于運(yùn)行服務(wù)器的不同現(xiàn)有登錄帳戶(hù)的名稱(chēng)。
1、將位置更改為MySQL安裝的頂級(jí)目錄,這通常是/usr/local/mysql
的(根據(jù)需要調(diào)整系統(tǒng)的路徑名):
cd /usr/local/mysql
2、secure_file_priv系統(tǒng)變量將導(dǎo)入和導(dǎo)出操作限制在特定目錄。創(chuàng)建一個(gè)目錄,其位置可以指定為該變量的值:
mkdir mysql-files
將目錄用戶(hù)和組所有權(quán)授予mysql
用戶(hù)和mysql
組,并適當(dāng)設(shè)置目錄權(quán)限:
chown mysql:mysql mysql-files chmod 750 mysql-files
3、使用服務(wù)器初始化數(shù)據(jù)目錄,包括mysql
schema包含確定如何允許用戶(hù)連接到服務(wù)器的初始MySQL授權(quán)表。例如:
bin/mysqld --initialize --user=mysql
通常,數(shù)據(jù)目錄初始化只需要在您第一次安裝MySQL后完成。但是,初始化數(shù)據(jù)目錄的命令不會(huì)覆蓋任何現(xiàn)有的mysql
schema表,因此在任何情況下運(yùn)行都是安全的。
4、如果沒(méi)有任何選項(xiàng)文件,服務(wù)器運(yùn)行默認(rèn)設(shè)置。要顯式指定MySQL服務(wù)器在啟動(dòng)時(shí)應(yīng)使用的選項(xiàng),請(qǐng)將它們放在選項(xiàng)文件中,例如/etc/my.cnf
或/etc/mysql/my.cnf
。例如,您可以使用選項(xiàng)文件來(lái)設(shè)置secure_file_priv系統(tǒng)變量。
5、要確定MySQL在系統(tǒng)啟動(dòng)時(shí)無(wú)需人工干預(yù)即可啟動(dòng)。
6、數(shù)據(jù)目錄初始化在mysql
schema中創(chuàng)建時(shí)區(qū)表,但不填充它們。
數(shù)據(jù)目錄初始化程序
將位置更改為MySQL安裝的頂級(jí)目錄,這通常是/usr/local/mysql
的(根據(jù)需要調(diào)整系統(tǒng)的路徑名):
cd /usr/local/mysql
要初始化數(shù)據(jù)目錄,調(diào)起mysqld與--initialize或--initialize-insecure選項(xiàng),這取決于您是否希望服務(wù)器生成一個(gè)隨機(jī)的初始密碼為'root'@'localhost'
帳戶(hù),或創(chuàng)建該帳戶(hù)時(shí)不指定密碼:
1、使用--initialize進(jìn)行"安全默認(rèn)"安裝(即,包括生成隨機(jī)的初始root
密碼)。在這種情況下,密碼被標(biāo)記為過(guò)期,您必須選擇一個(gè)新的。
2、使用--initialize-insecure,不會(huì)生成root
密碼。這是不安全的;您需要在將服務(wù)器投入生產(chǎn)使用之前及時(shí)為帳戶(hù)分配密碼。
有關(guān)分配新的'root'@'localhost'
密碼的說(shuō)明,請(qǐng)參閱初始化后root密碼修改。
注:服務(wù)器將任何消息(包括任何初始密碼)寫(xiě)入其標(biāo)準(zhǔn)錯(cuò)誤輸出。這可能會(huì)被重定向到錯(cuò)誤日志,在Windows上,使用--console選項(xiàng)將消息定向到控制臺(tái)。
在Unix和類(lèi)Unix系統(tǒng)上,數(shù)據(jù)庫(kù)目錄和文件必須由mysql
登錄帳戶(hù)擁有,以便稍后運(yùn)行時(shí)服務(wù)器可以讀取和寫(xiě)入它們。為確保這一點(diǎn),請(qǐng)從系統(tǒng)root
帳戶(hù)啟動(dòng)mysqld并包含--user選項(xiàng),如下所示:
bin/mysqld --initialize --user=mysql bin/mysqld --initialize-insecure --user=mysql
或者,在已登錄為mysql用戶(hù)中
執(zhí)行mysqld,在這種情況下,您可以從命令中省略--user選項(xiàng)。
在Windows上,使用以下命令之一:
bin\mysqld --initialize --console bin\mysqld --initialize-insecure --console
注:如果缺少所需的系統(tǒng)庫(kù),數(shù)據(jù)目錄初始化可能會(huì)失敗。例如,您可能會(huì)看到如下錯(cuò)誤:
bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
如果發(fā)生這種情況,您必須手動(dòng)或使用系統(tǒng)的包管理器安裝缺失的庫(kù)。然后重試數(shù)據(jù)目錄初始化命令。
如果mysqld無(wú)法識(shí)別安裝目錄或數(shù)據(jù)目錄的正確位置,則可能需要指定其他選項(xiàng)--basedir
或--datadir
。例如(在一行中輸入命令):
bin/mysqld --initialize --user=mysql --basedir=/opt/mysql/mysql --datadir=/opt/mysql/mysql/data
或者,將相關(guān)的選項(xiàng)設(shè)置放在選項(xiàng)文件中,并將該文件的名稱(chēng)傳遞給mysqld。對(duì)于Unix和類(lèi)Unix系統(tǒng),假設(shè)選項(xiàng)文件名是/opt/mysql/mysql/etc/my.cnf
。將以下行放在文件中:
[mysqld] basedir=/opt/mysql/mysql datadir=/opt/mysql/mysql/data
然后調(diào)起mysqld如下(在一行中輸入命令,首先輸入--defaults-file選項(xiàng)):
bin/mysqld --defaults-file=/opt/mysql/mysql/etc/my.cnf --initialize --user=mysql
在Windows上,假設(shè)C:\my.ini
包含以下行:
[mysqld] basedir=C:\\Program Files\\MySQL\\MySQL Server 8.4 datadir=D:\\MySQLdata
然后調(diào)起mysqld如下(同樣,您應(yīng)該在一行中輸入命令,首先輸入--defaults-file選項(xiàng)):
bin\mysqld --defaults-file=C:\my.ini --initialize --console
重要:始化數(shù)據(jù)目錄時(shí),除了用于設(shè)置目錄位置的選項(xiàng)(如--basedir或--datadir)和--user選項(xiàng)(如果需要)之外,不應(yīng)指定任何其他選項(xiàng)。MySQL服務(wù)器在正常使用期間使用的選項(xiàng)可以在初始化后重新啟動(dòng)時(shí)設(shè)置。有關(guān)詳細(xì)信息,請(qǐng)參閱--initialize選項(xiàng)的描述。
數(shù)據(jù)目錄初始化期間的服務(wù)器操作
注:服務(wù)器執(zhí)行的數(shù)據(jù)目錄初始化序列不能替代mysql_secure_installation執(zhí)行的操作。
當(dāng)使用--initialize或--initialize-insecure選項(xiàng)調(diào)用時(shí),mysqld在數(shù)據(jù)目錄初始化序列期間執(zhí)行以下操作:
1、服務(wù)器檢查數(shù)據(jù)目錄是否存在,如下所示:
如果不存在數(shù)據(jù)目錄,則服務(wù)器會(huì)創(chuàng)建它。
如果數(shù)據(jù)目錄存在但不為空(即包含文件或子目錄),服務(wù)器在產(chǎn)生錯(cuò)誤消息后退出:
[ERROR] --initialize specified but the data directory exists. Aborting.
在這種情況下,請(qǐng)刪除或重命名數(shù)據(jù)目錄,然后重試。如果每個(gè)條目的名稱(chēng)都以句點(diǎn)(
.
)開(kāi)頭,則允許存量數(shù)據(jù)目錄為非空。
2、在數(shù)據(jù)目錄中,服務(wù)器創(chuàng)建mysql
系統(tǒng)schema及其表,包括數(shù)據(jù)字典表、授權(quán)表、時(shí)區(qū)表和服務(wù)器端幫助表。
3、服務(wù)器初始化管理InnoDB表所需的系統(tǒng)表空間和相關(guān)數(shù)據(jù)結(jié)構(gòu)。注意:在mysqld設(shè)置InnoDB 系統(tǒng)表空間后,對(duì)表空間特征的某些更改需要設(shè)置一個(gè)全新的實(shí)例。合格的更改包括系統(tǒng)表空間中第一個(gè)文件的文件名和撤消日志的數(shù)量。如果您不想使用默認(rèn)值,請(qǐng)確保innodb_data_file_path和innodb_log_file_size配置參數(shù)的設(shè)置在MySQL配置文件 中到位,然后再運(yùn)行mysqld。還要確保根據(jù)需要指定影響InnoDB文件創(chuàng)建和位置的其他參數(shù),例如innodb_data_home_dirinnodb_log_group_home_dir,如果這些選項(xiàng)在配置文件中,但該文件不在MySQL默認(rèn)讀取的位置,請(qǐng)?jiān)谶\(yùn)行mysqld時(shí)使用--defaults-extra-file選項(xiàng)指定文件位置。
4、服務(wù)器創(chuàng)建一個(gè)'root'@'localhost'超級(jí)用戶(hù)帳戶(hù)和其他保留帳戶(hù)(參見(jiàn)第8.2.9節(jié),“保留帳戶(hù)”)。一些保留帳戶(hù)被鎖定,客戶(hù)端無(wú)法使用,但'root'@'localhost'用于管理用途,您應(yīng)該為其分配密碼。服務(wù)器關(guān)于'root'@'localhost'帳戶(hù)密碼的操作取決于您如何調(diào)起它:
使用--initialize但不--initialize-insecure,服務(wù)器生成一個(gè)隨機(jī)密碼,將其標(biāo)記為過(guò)期,并寫(xiě)入一個(gè)顯示密碼的消息:
[Warning] A temporary password is generated for root@localhost: iTag*AfrH5ej
使用--initialize-insecure,(無(wú)論是否--initialize,因?yàn)?-initialize-insecure暗示--initialize),服務(wù)器不會(huì)生成密碼或標(biāo)記密碼已過(guò)期,并寫(xiě)入警告消息:
[Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
有關(guān)分配新的'root'@'localhost'密碼的說(shuō)明,請(qǐng)參閱下面的說(shuō)明
5、服務(wù)器填充用于HELP的服務(wù)器端help表。服務(wù)器不填充時(shí)區(qū)表。要手動(dòng)執(zhí)行此操作
6、如果使用init_file系統(tǒng)變量來(lái)命名包含SQL語(yǔ)句的文件,則服務(wù)器將執(zhí)行該文件中的語(yǔ)句。當(dāng)服務(wù)器在引導(dǎo)模式下運(yùn)行時(shí),某些功能不可用,這些功能限制了文件中允許的語(yǔ)句。這些語(yǔ)句包括與帳戶(hù)管理(如CREATE USER或GRANT)、復(fù)制和全局事務(wù)標(biāo)識(shí)符相關(guān)的語(yǔ)句。
7、服務(wù)器退出。
初始化后root密碼分配
通過(guò)使用--initialize或--initialize-insecure啟動(dòng)服務(wù)器初始化數(shù)據(jù)目錄后,正常啟動(dòng)服務(wù)器(即不使用這些選項(xiàng)中的任何一個(gè))并為'root'@'localhost'帳戶(hù)分配新密碼:
1、啟動(dòng)服務(wù)器
2、連接到服務(wù)器
如果使用--initialize但不--initialize-insecure初始化數(shù)據(jù)目錄,則以root身份連接到服務(wù)器:
mysql -u root -p
然后,在密碼提示處,輸入服務(wù)器在初始化序列中生成的隨機(jī)密碼:
Enter password: (enter the random root password here)
如果您不知道此密碼,請(qǐng)查看服務(wù)器錯(cuò)誤日志。
如果您使用--initialize-insecure初始化數(shù)據(jù)目錄,請(qǐng)以root連接到服務(wù)器,無(wú)需密碼:
mysql -u root --skip-password
3、連接后,使用ALTER USER語(yǔ)句分配新的root密碼:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';
嘗試連接到主機(jī)通常127.0.0.1解析為localhost帳戶(hù)。但是,如果服務(wù)器在啟用skip_name_resolve的情況下運(yùn)行,則會(huì)失敗。如果您計(jì)劃這樣做,請(qǐng)確保存在可以接受連接的帳戶(hù)。例如,為了能夠使用--host=127.0.0.1或--host=::1以root連接,請(qǐng)創(chuàng)建以下帳戶(hù):
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password'; CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
可以使用init_file系統(tǒng)變量將這些語(yǔ)句放入要執(zhí)行的文件中。
到此這篇關(guān)于MYSQL初始化數(shù)據(jù)目錄的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)MYSQL初始化數(shù)據(jù)目錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL子查詢(xún)中order by不生效問(wèn)題的解決方法
ORDER BY 語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序,在日常工作中經(jīng)常會(huì)用到,這篇文章主要給大家介紹了關(guān)于MySQL子查詢(xún)中order by不生效問(wèn)題的解決方法,需要的朋友可以參考下2021-07-07MySQL創(chuàng)建數(shù)據(jù)庫(kù)和創(chuàng)建數(shù)據(jù)表
MySQL?是最常用的數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)操作中,基本都是增刪改查操作,簡(jiǎn)稱(chēng)CRUD。但是,這篇文章主要介紹了數(shù)據(jù)庫(kù)和數(shù)據(jù)表如何創(chuàng)建,想詳細(xì)了解的小伙伴可以參考閱讀一下2023-03-03MySQL中g(shù)roup_concat函數(shù)深入理解
本文通過(guò)實(shí)例介紹了MySQL中的group_concat函數(shù)的使用方法,需要的朋友可以適當(dāng)參考下2012-11-11