-- 建立使用者 CREATE USER 'user1'@'localhost' IDENTIFIED BY '密碼'; -- 授予 USER1 查詢資料庫 db1 的 table1 的權限 GRANT SELECT ON db1.table1 TO 'user1'@'localhost'; -- 刷新權限(選擇性命令, 通常會自動生效) FLUSH PRIVILEGES;
設定業務部只能查詢 sales 資料庫
-- 建立使用者 CREATE USER 'user1'@'localhost' IDENTIFIED BY '密碼'; -- 授予 USER1 查詢資料庫 db1 的 table1 的權限 GRANT SELECT ON db1.table1 TO 'user1'@'localhost'; -- 刷新權限(選擇性命令, 通常會自動生效) FLUSH PRIVILEGES;
# 切換到放置 .sql 檔的目錄下, # 本例中, aa.sql 置於桌面 user$ cd 桌面 # 進入 su 模式 user$ sudo su # 匯入檔案 root# mysql -u root -p 資料庫名 < aa.sql
參考資料 ----
* 這篇筆記是從 Mint Linux 20.3 安裝設定 MySQL 8.0 + phpMyadmin 那篇更新過來的,所以只要能理解、看得懂,部份截圖就沿用 LinuxMint20 的了。😇
VMWare Workstation 開放個人免費使用了!😄
新建一台 VMWare Workstation 虛擬機
偷懶,這次仍是安裝 MySQL,作業系統為 LinuxMint 22.2 MATE, MySQL 8.0。
~$ sudo apt install vim
~$ sudo ufw disable # 確認防火牆沒有啟動 ~$ sudo ufw status
~$ sudo apt install mysql-server
# 下述 3 個指令只是順手筆記, 不執行 # 查詢 MySQL 狀態 ~$ sudo systemctl status mysql # 啟動 mysql ~$ sudo systemctl start mysql # 停止 mysql ~$ sudo systemctl stop mysql
~$ sudo mysql_secure_installation
# 剛安裝好 MySQL 時,預設的管理者帳號是 root,所以, 第 1 次以命令形式登入 MySQL,也不需要密碼 ~$ sudo mysql # 進到 MySQL, 提示字元變成 > -- SQL 指令沒有大/小寫分別,不過慣例上都會以大寫表示 -- (記得要加 分號 做為命令的結束) -- 查詢已安裝的元件 > SELECT * FROM mysql.component; +--------------+--------------------+------------------------------------+ | component_id | component_group_id | component_urn | +--------------+--------------------+------------------------------------+ | 1 | 1 | file://component_validate_password | +--------------+--------------------+------------------------------------+ 1 row in set (0.00 sec) -- 刪除密碼強度套件 > UNINSTALL COMPONENT 'file://component_validate_password'; -- 退出 mysql > EXIT
~$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf [mydqld] ... ... default-time-zone = '+8:00' :x 存檔離開
# 再次登入 MySQL ~$ sudo mysql -- 建立資料庫(順手筆記, 不執行) > CREATE 資料庫名稱; -- 列出目前 MySQL 已建立的使用者帳號(順手筆記, 不執行) > SELECT user FROM mysql.user; -- 新建一個使用者 admin, 給後續安裝的 phpMyAdmin > CREATE USER 'admin'@'localhost' IDENTIFIED WITH caching_sha2_password BY '密碼'; -- 預設的密碼格式為 caching_sha2_password -- 其他格式有:mysql_native_password, sha256_password, ... -- 不過官方還是推薦 caching_sha2_password -- 賦予 admin 最高權限 > GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION; > exit
~$ sudo apt install phpmyadmin # 若安裝過程有失誤 或 不滿意, 想重新跑設定步驟, 可執行 ~$ sudo dpkg-reconfigure phpmyadmin

