# MariaDB 篇
LNMP 第二個要安裝的是 MariaDB ,事實上 MariaDB 官方文檔非常糟糕,幸好 MairaDB 對常見 Linux 發行版都能及時的做了預編譯
MariaDB 的預編譯完全足夠 phper 使用,具體安裝方法如下:
## 添加 MariaDB 鏡像
預編譯版本使用使用 apt 來安裝 MariaDB
### 生成鏡像信息
點擊 [獲取 MariaDB 鏡像](https://downloads.mariadb.org/mariadb/repositories) ,通過 4 步選擇,生成最符合你的 MariaDB 鏡像信息
1. 選擇 Linux 發行版
| 英文 | Choose a Distro |
| ---- | --------------- |
| 選擇 | Debian |
2. 選擇發行版版本號
| 英文 | Choose a Release |
| ---- | -------------------- |
| 選擇 | Debian 11 "bullseye" |
3. 選擇 MariaDB 版本號
| 英文 | Choose a Version |
| ---- | ---------------- |
| 選擇 | 10.6 [Stable] |
4. 選擇 MariaDB 鏡像
清華大學通常是最快的,大家按具體情況選擇
| 英文 | Choose a Mirror |
| ---- | --------------- |
| 選擇 | 清華大學 |
> 提示:本次測試環境使用的是騰訊云服務器,所以 MariaDB 鏡像選擇的是騰訊軟件源
### 具體操作
1. 外網導入 MariaDB 密鑰
```sh
$ apt install software-properties-common dirmngr -y
$ curl -LsSO https://mariadb.org/mariadb_release_signing_key.asc
$ chmod -c 644 mariadb_release_signing_key.asc
$ mv -vi mariadb_release_signing_key.asc /etc/apt/trusted.gpg.d/
```
2. 內網導入 MariaDB 密鑰
MariaDB 鏡像的公共密鑰是唯一的,簡單說就是全球服務器用的都是一樣的,因此將下載好的 [MariaDB 密鑰](./mariadb/mariadb_release_signing_key.asc.md) 文件拷貝到 /etc/apt/trusted.gpg.d/ 目錄下即可
具體操作如下:
```sh
$ apt install software-properties-common dirmngr
$ vim /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc
# 插入 MariaDB 密鑰內容 ...
$ chmod -c 644 /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc
```
3. 為 MariaDB 創建自定義源文件
```sh
$ touch /etc/apt/sources.list.d/mariadb.list
$ vim /etc/apt/sources.list.d/mariadb.list
```
清華外網 mariadb.list 源碼(https 可以改成 http):
```conf
# MariaDB 10.6 repository list - created 2021-09-25 14:11 UTC
# http://downloads.mariadb.org/mariadb/repositories/
deb [arch=amd64,arm64,ppc64el] https://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.6/debian bullseye main
deb-src https://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.6/debian bullseye main
```
騰訊云內網 mariadb.list 源碼:
```conf
# MariaDB 10.6 repository list - created 2021-09-25 14:11 UTC
# http://downloads.mariadb.org/mariadb/repositories/
deb [arch=amd64,arm64,ppc64el] http://mirrors.tencentyun.com/mariadb/repo/10.6/debian bullseye main
deb-src http://mirrors.tencentyun.com/mariadb/repo/10.6/debian bullseye main
```
4. 更新 Debian 源
新加入的 MariaDB 鏡像,必須更新后才能生效
```sh
$ apt update
```
## 安裝 MariaDB
上一步完成以后,接下來安裝 MariaDB 只需 1 條指令
```sh
$ apt install mariadb-server -y
```
## 系統單元管理
系統單元管理 就是 Systemd Unit 管理,是一個相對復雜的指令集,這里不做過多的講解,下面是針對 MariaDB 的內容:
### 安裝信息解讀
安裝 MariaDB 區間出現了 3 段有意思的內容
1. 提示 MariaDB 配置文件路徑
```text
正在設置 mariadb-common (1:10.6.4+maria~bullseye) ...
update-alternatives: 錯誤: 無 my.cnf 的候選項
update-alternatives: 使用 /etc/mysql/mariadb.cnf 來在自動模式中提供 /etc/mysql/my.cnf (my.cnf)
```
2. rsync 系統單元管理
```text
正在設置 rsync (3.2.3-4) ...
Created symlink /etc/systemd/system/multi-user.target.wants/rsync.service → /lib/systemd/system/rsync.service.
```
- 將 rsync 加入到系統單元的 multi-user.target 組
- 創建硬鏈接到 system 目錄,以支持開機啟動
> 提示:rsync 是 linux 系統下的數據鏡像備份工具,是 MariaDB 的依賴項,會自動安裝, 通常 phper 不需要了解
3. MariaDB 系統單元管理
```text
正在設置 mariadb-server-10.6 (1:10.6.4+maria~bullseye) ...
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /lib/systemd/system/mariadb.service.
mariadb-extra.socket is a disabled or a static unit, not starting it.
mariadb-extra.socket is a disabled or a static unit, not starting it.
```
- 將 mariadb 加入到系統單元的 multi-user.target 組
- 創建硬鏈接到 system 目錄,以支持開機啟動
> 提示:使用 systemctl daemon-reload 重載 Systemd 配置,即可使用 Systemd 來控制 MariaDB
### MariaDB 系統單元文件
安裝好 MariaDB 以后,自動創建的 [系統單元文件](./service/mariadb.service.md)
MariaDB 操作指令:
1. 啟動: systemctl start mariadb
2. 關閉: systemctl stop mariadb
3. 重啟: systemctl restart mariadb
4. 狀態: systemctl status mariadb
## 配置 MariaDB
修改配置文件,讓 MariaDB 更加容易管理和操作,具體如下:
### 配置文件路徑
1. MariaDB 主配置文件
MariaDB 服務器端的主配置文件只有 1 個,路徑為:/etc/mysql/my.cnf
/etc/mysql/my.cnf 是 /etc/alternatives/my.cnf 的軟鏈接
/etc/alternatives/my.cnf 又是 /etc/mysql/mariadb.cnf 的軟鏈接
> 提示:所以修改和備份主配置文件,都應該在 /etc/mysql/mariadb.cnf 文件上下工夫
2. MariaDB 子配置文件
以下兩個目錄中的所有 `.cnf` 格式文件,為 MariaDB 的子配置文件
```text
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
```
3. MariaDB 修改配置文件
我們主要修改 [50-server.cnf](./mariadb/50-server.cnf) 配置文件簡單修改 [mariadb.cnf]配置文件
### MariaDB 選項組說明
點擊查詢 [選項組詳情](https://mariadb.com/kb/en/configuring-mariadb-with-option-files/)
1. [client-server]
MariaDB 客戶端和服務器端都能讀取的選項,這對于套接字和端口等選項很有用,如:
```conf
[client-server]
port = 3306
socket = /server/run/mariadb/mariadb.sock
```
### 查看各選項組配置情況
查看 MariaDB 服務器端選項組配置情況:
```sh
$ mariadbd --help --verbose
$ mysqld --help --verbose
```
查看 MariaDB 客戶端選項組配置情況:
```sh
$ mariadb --help --verbose
$ mysql --help --verbose
```
### 停止 MariaDB 服務
操作前,請先停止 MariaDB 服務
```sh
$ service mariadb stop
# 或者
$ systemctl stop mariadb
```
### 修改配置文件
1. 主配置文件
路徑: /etc/mysql/mariadb.cnf
參考: [mariadb.cnf](./mariadb/mariadb.cnf.md)
說明: 按需修改,本次沒有修改
2. MariaDB 服務端子配置文件
路徑: /etc/mysql/mariadb.conf.d/50-server.cnf
參考: [50-server.cnf](./mariadb/50-server.cnf.md)
說明: 本次做了修改
3. 先備份再修改
```sh
$ cp /etc/mysql/mariadb.cnf{,.bak}
$ cp /etc/mysql/mariadb.conf.d/50-server.cnf{,.bak}
```
### 配置文件參考說明
1. MariaDB [配置文件](https://mariadb.com/kb/en/configuring-mariadb-with-option-files/) 官方說明
2. MariaDB 配置文件 [日志選項](https://mariadb.com/kb/en/server-monitoring-logs/) 官方說明
3. MariaDB 配置文件 [服務器端選項](https://mariadb.com/kb/en/mysqld-options/) 官方說明
4. MariaDB 配置文件 [系統變量選項](https://mariadb.com/kb/en/server-system-variables/) 官方說明
5. MariaDB 配置文件 [客戶端選項](https://mariadb.com/kb/en/clients-utilities/) 官方說明
## 初始化 data 目錄
MariaDB 使用 mysql_install_db 來初始化 data 目錄數據
詳情請查看 [mysql_install_db](https://mariadb.com/kb/en/mysql_install_db/) 官方說明
### 創建必要目錄
創建必要目錄,并
1. MariaDB 數據庫存放目錄
```sh
$ mkdir -p /server/data /server/logs/mariadb /server/run/mariadb
```
2. 設置用戶權限為 MariaDB 用戶
```sh
$ chown mysql /server/data/ /server/logs/mariadb/ /server/run/mariadb/
```
### 執行 mysql_install_db
```sh
$ mysql_install_db --user=mysql \
--auth-root-authentication-method=socket \
--auth-root-socket-user=mysql \
--datadir=/server/data \
--skip-test-db
```
### 允許客戶端遠程連接
默認情況下 MariaDB 只能通過 shell 終端或本地客戶端管理數據,為了方便管理我們需要開啟遠程管理(開啟遠程是有風險的)
1. 修改 MariaDB 配置文件里的 bind_address 參數即可:
bind_address 只有 2 個參數值:
```text
- 參數值:0.0.0.0
- 說明:MariaDB 對所有 IP 客戶端開放
```
```text
- 參數值:127.0.0.1
- 說明:MariaDB 只對本地客戶端開放
```
> 注意:bind_address 無論怎么設置,shell 終端都可以登陸 MariaDB,兩者無關!
2. 創建允許本地客戶端登陸的超級管理員用戶
```sh
$ service mariadb start
$ mysql
MariaDB [(none)]> create user emad@localhost identified by '123';
MariaDB [(none)]> grant all privileges on *.* to emad@localhost WITH GRANT OPTION;
MariaDB [(none)]> flush privileges;
```
> 說明:默認 root@localhost 只允許 linux 的 root 用戶登陸
3. 創建允許遠程客戶端登陸的超級管理員用戶
```sh
$ service mariadb start
$ mysql
MariaDB [(none)]> create user emad@'192.168.%.%' identified by '123';
MariaDB [(none)]> grant all privileges on *.* to 'emad'@'192.168.%.%' WITH GRANT OPTION;
MariaDB [(none)]> flush privileges;
```
4. 修改用戶密碼
```sh
$ mysql
MariaDB [(none)]> ALTER USER emad@localhost IDENTIFIED BY '321';
MariaDB [(none)]> flush privileges;
```
5. 刪除用戶
```sh
$ mysql
MariaDB [(none)]> DROP USER emad@localhost;
```
6. 授予超級管理員權限
```sh
$ mysql
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* to emad@localhost WITH GRANT OPTION;
```
7. 用戶重命名
支持多個用戶同時重命名
```sh
$ mysql
MariaDB [(none)]> RENAME USER 'emad'@'192.168.%.%' TO 'admin'@'192.168.10.%', 'emad'@'localhost' TO 'admin'@'127.0.0.%';
```
- Nginx 篇
- php 多版本
- 主配置文件
- 靜態站點配置模版
- tp6 站點的模版
- php 單版本
- 主配置文件
- 靜態站點配置模版
- tp6 站點的模版
- 靜態文件啟用壓縮
- 限制請求-http 塊
- 限制請求-server 塊
- 緩存配置文件
- tp6 站點的 fastcgi 模版
- MariaDB 篇
- MariaDB 主配置文件
- MariaDB 服務端子配置文件
- MariaDB 密鑰
- redis 篇
- sqlite3 篇
- php
- PHP 單版本篇
- PHP 多版本篇(new)
- php-fpm 主配置文件(php 單版本)
- php-fpm 工作池配置文件(php 單版本)
- '8.0(php 多版本)'
- php-fpm 主配置文件
- php-fpm 工作池進程配置文件
- '8.1(php 多版本)'
- php-fpm 主配置文件
- php-fpm 工作池進程配置文件
- service
- Nginx 系統單元文件
- MariaDB 系統單元文件
- redis 系統單元文件
- php-fpm 系統單元文件(php 單版本)
- phpfpm-8.0 系統單元文件(php 多版本)
- phpfpm-8.1 系統單元文件(php 多版本)
- vsftpd 篇
- pam-mysql 配置文件
- vsftpd 配置文件
- sh
- 刪除 lnmp 目錄腳本
- 創建 lnmp 目錄腳本
- 解壓 lnmp 安裝包腳本