# 数据库管理

## Postgresql
### 安装
Ubuntu 默认支持，直接使用以下命令安装
```shell
apt install postgresql
```
- 详细教程可参考 [Postgresql安装教程](https://www.postgresql.org/download/linux/ubuntu/)

### 配置
#### 开放访问
- 查找配置文件位置
```shell
su postgres
psql
postgres=# SHOW config_file;
```
- 编辑 `postgresql.conf`
```shell
vi postgresql.conf
```
```properties
# 修改 listen_addresses 为 *
listen_addresses = '*'
```
- 编辑 `pg_hba.conf`
```properties
# 在文件末尾增加一行
host    all             all             0.0.0.0/0               md5
```
- 重启服务
```shell
sudo systemctl restart postgresql
# 或者在某些系统上可能是
sudo service postgresql restart
```

#### 创建用户和数据库
- 进入 `postgres`
```shell
su postgres
```
- 配置
```sql
# 采用命令行工具登陆 PostgreSQL
psql

# 创建数据库
postgres=# CREATE DATABASE dolphinscheduler;
# 修改 {user} 和 {password} 为你希望的用户名和密码
postgres=# CREATE USER {user} PASSWORD {password};
postgres=# ALTER DATABASE dolphinscheduler OWNER TO {user};
# 退出 PostgreSQL
postgres=# \q
```
- 配置开放访问（可选：开放访问步骤已经配置）
```shell

# 上面已经配置了，不需要配置
# 在终端执行如下命令，向配置文件新增登陆权限，并重载 PostgreSQL 配置，替换 {ip} 为对应的 DS 集群服务器 IP 地址段
echo "host    dolphinscheduler   {user}    {ip}     md5" >> $PGDATA/pg_hba.conf

# 重启服务
sudo systemctl restart postgresql
# 或者在某些系统上可能是
sudo service postgresql restart
```

#### 测试连接
- 配置完毕后，从外部客户端尝试连接，以验证配置是否生效。


## Mysql

### 安装
Ubuntu 默认支持，直接使用以下命令安装
```shell
apt install mysql
```
- 详细教程可参考 [Mysql安装](https://dev.mysql.com/doc/refman/8.4/en/linux-installation-apt-repo.html)

### 配置
#### 开放访问
- 找到并编辑MySQL配置文件
- MySQL默认配置文件通常位于 `/etc/mysql/my.cnf` 或 `/etc/my.cnf`，
  实际需要修改的配置文件可能为 `/etc/mysql/mysql.conf.d/mysqld.cnf`，
  具体路径取决于操作系统和MySQL版本。
- 使用文本编辑器打开配置文件，找到bind-address参数。
```properties
bind-address            = 0.0.0.0
```
- 重启 mysql
```shell
systemctl restart mysql
```
#### 创建用户
- 检查创建用户时密码校验条件。在创建用户前，确认下密码验证规则，一般必须大于等于8位
```sql
#显示创建用户的验证条件
mysql> SHOW VARIABLES LIKE 'validate_password%';
```
- 创建用户
```sql
#创建用户
mysql> CREATE USER '用户名'@'%或者IP' IDENTIFIED BY '密码';

mysql> FLUSH PRIVILEGES;
# 有的文章，在该句末尾加上了with grant option，一般不用写
# 下面一段话引用自：with grant option作用_玉溪人在昌平的博客-CSDN博客
# with grant option的意思是：权限赋予/取消是关联的，
# 如将with grant option用于对象授权时，被授予的用户也可把此对象权限授予其他用户或角色，
# 不同的是但管理员收回用with grant option授权的用户对象权限时，权限会因传播而失效，
# 如grant select on table with grant option to A,A用户把此权限授予B，
# 但管理员收回A的权限时，B的权限也会失效，但管理员不可以直接收回B的SELECT ON TABLE 权限。
```
- 授予权限
```sql
# 授权某个用户所有数据库所有权限
mysql> GRANT ALL PRIVILEGES ON *.* TO "用户名"@"IP/localhost/%";

mysql> FLUSH PRIVILEGES;
```
#### 创建数据库
- mysql 5.6 / 5.7：
```sql
mysql -uroot -p

mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;

## 可选步骤
## 修改 {user} 和 {password} 为你希望的用户名和密码
# mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';
# mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost' IDENTIFIED BY '{password}';

mysql> flush privileges;
```
- 对于mysql 8：
```sql
mysql -uroot -p

mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;

## 可选步骤
## 修改 {user} 和 {password} 为你希望的用户名和密码
# mysql> CREATE USER '{user}'@'%' IDENTIFIED BY '{password}';
# mysql> GRANT ALL PRIVILEGES ON *.* TO '{user}'@'%';
mysql> FLUSH PRIVILEGES;
```


## 参考文档
- [DolphinScheduler数据源配置](https://github.com/apache/dolphinscheduler/blob/3.2.2-release/docs/docs/zh/guide/howto/datasource-setting.md)
- [Mysql创建用户](https://blog.csdn.net/qq_41566366/article/details/121763099)
- [Mysql授权问题](https://blog.csdn.net/weixin_54061333/article/details/117458996)