Ubuntu 22.04 安装 mysql-server、postgreSQL 及 neo4j 图数据库服务端(docker版)
【代码】Ubuntu 22.04 安装 mysql-server服务端。
·
安装docker参考:Ubuntu 安装 docker 配置环境及其常用命令
一、Mysql 安装
1.1、物理机部署
安装Mysql
sudo apt-get update
sudo apt-get install mysql-server
sudo service mysql start
初始化mysql服务,并登录账户
mysql -u root
创建账户,以本地的方式访问
CREATE USER 'gpt'@'localhost' IDENTIFIED BY 'gpt';
给账户赋于所有的本地操作的权限
GRANT ALL PRIVILEGES ON *.* TO 'gpt'@'localhost';
FLUSH PRIVILEGES;
创建数据库
create database langgraph;
1.2、使用docker部署
整个过程分为三步:
- 创建 my.cnf 文件
- 创建 init.sql 文件
- 创建 docker-compose.yml 文件后启动。 整个过程需要注意本地待挂载 文件/文件夹 读写权限问题。
第一步: 首先先创建一个 my.cnf 文件,文件的内容见下文,该文件主要用于挂载mysql容器的设置
my.cnf文件内容
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 设置东八区时区
default-time_zone = '+8:00'
# 设置密码验证规则,保持兼容性
authentication_policy=mysql_native_password
# 初始化连接时设置字符集
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
# 配置字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
skip-name-resolve
# 配置数据库表名小写(跨平台建议打开)
# lower_case_table_names=1
# 远程访问相关配置
# 设置监听所有网络接口,允许远程连接
bind-address = 0.0.0.0
# # 关闭主机名解析(提高连接速度)
# skip-name-resolve
# # 调整最大连接数(可根据需求修改)
# max_connections = 600
第二步: 设置自定义账户的权限
- 当前目录下创建一个文件,命名为
init.sql,内容如下,在docker-compose.yml的volumes中挂载到/docker-entrypoint-initdb.d/目录下 - 在 Docker 官方的 MySQL 镜像中,提供了一个非常方便的机制:任何挂载到
/docker-entrypoint-initdb.d/目录下的.sql或.sh脚本,都会在数据库第一次初始化(即数据目录为空时)自动执行。
-- 创建本地权限 gpt 用户, 123456 是密码,需要和下文 yml 对应
CREATE USER IF NOT EXISTS 'gpt'@'localhost' IDENTIFIED BY '123456';
-- 授权本地权限
GRANT ALL PRIVILEGES ON *.* TO 'gpt'@'localhost' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
第三步:创建一个docker-compose.yml 文件
docker-compose.yml 文件
services:
mysql:
image: mysql:8.0.41
container_name: mysql
restart: on-failure:5 # 防止有意停止时重启, 最多启动5次
environment:
LOWER_CASE_TABLE_NAMES: 1
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456} # root 用户如果开启远程访问,密码需要设置复杂一些,如果宿主机环境变量不存在,使用 123456 作为默认值
MYSQL_DATABASE: Database_test # 创建一个数据库
MYSQL_USER: gpt
MYSQL_PASSWORD: 123456
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql # 挂载mysql 数据卷
- mysql_log:/var/log/mysql # 挂在mysql 日志卷
- /etc/localtime:/etc/localtime:ro # 挂载当前服务器时间到容器
- ./my.cnf:/etc/mysql/my.cnf # 自定义MySQL配置用于安全/性能
- ./init.sql:/docker-entrypoint-initdb.d/init.sql # 初始化数据库脚本, 给定 gpt 用户权限
networks:
- app_network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-123456}"] #
interval: 10s
timeout: 5s
retries: 5
# # 资源限制配置(Docker Swarm 模式下生效)
# deploy:
# resources:
# limits:
# cpus: "1.0"
# memory: 2G
# reservations:
# cpus: "0.5"
# memory: 512M
# 资源限制 (生产单机版), docker-compose 单机生效
mem_limit: 2g # 容器最大内存
cpus: 1.0 # 限制 CPU 使用量
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
mysql_log:
name: mysql8.0.41_log
mysql_data:
name: mysql8.0.41_data
networks:
app_network:
driver: bridge
- 运行
docker-compose up -d
- 查看
docker ps -a

