Open guqing opened 1 year ago
我的 MySQL 数据库 3306 端口已经被占用了 本项目修改端口还不能部署成功,有什么解决办法么
我的 MySQL 数据库 3306 端口已经被占用了 本项目修改端口还不能部署成功,有什么解决办法么
尝试使用下面的 docker-compose.yaml ,此配置基于官方文档提供的配置并去掉了 halodb 中的 ports: - "3306:3306"
配置,参考文档 https://docs.halo.run/getting-started/install/docker-compose
version: "3"
services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
- --spring.r2dbc.username=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=o#DwN&JSa56
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
halodb:
image: mysql:8.0.31
container_name: halodb
restart: on-failure:3
networks:
halo_network:
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
- MYSQL_ROOT_PASSWORD=o#DwN&JSa56
- MYSQL_DATABASE=halo
networks:
halo_network:
当h2数据库的数据中含有区分大小写的数据例如:
则在利用后台备份后,在MySQL的halo中会恢复也会失败。
What is version of Halo has the issue?
2.8.0
What database are you using?
MySQL 8.x
What is your deployment method?
Docker
Your site address.
No response
What happened?
当我在 Halo 中使用 MySQL 作为数据库时发现登陆时我的用户名为 guqing 但我使用 GUQING 能登陆只是权限不正确。
经过测试发现
能查询出
name='/registry/users/Ghost'
的数据,排除了数据库驱动的影响,因为 halo 使用的是 r2dbc 的驱动而我查询使用的是官方驱动。MySQL默认情况下是大小写不敏感的,这意味着在执行查询时,MySQL会忽略查询条件中的大小写差异。这种行为是由 MySQL 的默认字符集和校对规则所决定的。
在MySQL中,字符集和校对规则是用来确定如何比较和排序字符串的规则。如果使用的字符集和校对规则是不区分大小写的,那么在执行查询时,MySQL会将查询条件中的所有字符串都转换为相同的大小写形式,然后再进行比较。
而我希望查询中区分大小写,可以使用 BINARY 运算符来强制 MySQL 对字符串进行区分大小写的比较。例如,您可以使用以下查询来查询name字段值为
/registry/users/Ghost
的数据,而不会匹配到name
字段值为/registry/users/ghost
的数据:这将强制 MySQL 对 name 字段进行区分大小写的比较,只返回 name 字段值为
/registry/users/Ghost
的数据。Relevant log output
Additional information
No response