mac上mysql8.0以tar.gz方式手動安裝


一、下載

官網地址: https://dev.mysql.com/downloads/mysql/

選擇:macOS 10.14 (x86, 64-bit), Compressed TAR Archive

下載后,得到一個131.9m的壓縮包 mysql-8.0.13-macos10.14-x86_64.tar.gz,將其解壓到/usr/local/下,並重命名為mysql (即:最后的完整目錄應該是/usr/local/mysql)


二、調整目錄權限

cd /usr/local
chown -R 當前登錄mac的管理員用戶名 mysql

這一步的目的,主要是保證/usr/local/mysql下可以寫入數據

 

三、初始化數據庫

cd /usr/local/mysql/bin
sudo ./mysqld --initialize --user=mysql
2018-12-01T14:42:12.002186Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server in progress as process 4229
2018-12-01T14:42:12.004783Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /usr/local/mysql/data/ is case insensitive
2018-12-01T14:42:12.006285Z 0 [Warning] [MY-010122] [Server] One can only use the --user switch if running as root
2018-12-01T14:42:14.187443Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: iM46X&03qRc_
2018-12-01T14:42:15.427614Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server has completed

注意藍色標出的部分,初始化過程中,會生成一個隨機的root初始密碼,記好這個,后面會用到。

如果沒記下這個密碼,導致后面無法登錄,可以rm -rf /usr/local/mysql/data/* 把所有文件干掉,再來一把。

 

四、啟動mysql
cd /usr/local/mysql/support-files

./mysql.server start (注:類似的status為查看狀態,stop為停止服務)

Starting MySQL
. SUCCESS!

看到這個SUCCESS就表示啟動成功了。


五、修改密碼
cd /usr/local/mysql/bin
./mysqladmin -u root -p password

初始密碼實在太難記了,可以用上面的命令先改一下 (注:密碼要滿足復雜性要求,比如Www.123.abc之類)

這一步做完后,應該就可以用

./mysql -u root -p

命令行終端登錄了,不過8.0貌似安全策略做了調整,用navicat之類的工具連接,會出現:

Client does not support authentication protocol requested by server; consider upgrading MySQL client

之類的錯誤,解決方法:

use mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';
FLUSH PRIVILEGES;

然后應該就可以了。

 

六、mysql 8新增的一些函數

6.1 over()開窗函數

over開窗函數,在oracle中早就有了,但是mysql直到8.0+才開始支持,參考文檔見:https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html,它的作用有點類似於將"聚合結果行轉列", 具體參考下面的示例(來自官網)

如上圖,這是一張銷售記錄表,上面記錄了"某一年、某個國家、某種產品"的銷售利潤。如果我們要分析,每一行銷售記錄,在本年/本國/本類產品/甚至所有銷售中的貢獻度(即:所占百分比)。按傳統思路,至少得先匯總出 "每年的總銷售金額,每個國家的總銷售金額,每類產品的總銷售金額...",然后用本行的profit去除這些匯總值,才能計算出百分比。

有了over函數后,就可以很簡單了:

SELECT
	YEAR '年份' ,
	country '國家' ,
	product '產品' ,
	profit '產品利潤' ,
	SUM(profit) OVER(PARTITION BY country ,	YEAR ,product) AS '年度-某國家-某產品-利潤小計' ,
	SUM(profit) OVER(PARTITION BY country , YEAR) AS '年度-某國-利潤小計' ,
	SUM(profit) OVER(PARTITION BY country) AS '某國-利潤小計' ,
	SUM(profit) OVER(PARTITION BY YEAR) AS '年度-利潤小計' ,
	SUM(profit) over() AS '利潤合計'
FROM
	sales
ORDER BY
	YEAR ,
	country ,
	product ,
	profit;

結果如下:

各種聚合結果,可以方便的展示在同一行,如果要輸出百分比,直接拿"利潤"這一欄,除以后面某一列匯總值即可。

 

6.2 row_number()函數

這個函數同樣也是從oracle模仿過來的,用法如下:

select
	row_number() over w as 'No.' ,
	year ,
	country ,
	product ,
	profit
from
	sales
where
	year = 2001 window w as(order by country)
order by country

輸出:

詳情可參考 https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM