設置MySQL數據庫
本文介紹如何在CentOS上執行流行的MySQL數據庫服務器的基本安裝。 MySQL是當今使用最廣泛的數據庫系統,它可以在許多不同的行業中找到,為動態網站和大型數據倉庫等各種產品提供數據存儲。
準備
此配方要求CentOS系統具有有效的網絡連接和管理權限,使用root帳戶或sudo。
怎么做
請按照以下步驟安裝MySQL并創建新數據庫:
- 下載Oracle維護的MySQL存儲庫的存儲庫配置包:
curl -LO dev.mysql.com/get/mysql57-community-release-el7- 7.noarch.rpm
- 安裝下載的包:
yum install mysql57-community-release-el7-7.noarch.rpm
- 現在已經注冊了MySQL存儲庫,安裝mysql-community-serverpackage:
yum install mysql-community-server
- 啟動MySQL服務器并使其在系統重新啟動時自動啟動:
systemctl start mysqld.servicesystemctl enable mysqld.service
- 在系統的防火墻中打開端口3306以允許外部連接到MySQL:
firewall-cmd --zone=public --permanent --add-service=mysqlfirewall-cmd --reload
- 從服務器的日志文件中檢索MySQL的root用戶的臨時密碼:
grep "temporary password" /var/log/mysqld.log
- 使用mysqladmin為root設置新密碼。 當程序提示輸入當前密碼時,請輸入日志中的臨時密碼:
mysqladmin -u root -p password
- 使用mysql使用root帳戶連接到MySQL服務器:
mysql -u root -p
- 要創建新數據庫,請執行CREATE DATABASE語句:
CREATE DATABASE packt;
- 執行CREATE USER語句以創建用于處理數據庫的MySQL用戶帳戶:
CREATE USER "tboronczyk"@"localhost" IDENTIFIED BY "P@$$W0rd";
- 執行GRANT語句以為新數據庫的帳戶分配適當的權限:
GRANT CREATE, DROP, ALTER, LOCK TABLES, INDEX, INSERT, UPDATE, SELECT, DELETE ON packt.* TO "tboronczyk"@"localhost";
- 執行FLUSH PRIVILEGES以指示MySQL重建其權限緩存:
FLUSH PRIVILEGES;
- 退出MySQL客戶端并返回終端:
exit
工作原理
我們首先下載了在我們的系統上注冊Oracle維護的MySQL存儲庫的軟件包。 MySQL是從Oracle存儲庫安裝的,因為CentOS存儲庫安裝了MariaDB。 經過2008年至2010年的一系列收購,MySQL代碼庫和商標成為Oracle的財產。 對Oracle的管理和MySQL的未來的廣泛關注促使MySQL的一個原始開發人員分叉項目并啟動MariaDB。 2014年,Red Hat和CentOS存儲庫將MySQL替換為MariaDB的默認數據庫(歡迎來到開源政治領域)。
注意
MariaDB的目標是在GNU GPL許可下保持一個免費的開源項目,并成為MySQL的“增強型,替代品”。目前,兩者之間的差異對于臨時用戶來說可以忽略不計。但在分叉替換的世界中,主要是編程接口和通信協議保持兼容。核心功能最初可能保持不變,但隨著時間的推移,新功能會獨立添加,并且產品的功能集開始出現分歧。 MariaDB通過版本號的跳躍來承認這一點。 MariaDB 5.1提供與MySQL 5.1相同的功能,MariaDB 5.5 for MySQL 5.5也是如此。但是,MariaDB不打算實現MySQL 5.6的所有功能,并將其版本號更改為10.0。對于那些在家中保持分數的人來說,Oracle編寫的存儲庫在撰寫本文時主持了MySQL 5.7。 CentOS存儲庫目前提供MariaDB 5.5。
托管軟件包的服務器假定人們使用Web瀏覽器下載文件并發出重定向以開始下載。由于我們使用curl,因此我們提供了-L參數來跟蹤重定向以到達實際的包:
curl -LO dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
接下來,我們安裝了下載的包。 一旦注冊了存儲庫,我們就可以使用mysql-community-server軟件包安裝MySQL。 該軟件包安裝服務器二進制文件,與MySQL一起使用的客戶端實用程序作為依賴項安裝:
yum install mysql57-community-release-el7-7.noarch.rpmyum install mysql-community-server
MySQL維護自己的用戶帳戶,其管理用戶名為root。 就像CentOS的root用戶一樣,您不應該將該帳戶用于常規活動; 它應該保留用于管理任務,例如創建新用戶,授予權限和刷新服務器的緩存。 其他權限較低的帳戶應該用于日常活動。 為了保護root帳戶,我們在第一次啟動MySQL服務器時隨機生成密碼。 我們需要搜索MySQL記錄密碼的日志文件,以便我們可以設置我們自己選擇的新密碼:
grep "temporary password" /var/log/mysqld.log
知道了臨時密碼,我們用mysqladmin來改變它。 -u選項提供MySQL帳戶的用戶名,-p提示我們輸入帳戶的密碼,password是實用程序用于更改密碼的子命令。 我們在提示輸入原始密碼時輸入了臨時密碼,然后我們被要求輸入并確認新密碼:
mysqladmin -u root -p password
注意
root的隨機默認密碼是從MySQL 5.6開始的新行為,它將密碼寫入/root/.mysql_secret,而5.7將其寫入日志文件。 在舊版本中,因此由CentOS存儲庫安裝的MariaDB自5.5以來,密碼為空。 validate_password插件也在MySQL 5.7中激活。 它要求密碼為八個字符或更多,至少有一個數字,一個大寫和一個小寫字符,以及一個特殊字符(即標點符號)。 選擇root的新密碼時請考慮這些要求。