~$ sudo mysql -- SQL 指令沒有大/小寫分別,不過慣例上都會以大寫表示 -- (記得要加 分號 做為命令的結束) > ALTER USER 'root'@'localhost' IDENTIFIED WITH CACHING_SHA2_PASSWORD BY '新密碼'; -- 退出,密碼才能生效 > EXIT -- 從此之後登入 MySQL 就會要求您輸入密碼 ~$ sudo mysql -u root -p # 參數 -u 是要登入的使用者帳號 # -p 是稍後要輸入密碼 # 上面的指令按下 ENTER 後, 系統就會提示您要輸入密碼 # 另一種登入指令, 但不建議使用, 因為是將密碼以明碼方式顯示 # 注意: -p 跟密碼間沒有空格 # 但這麼一來, 您的密碼就顯示在命令列中, 旁人一覽無遺了 ~$ sudo mysql -u root -p密碼 # 登入 MySQL 後, 提示字元變成 > -- 檢視 root 帳戶 > SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user='root'; +------+-----------+-----------------------+------------------------------------------------------------------------+ | user | host | plugin | authentication_string | +------+-----------+-----------------------+------------------------------------------------------------------------+ | root | localhost | caching_sha2_password | $A$005$__HLm.}1*#ZzXhae2kc4K7Cvfg7TR0UxCxBKY2y2Ji9qieVGaXzMWL4Fn9 | +------+-----------+-----------------------+------------------------------------------------------------------------+ 1 row in set (0.00 sec)
-- csv 最前面補加 西元年度欄位
-- 將 csv 上傳存入 holiday_tmp
-- holiday 和 holiday_tmp 差別只在 holiday 有 autoincrement 的 primary key
-- 刪除平日, 只留假日
DELETE FROM holiday_tmp
WHERE 休假=0
-- 存入 holiday
INSERT INTO holiday
(年度,日期,星期,休假,備註)
SELECT * FROM holiday_tmp
-- 清空 holiday_tmp
DELETE FROM holiday_tmp
當 CREATE TABLE 的欄位定義有預設值,或無預設值(NULL) 且未限制 NOT NULL 時,可使用下面指令。
INSERT INTO 資料表名 DEFAULT VALUES;
-- 假設給予日期:2024-2-2(五)
-- 求得 2024-2-2 是當年的第幾週
SELECT DATEPART(week, '2024-2-2') -- 第 5 週
-- 求得 2024-2-2 是星期幾
SELECT DATEPART(weekday, '2024-2-2') -- 星期五
-- 當月首日:2024-2-1
-- 方法一
-- EOMONTH 求得上個月的最末日
-- DATEADD 再運算加 1 日
SELECT DATEADD(day, 1, EOMONTH('2024-2-2',-1))
-- 方法二
SELECT DATEFROMPARTS(YEAR('2024-2-2'),MONTH('2024-2-2'),1)
-- 當月最末日:2024-2-29
SELECT EOMONTH('2024-2-2')
-- 當年首日:2024-1-1
SELECT DATEFROMPARTS(YEAR('2024-2-2'),1,1)
-- 當年最末日:2024-12-31
SELECT DATEFROMPARTS(YEAR('2024-2-2'), 12, 31)
[user]~$ java -jar metabase.jar
# 切換到 metabase.jar 所在目錄, 在本例為 [user]~/metabase/ [user]~/metabase$ export MB_DB_TYPE=mysql [user]~/metabase$ export MB_DB_CONNECTION_URI="jdbc:mysql://主機IP:3306/metabase?user=metabase帳戶&password=密碼" [user]~/metabase$ java -DMB_DB_TYPE=mysql -DMB_DB_CONNECTION_URI="jdbc:mysql://主機IP:3306/metabase?user=帳號&password=密碼;" -jar metabase.jar load-from-h2 metabase.db # 注意檔名
[user]~/metabase$ export MB_DB_TYPE=mysql [user]~/metabase$ export MB_DB_CONNECTION_URI="jdbc:mysql://主機IP:3306/metabase?user=metabase帳戶&password=密碼" [user]~/metabase$ java -DMB_DB_TYPE=mysql -DMB_DB_CONNECTION_URI="jdbc:mysql://主機IP:3306/metabase?user=metabase帳號&password=密碼" -jar metabase.jar重登入 metabase,可以看到之前製作的儀表板都在。
SELECT EXTRACT(day FROM LAST_DAY(date'2016-02-01')) AS day_count FROM dual;
參考資料 ----
Working with MySQL in Metabase
Metabase 是一套 BI(Business Intelligence),標榜/訴求 主要使用者為 行銷人員,操作直覺簡易,不需有 資料庫 或 數據分析 技能。
可選擇付費的雲端服務,跟 Tablau 等知名、大牌的 BI 相比,價格親民的多;或是在自己公司內部架設伺服主機,免費版本為社群版,Metabase 有提供論壇,讓使用者在論壇尋求支援或解答。
之前接觸 Tablau,覺得 Tablau 雖然功能強大,但也需要有資料庫(尤其是 SQL 語法) 基礎以上的觀念才較能駕馭;而除非公司本身的性質就是與數據分析有關,員工才可能都有概念,不然操作 BI 大多是一般行銷人員,不見得能完全發揮 Tablau 的功能。
系統需求:Java8,目前版本為:0.44.6(不過下面的截圖是 0.41 的)
在 /家目錄/ 建立一個目錄給 Metabase
~$ cd ~ ~$ mkdir metabase
直接下載 jar
執行 Metabase 最簡單的方式:
開一個終端機視窗, 切換到 metabase 目錄,執行 Metabase
~$ cd ~ ~$ java -jar metabase.jar #(注意要含副檔名)
然後就會看到一長串 Metabase 執行的訊息。
打開瀏覽器, 輸入本機網址, 預設的 port 為 3000
ex:http://localhost:3000(不是 https)
第一次執行,會出現設定畫面
按一下 "Let's get started" 鈕
選擇語言
設定 Metabase 系統管理員
設定連線資料庫,目前 Metabase 幾乎支援主流資料庫,不過社群版不支援連線 Oracle
輸入資料庫的連線設定,這裡以 MSSQL 為例
Metabase 目前不支援多資料庫同時呈現在一個儀表板上
v0.33(含) 之後的版本有支援 多資料表 join 查詢,也支援 SQL 語法
雖然 MySQL/MariaDB 系出同源,不過 Metabase 預設支援 MariaDB 的連線方式,若要連接 MySQL,需做微調設定,登入的加密方式改為 mysql_native_password。
# 登入 MySQL ~$ sudo mysql -u root -p # 變更 Metabase 連線 MySQL 的密碼加密方式 > ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';
參考資料 ----
看似 Ubuntu/Mint 家族並未棄用 MySQL,採 Mariadb/MySQL 並存的方式;偷懶,這次仍是安裝 MySQL,作業系統為 LinuxMint 20.3 MATE, 預設的版本為 MySQL 8.0。
~$ sudo apt install vim
~$ sudo ufw disable # 確認防火牆沒有啟動 ~$ sudo ufw status
~$ sudo apt install mysql-server
# 查詢 MySQL 狀態 ~$ sudo systemctl status mysql # 啟動 mysql ~$ sudo systemctl start mysql # 停止 mysql ~$ sudo systemctl stop mysql
~$ sudo mysql_secure_installation
~$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf [mydqld] default-time-zone = '+8:00' :x 存檔離開
~$ sudo mysql -- SQL 指令沒有大/小寫分別,不過慣例上都會以大寫表示 -- (記得要加 分號 做為命令的結束) > ALTER USER 'root'@'localhost' IDENTIFIED WITH CACHING_SHA2_PASSWORD BY '新密碼'; -- 退出,密碼才能生效 > EXIT因為先前的步驟我們指定了密碼強度為 2,所以密碼若不符合這個規則就會出錯
~$ sudo mysql -u root -p # 隨後會要求您輸入密碼 # 參數 -u 是要登入的使用者帳號 # -p 是稍後要輸入密碼 # 另一種登入指令, 但不建議使用, 因為是將密碼以明碼方式顯示 # 注意: -p 跟密碼間沒有空格, 但這麼一來, 您的密碼就顯示在命令列中, 旁人一覽無遺了 ~$ sudo mysql -u root -p密碼 # 登入後, 命令提示字元會變成 > -- 建立資料庫 > CREATE 資料庫名稱; -- 列出目前 MySQL 已建立的使用者帳號 > SELECT user FROM mysql.user; -- 新建一個使用者 admin > CREATE USER 'admin'@'localhost' IDENTIFIED WITH caching_sha2_password BY '密碼'; -- 預設的密碼格式為 caching_sha2_password -- 其他格式有:mysql_native_password, sha256_password -- 賦予 admin 最高權限 > GRANT ALL PRIVILEGES ON * . * TO 'admin'@'localhost'; > exit
~$ sudo apt install phpmyadmin # Mint 會自動幫您安裝 apache2