安裝 MariaDB
- sudo apt install mariadb-server
- mysql_secure_installation
- ( –> 於 20211220 補充:其實上面這行會出錯是因沒有下 sudo。所以下下看說不定不用後面那些步驟。而後面那些針對性的步驟就是忘了密碼去重設用的。)
- ( –> 於 20211224 再補充,很重要:因此筆者照前兩天的結論下了 sudo,就一切順利不再照著以下文章的步驟。然而依此,在 cli 下使用 root 進入 mariadb 提示命令下,再退出,則當再次進入時不再需要密碼便可直接登入資料庫。這有很大的安全顧慮。其次,當使用 phpmyadmin 時,仍發生無法 root 登入的狀況。因此唯有照本篇文章的步驟[刪 socket],才不會有這些問題。)
- ( –> 20221122 再補充,以下文章內容所提到的 unix_socket plugin 方面的問題,已經再有變動了,即 table 不一樣了。簡單講結論 plugin 已換爲另一支故當前能做的就是直接修改 root password。並將相關參考列在下方以供後續參考
https://gist.github.com/rohsyl/e1d459ccd582774e594e3ff3358528d5
https://mariadb.com/kb/en/mysqlglobal_priv-table/
https://mariadb.com/kb/en/authentication-plugin-unix-socket/
https://mariadb.com/kb/en/authentication-plugin-mysql_native_password/
https://mariadb.com/kb/en/authentication-plugin-ed25519/
https://mariadb.com/kb/en/alter-user/
https://www.thegeekdiary.com/what-is-the-purpose-of-mysql-syslocalhost-user/
https://stackoverflow.com/questions/59537896/mysql-user-has-password-invalid-is-this-the-normal-thing
https://dba.stackexchange.com/questions/249916/how-to-modify-authentication-plugin-in-mariadb-starting-with-10-4-1-to-get-mysql
https://jira.mariadb.org/browse/MDEV-21928
https://www.ibm.com/docs/en/spectrum-lsf-rtm/10.2.0?topic=ssl-configuring-default-root-password-mysqlmariadb
文中提到 mysql_native_password 的安全性更低了,所以可以考量就是將該欄 plugin 都移除。
其次,如前補充的第一點,就是使用 sudo 了。
) - 接著出現如下提示
預期直接按 ENTER 就能設定新的 root 密碼,但現在看來必須繞道而行了。
- 先停止 mysqld 運行
- sudo systemctl stop mysqld
- 接著進入 mysqld 安全模式
- sudo mysqld_safe –skip-grant-tables –skip-networking &(注意 – – s 前是雙 dash)
(註:若後續操作上不符預期,將其移回前景試試) - 以 root 身份,不用密碼登入
- mysql -u root
- 在 mysql 命令提示行下輸入:
- SELECT user, plugin FROM mysql.user;
- 查到 plugin 有筆 unix_socket 記錄,須刪除
- UPDATE mysql.user SET plugin=””;(注意使用 ansi 字元雙引號)
- 接著可以直接設定 root 密碼,也可登出再設定
- UPDATE mysql.user SET password=PASSWORD(“your_new_password”) WHERE user=”root”;(注意使用 ansi 字元雙引號)
- 最後清空,離開。
- FLUSH PRIVILEGES;
- EXIT;
備註:我們後續若安裝到 Ubuntu 所提供的 phpmyadmin 套件,安裝過程中會安裝 phpmyadmin 自己的資料庫,其需要 MariaDB root 的密碼是空白未設定的。因此使用者若不想略過那個步驟,那麼這邊的密碼就需設為空白或不去設它,等到 phpmyadmin 安裝成功後再回來設定 root 密碼。
接著終止剛剛執行的安全模式
- 查看所有 mysql 的行程編號
- ps aux | grep mysql
- 終止所有 mysql 行程
- sudo kill -9 PID1, PID2, … 如圖範例
- 啟動資料庫
- sudo systemctl start mysqld
- mysql_secure_installation
最後,再一次執行 mysql_secure_installation 按照提示回答 y/n 即完成 資料庫的安裝。
依序是:設定 root 密碼,移除匿名使用者(y),禁止 root 遠端登入(y),
移除測試資料(y),重載權限表(y)。
欲操作管理 mysql 資料庫,可以直接使用它的 command line 模式,即下達:mysql -u “使用者名稱” -p
我們目前,只有一位使用者 root。爾後會需要新增使用者及其資料庫供 wordpress 使用。下篇文章,將安裝 PhpMyAdmin 的資料庫管理介面
注意:我們在前面有手動設定了 root 密碼,它會被記錄到 ~/.mysql_history,因此必須將它刪除。需習慣注意於密碼不能被 log 下來。下 truncate -s 0 .mysql_history
- 參考資料
- https://blog.goodjack.tw/2018/02/mariadb-root.html
- 其中記憶體的配置很重要,參考如下
- https://dev.mysql.com/doc/refman/8.0/en/memory-use.html
- https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool-resize.html
- https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_buffer_pool_size
- http://www.mysqlcalculator.com/
- https://snippetinfo.net/mobile/media/1596
20211223 更新,變更資料庫存放路徑
- 筆者想把它放到 ramdisk 上,簡述如下步驟。請參考這篇文章。
- https://linuxhint.com/change_mysql_data_directory_ubuntu/
- 1. 先查看相關路徑
- sudo grep -R –color datadir /etc/mysql/*(注意 – -c)
- 2. 終止 mariadb
- sudo systemctl stop mariadb
- 3. rsync
- sudo rsync -avh –delete /var/lib/mysql/ /ram/mariadb/(注意 – -d)
- 4. 修改 apparmor 設定
- sudo vim /etc/apparmor.d/tunables/alias
- 5. 追加一行
- alias /var/lib/mysql/ -> /ram/mariadb/,
- 6. 重啟 apparmor
- sudo systemctl restart apparmor
- 7. 修改 mariadb 組態
- sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
- 將 datadir 改成新的路徑
- 8. 啟動 mariadb。完成。
- 最後說明;聽說 mysql 是吃記憶體怪獸,或許是將那些索引到的 tables 都放到 memory,故沒理由資料庫檔案不快取到記憶體上。所以,將它放到 ramdisk 應是多此一舉了,也就是若如此,記憶體很可能就有兩份同樣的檔案,那麼便是浪費了。
- 20231216 補充,
設定檔至此處修改 /etc/mysql/mariadb.conf.d/50-server.cnf
例如最大連線數預設是 100;若 nginx 執行緒設了上千可能也因此受限,一直以來都忽略掉 database 也該做點 fine-tune 了,細節再行谷歌。
Usage
- https://www.w3schools.com/sql/
- https://stackoverflow.com/questions/1720244/create-new-user-in-mysql-and-give-it-full-access-to-one-database
- https://stackoverflow.com/questions/3349136/how-to-prevent-a-user-from-being-able-to-see-other-databases-and-the-tables-from
20240109 更新
- 結果用它用了幾年了現在才曉得這回事,
- 簡單講,使用 phpmyadmin,建立新使用者後,會到權限處設定權限,眼瞔應該要尖一點,它一開始的設定頁面是全域的部份,也就是,該使用者相對於所有資料庫的權限;簡單講,當全不選才是。因為 wordpress 是以每個網站對應一個資料庫而非多個為基礎。若某網站被佔領了,則其他資料庫將會淪陷。
- 所以,以筆者當前的能力,SOP 如是,
- 第一步還是比照以前的設定方法後,
- 接著下,
REVOKE ALL PRIVILEGES ON *.* FROM ‘user’@‘localhost’;
此舉並不會撤銷自己所擁有的資料庫,除非再接著明示取消自己的。 - 並記得實際存取檢驗看看是否如預期。
- 若欲回復在某資料庫上的權限,下,
GRANT ALL PRIVILEGES ON some_db.* TO ‘user’@’localhost’;