設置root的永久密碼需要臨時密碼
我們可以使用幾個客戶端連接到MySQL并與我們的數據庫進行交互。 這個配方使用了mysql,因為它默認安裝為依賴項。 同樣,-u標識帳戶的用戶名,-p提示我們輸入密碼:
mysql -u root -p
在交互模式下運行時,客戶端顯示我們提交SQL語句的提示mysql>。 在每次查詢之后,客戶端顯示服務器的響應,語句執行的時間以及服務器是否報告任何錯誤或警告。
我們在提示符處發出了CREATE DATABASE語句,以創建名為packt的新數據庫:
CREATE DATABASE packt;
然后我們使用CREATE USER創建了一個新的用戶帳戶,以避免在我們的日常工作中使用root。 該帳戶名為tboronczyk,允許從localhost進行身份驗證:
CREATE USER "tboronczyk"@"localhost" IDENTIFIED BY "P@$$w0rd";
如果帳戶將從其他系統連接到服務器,則系統的主機名或IP地址可以替換localhost。 MySQL將每個用戶名和主機名對視為單獨的帳戶,例如tboronczyk @ localhost和tboronczyk @ 192.168.56.100是不同的帳戶,可以分配不同的權限。
注意
您可以在主機名中使用通配符來創建可以從多個系統連接的帳戶。 %通配符匹配零個或多個字符,因此可用于表示任何系統:
CREATE USER "tboronczyk"@"%" IDENTIFIED BY "P@$$w0rd";
創建新帳戶時沒有任何權限,因此我們必須通過執行GRANT語句來分配它們:
GRANT CREATE, DROP, ALTER, LOCK TABLES, INSERT, UPDATE, SELECT, DELETE ON packt.* TO "tboronczyk"@"localhost";
該語句為packt數據庫中的所有表(用*表示)分配以下權限:
- CREATE: 這允許用戶創建數據庫和表
- DROP: 這允許用戶刪除整個表和數據庫
- ALTER: 這允許用戶更改現有表的定義
- LOCK TABLES: 這允許用戶鎖定表以進行獨占讀或寫訪問INDEX: This allows the user to create table indexes
- INSERT: 這允許用戶將記錄添加到表中
- UPDATE: 這允許用戶更新表中的記錄
- SELECT: 這允許用戶從表中檢索記錄
- DELETE: 這允許用戶從表中刪除記錄
完整的權限列表以及允許用戶執行的操作可以在http://dev.mysql.com/doc/refman/5.7/en/grant.html上的官方MySQL文檔中找到。
接下來,我們指示MySQL使用FLUSH PRIVILEGES重建其權限緩存:
FLUSH PRIVILEGES;
當MySQL啟動時,它會將用戶和權限信息緩存在內存中(您將從第5章“管理文件系統和存儲”中回憶起,從內存讀取比從磁盤讀取要快得多),然后每次用戶執行時檢查緩存驗證他們是否具有足夠權限的操作。每當我們創建或刪除用戶帳戶或授予或撤銷帳戶的權限時,我們都需要告訴MySQL更新其緩存,否則我們的更改將在MySQL下次啟動時被忽視。
當使用mysql連接到MySQL時,您可能經常使用其他選項調用它。常見選項是-h,如果MySQL在不同的系統上運行,它將標識遠程服務器的主機名或IP地址。 -e直接執行語句,而不是以交互方式啟動mysql。此外,要使用特定數據庫,可以在命令的其余部分之后給出名稱,也可以使用-D來指定它。以下示例通過連接到192.168.56.100上的MySQL服務器并對其sakila數據庫執行SELECT語句來演示所有這些:
mysql -u tboronczyk -p -h 192.168.56.100 -D sakila -e "SELECT last_name, first_name FROM actor"
See also
Refer to the following resources for more information on working with MySQL:
- The mysql manual page (man 1 mysql)
- MySQL 5.7 reference manual (http://dev.mysql.com/doc/refman/5.7/en)
- Jump Start MySQL (http://www.amazon.com/Jump-Start-MySQL-Timothy-Boronczyk/dp/0992461286)
- MySQL Tutorial (http://www.mysqltutorial.org/)