数据库
# mysql数据库
services:
mysql:
image: mysql:latest
container_name: mysql
restart: always
ports:
- 3306:3306
volumes:
- ./log:/var/log/mysql # 映射日志目录
- ./data:/var/lib/mysql # 映射数据目录
environment:
- MYSQL_ROOT_PASSWORD=mysql123456 # root用户密码
- TZ=Asia/Shanghai # 设置容器时区,也可以挂载通过/etc/localtime:/etc/localtime:ro
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 连接数据库
连接命令:mysql -u 用户名 -p -h 远程主机IP -P 端口号
注意:-p(小写)表示的是密码,-P(大写)表示的是端口
# 用默认root 用户连接
mysql -u root -p
# 连接 192.168.31.15 上端口为13306的 test_db 数据库,用户名 test_user
mysql -u test_user -p -h 192.168.31.15 -P 13306 -D test_db
1
2
3
4
5
6
2
3
4
5
6
连接类参数:用于指定连接的用户、主机、端口、密码等核心信息,是使用mysql命令的基础。
| 短参数 | 长参数 | 说明 | 示例 |
|---|---|---|---|
| -u | --user=用户名 | 指定连接MySQL的用户名 | mysql -u root mysql --user=root |
| -p | --password[=密码] | 指定密码(推荐不加密码,回车后输入更安全) | 安全写法回车输密码:mysql -u root -p 不推荐密码明文暴露: mysql -u root -p123456 |
| -h | --host=主机IP | 指定连接的 MySQL 服务器地址(本地默认 127.0.0.1) | 远程连接:mysql -u test -p -h 192.168.1.100 |
| -P | --port=端口号 | 指定 MySQL 服务的端口(默认3306) | 连接 3307 端口: mysql -u root -p -P 3307 |
| -D | --database=库名 | 连接后直接切换到指定数据库(无需再执行USE) | 连接后直接进入 test_db 库: mysql -u root -p -D test_db |
| --protocol=协议 | 指定连接协议(tcp/udp/socket 等) | 强制 TCP 连接: mysql -u root -p --protocol=tcp |
连接成功后的基础操作:
# 查看 MySQL 系统状态(版本、连接数等)
STATUS;
\s
# 查看当前 bind_address 配置,如果只为127.0.0.1表示仅允许本地回环连接,远程主机无法访问
SHOW VARIABLES LIKE 'bind_address';
# 查看当前连接的数据库,若返回 NULL,说明未选中任何库,需执行 USE 数据库名 切换
SELECT DATABASE();
# 列出所有用户
SELECT user, host FROM mysql.user;
# 列出所有数据库
SHOW DATABASES;
# 列出当前库的所有表
SHOW TABLES;
# 切换数据库
USE 库名;
\u 数据库名
# 查看表结构(字段 / 类型 / 约束)
DESC 表名;
DESCRIBE 表名;
# 退出 MySQL 交互界面
\q
exit
quit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# pgsql数据库
services:
pgsql:
image: postgres:17-alpine
container_name: pgsql
restart: unless-stopped
network_mode: bridge
ports:
- 5432:5432
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres # 默认管理员用户
POSTGRES_PASSWORD: postgres1234 # 默认管理员用户密码
POSTGRESQL_WAL_COMPRESSION: lz4 # WAL 日志的压缩方式设置为 lz4
POSTGRESQL_MAX_CONNECTIONS: 2048 # 数据库允许的最大连接数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# psql
psql 是 PostgreSQL(PG)官方自带的命令行交互式客户端工具。
常见参数:
| 参数 | 全称 | 作用 |
|---|---|---|
| -U <用户名> | User | 指定连接 PG 的用户名(默认系统当前用户名) |
| -h <地址> | Host | 指定 PG 服务器地址(默认 127.0.0.1) |
| -p <端口> | Port | 指定 PG 端口(默认 5432) |
| -d <库名> | Database | 指定要连接的数据库名,不指定会默认尝试连接和「当前登录用户名同名」的数据库 |
| -c | Command | 非交互执行指定 SQL 语句,执行后立即退出(适合脚本) |
| -f <文件> | File | 执行指定 SQL 文件中的所有语句(常用于导入备份、执行脚本) |
| -V | Version | 查看 psql 版本 |
# 连接数据库
连接命令:psql -U 用户名 -h 地址 -p 端口 -d 数据库名
# 用默认 postgres 用户连接默认 postgres 数据库
psql -U postgres
# 连接 192.168.31.15 上端口为15432的 newapi 数据库,用户名 postgres
psql -U postgres -h 192.168.31.15 -p 15432 -d newapi
1
2
3
4
5
2
3
4
5
连接成功后的基础操作:
# 查看当前连接的数据库
SELECT current_database();
# 列出所有用户
\du
SELECT usename FROM pg_user;
# 列出所有数据库
\l
SELECT datname FROM pg_database;
# 列出当前库的所有表
\dt
SELECT tablename FROM pg_tables;
# 切换数据库
\c 数据库名
# 查看表结构(字段 / 类型 / 约束)
\d 表名
# 退出 psql 交互界面
\q
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 创建数据库用户
# 创建名为 testdbuser 的数据库用户,并设置密码为 test888。
psql -U postgres -c "create user testdbuser with login password 'test888';"
1
2
2
# 创建数据库
创建名为 testdb、所有者为 testdbuser 的数据库。
# 用sql语句
create database testdb owner testdbuser;
# 用 createdb:-O 指定所有者,testdb 是数据库名,-U 指定执行创建的管理员账号
createdb -U postgres -h 192.168.1.100 -p 5432 -O testdbuser testdb
1
2
3
4
5
2
3
4
5
注意:createdb 只能创建数据库,无法创建用户,所以用户仍需通过 psql 执行 SQL 语句创建。
# 数据导出
pg_dump:PostgreSQL 自带的备份工具,专门用来导出数据库的结构/数据。最小有效命令:pg_dump -U 用户名 -d 数据库名 -f 备份文件路径
# 导出所有数据库结构 + 数据
pg_dump -U postgres -d 库名 -f xxxx.sql
# 只导出数据
pg_dump -U postgres -d 库名 --data-only -f xxxx.sql
1
2
3
4
5
2
3
4
5
| 参数 | 作用 |
|---|---|
| -U | 指定数据库用户名 |
| -d | 指定数据库名,必填 |
| -f | 指定导出文件名 |
| -h | 指定数据库服务器地址(默认本地 127.0.0.1) |
| -p | 指定数据库端口(默认 5432),端口修改过必用 |
| -t | 表名。只导出指定单张表的结构 + 数据,避免全库导出) |
| -n | 模式名。导出指定 Schema(PG 的逻辑分组,默认 public)的内容 |
| -c | 导出的 SQL 中添加「先删除表 / 数据」的语句(导入时自动清理旧数据) |
| -C | 导出的 SQL 中添加「创建数据库」的语句(导入时无需提前建库) |
| -F c | 导出为二进制格式(比 SQL 小、导入更快,后缀建议 .dump) |
| --data-only | 只导出数据(不含结构) |
| --schema-only | 只导出表结构(不含数据) |
# 数据导入
注意:
- 只有用
pg_dump -F c/-F t/-F d导出的备份,才能用 pg_restore 恢复;纯 SQL 文件只能用 psql 导入;
- pg_restore是PostgreSQL 自带的恢复工具,专门用于恢复由 pg_dump 以「非纯文本格式」(如自定义格式、tar 格式、目录格式)导出的备份文件。
- 导入前需确保目标数据库已创建(比如
testdb需先执行psql -U admin -c "CREATE DATABASE testdb;");
# SQL 文件
psql -U admin -h 127.0.0.1 -p 5432 -d testdb -f /tmp/testdb_full.sql
# 导入二进制备份文件
pg_restore -U admin -d testdb -v /tmp/testdb.dump
1
2
3
4
5
6
2
3
4
5
6
# redis缓存
services:
redis:
image: redis:latest
container_name: redis
restart: always
ports:
- 6379:6379
volumes:
- ./data:/data
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
上次更新: 2026/01/29, 14:01:53