- 验证
gpt用户权限
进入docker容器内部并登录mysql, 查看自定义gpt用户的远程与本地权限
#进入容器内部
docker exec -it 容器名 /bin/bash
#登录mysql,不要输入密码,两次按两次回车键即可
mysql -u root -p
mysql>
验证:查看所有的用户, % 表示远程 localhost 表示本地,两者皆有表示即可以远程又可以本地
mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| gpt | % | <-- 允许账户gpt从任何主机连接
| root | % |
| gpt | localhost | <-- 允许账户gpt从本地连接
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
然后退出并重启容器即可
二、PostgreSQL 安装
2.1、使用docker 临时部署
docker run -d --rm -p 5432:5432 --name postgres_test -v /etc/localtime:/etc/localtime:ro -e POSTGRES_PASSWORD=123456 postgres:16.9
2.2、 使用docker-compose部署
services:
pg:
image: postgres:16.9
container_name: pg
restart: on-failure:5 # 防止有意停止时重启, 最多启动5次
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-123456}
POSTGRES_DB: Database_test # 创建一个数据库
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data # 挂载数据
- /etc/localtime:/etc/localtime:ro
# 挂载 postgresql.conf 按需放开,否则建议不用专门定制
# - ./postgresql.conf:/etc/postgresql/postgresql.conf
# 如需初始化脚本,用下面方式
# - ./init.sql:/docker-entrypoint-initdb.d/init.sql
# - pg_log:/var/log/postgresql # PostgreSQL 默认不使用该目录保存日志,需要在上述 .conf 定义好再使用
networks:
- pg_network
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"] # 使用超级管理员 postgres 用户健康检测
interval: 10s
timeout: 5s
retries: 5
# # 资源限制配置(Docker Swarm 模式下生效)
# deploy:
# resources:
# limits:
# cpus: "1.0"
# memory: 2G
# reservations:
# cpus: "0.5"
# memory: 512M
# 资源限制 (生产单机版), docker-compose 单机生效
mem_limit: 2g # 容器最大内存
cpus: 1.0 # 限制 CPU 使用量
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
pg_data:
name: postgres16_data
# pg_log:
# name: postgres16_log
networks:
pg_network:
driver: bridge
# 运行
docker-compose up -d

三、Neo4j图数据库安装
3.1、docker 临时部署
临时是启动 neo4j 图数据库服务端
- 7474 for http 协议可视化web服务
- 7473 for https 协议
- 7687 for bolt 远程连接 neo4j 数据库服务端
docker run --rm -d -p 7474:7474 -p 7687:7687 --name neo4j -e NEO4J_AUTH=neo4j/123456 neo4j:4.4-community
挂载一些目录(需要提前创建这些目录,并且利用上述临时启动的容器,将一些目录copy到宿主机上
docker run --rm -d -p 7474:7474 -p 7687:7687 --name neo4j \
-e NEO4J_AUTH=neo4j/123456 \
-v ./data:/data \
-v ./logs:/logs \
-v ./conf:/var/lib/neo4j/conf \
-v ./import:/var/lib/neo4j/import \
neo4j:4.4-community
3.2、docker-compose部署
services:
neo4j:
image: neo4j:4.4-community
container_name: neo4j
restart: on-failure:5 # 防止有意停止时重启, 最多启动5次
environment:
NEO4J_AUTH: ${NEO4J_AUTH:-neo4j/123456} # 用环境变量支持自定义账户密码,默认 neo4j/123456, 若公网远程提供服务需设置更加复杂的密码
# 启用APOC插件
NEO4J_PLUGINS: '["apoc"]'
# 允许APOC程序
NEO4J_dbms_security_procedures_unrestricted: "apoc.*"
NEO4J_dbms_security_procedures_allowlist: "apoc.*"
# 由于可能要下载 apoc 插件,需要挂载代理服务器(需要改成自己的)
HTTPS_PROXY: http://192.168.1.3:7892
HTTP_PROXY: http://192.168.1.3:7892
http_proxy: http://192.168.1.3:7892
https_proxy: http://192.168.1.3:7892
# 如需自定义更多参数,可按需增添
ports:
- "7474:7474" # HTTP 协议可视化web服务
- "7473:7473" # HTTPS 协议可视化web服务
- "7687:7687" # Bolt 远程连接 neo4j 数据库服务端
volumes:
- /etc/localtime:/etc/localtime:ro # 挂载系统时间
- neo4j_data:/data # 挂载数据卷
- neo4j_logs:/logs # 挂载日志卷
- neo4j_conf:/var/lib/neo4j/conf
- neo4j_import:/var/lib/neo4j/import
- neo4j_plugins:/var/lib/neo4j/plugins # 挂载插件卷
networks:
- neo4j_network
healthcheck:
# 检查服务健康,查看bolt 健康情况
test: ["CMD-SHELL", "bash -c '</dev/tcp/localhost/7687'"]
interval: 15s
timeout: 10s
retries: 5
# # 资源限制配置(Docker Swarm 模式下生效)
# deploy:
# resources:
# limits:
# cpus: "1.0"
# memory: 2G
# reservations:
# cpus: "0.5"
# memory: 512M
# 资源限制 (生产单机版), docker-compose 单机生效
mem_limit: 2g # 容器最大内存
cpus: 1.0 # 限制 CPU 使用量
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
neo4j_data:
name: neo4j4.4_data
neo4j_logs:
name: neo4j4.4_logs
neo4j_conf:
name: neo4j4.4_conf
neo4j_import:
name: neo4j4.4_import
neo4j_plugins:
name: neo4j4.4_plugins
networks:
neo4j_network:
driver: bridge
运行
docker-compose up -d
查看日志
docker-compose logs -f

web 访问 neo4j,本地浏览器打开 127.0.0.1:7474
更多推荐
所有评论(0)