MariaDB: Show error if an unsupported server version is used #2381
Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
parent
3d3b1f10c4
commit
ff8bc9f5da
6
Makefile
6
Makefile
|
@ -429,6 +429,12 @@ start-local:
|
||||||
docker-compose -f docker-compose.local.yml up -d
|
docker-compose -f docker-compose.local.yml up -d
|
||||||
stop-local:
|
stop-local:
|
||||||
docker-compose -f docker-compose.local.yml stop
|
docker-compose -f docker-compose.local.yml stop
|
||||||
|
start-mysql:
|
||||||
|
docker-compose -f docker-compose.mysql.yml up -d mysql
|
||||||
|
stop-mysql:
|
||||||
|
docker-compose -f docker-compose.mysql.yml stop mysql
|
||||||
|
logs-mysql:
|
||||||
|
docker-compose -f docker-compose.mysql.yml logs -f mysql
|
||||||
docker-local: docker-local-bookworm
|
docker-local: docker-local-bookworm
|
||||||
docker-local-all: docker-local-bookworm docker-local-bullseye docker-local-buster docker-local-jammy
|
docker-local-all: docker-local-bookworm docker-local-bullseye docker-local-buster docker-local-jammy
|
||||||
docker-local-bookworm:
|
docker-local-bookworm:
|
||||||
|
|
|
@ -101,21 +101,6 @@ services:
|
||||||
MYSQL_PASSWORD: "photoprism"
|
MYSQL_PASSWORD: "photoprism"
|
||||||
MYSQL_ROOT_PASSWORD: "photoprism"
|
MYSQL_ROOT_PASSWORD: "photoprism"
|
||||||
|
|
||||||
## MySQL 8 Database Server
|
|
||||||
## Docs: https://dev.mysql.com/doc/refman/8.0/en/
|
|
||||||
mysql:
|
|
||||||
image: mysql:8
|
|
||||||
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
|
|
||||||
expose:
|
|
||||||
- "4001" # database port (internal)
|
|
||||||
volumes:
|
|
||||||
- "./scripts/sql/mariadb-init.sql:/docker-entrypoint-initdb.d/init.sql"
|
|
||||||
environment:
|
|
||||||
MYSQL_DATABASE: "photoprism"
|
|
||||||
MYSQL_USER: "photoprism"
|
|
||||||
MYSQL_PASSWORD: "photoprism"
|
|
||||||
MYSQL_ROOT_PASSWORD: "photoprism"
|
|
||||||
|
|
||||||
## Join shared "photoprism-develop" network
|
## Join shared "photoprism-develop" network
|
||||||
networks:
|
networks:
|
||||||
default:
|
default:
|
||||||
|
|
22
docker-compose.mysql.yml
Normal file
22
docker-compose.mysql.yml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
version: '3.5'
|
||||||
|
|
||||||
|
# MySQL versions for testing compatibility
|
||||||
|
services:
|
||||||
|
## MySQL 8 Database Server
|
||||||
|
## Docs: https://dev.mysql.com/doc/refman/8.0/en/
|
||||||
|
mysql:
|
||||||
|
image: mysql:8
|
||||||
|
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
|
||||||
|
expose:
|
||||||
|
- "4001" # database port (internal)
|
||||||
|
environment:
|
||||||
|
MYSQL_DATABASE: "photoprism"
|
||||||
|
MYSQL_USER: "photoprism"
|
||||||
|
MYSQL_PASSWORD: "photoprism"
|
||||||
|
MYSQL_ROOT_PASSWORD: "photoprism"
|
||||||
|
|
||||||
|
## Join shared "photoprism-develop" network
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: photoprism-develop
|
||||||
|
external: true
|
|
@ -10,14 +10,14 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/photoprism/photoprism/pkg/clean"
|
|
||||||
|
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
_ "github.com/jinzhu/gorm/dialects/mysql"
|
_ "github.com/jinzhu/gorm/dialects/mysql"
|
||||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||||
|
|
||||||
"github.com/photoprism/photoprism/internal/entity"
|
"github.com/photoprism/photoprism/internal/entity"
|
||||||
"github.com/photoprism/photoprism/internal/mutex"
|
"github.com/photoprism/photoprism/internal/mutex"
|
||||||
|
"github.com/photoprism/photoprism/pkg/clean"
|
||||||
|
"github.com/photoprism/photoprism/pkg/txt"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SQL Databases.
|
// SQL Databases.
|
||||||
|
@ -307,9 +307,11 @@ func (c *Config) InitTestDb() {
|
||||||
|
|
||||||
// connectDb establishes a database connection.
|
// connectDb establishes a database connection.
|
||||||
func (c *Config) connectDb() error {
|
func (c *Config) connectDb() error {
|
||||||
|
// Make sure this is not running twice.
|
||||||
mutex.Db.Lock()
|
mutex.Db.Lock()
|
||||||
defer mutex.Db.Unlock()
|
defer mutex.Db.Unlock()
|
||||||
|
|
||||||
|
// Get database driver and data source name.
|
||||||
dbDriver := c.DatabaseDriver()
|
dbDriver := c.DatabaseDriver()
|
||||||
dbDsn := c.DatabaseDsn()
|
dbDsn := c.DatabaseDsn()
|
||||||
|
|
||||||
|
@ -321,6 +323,7 @@ func (c *Config) connectDb() error {
|
||||||
return errors.New("config: database DSN not specified")
|
return errors.New("config: database DSN not specified")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Open database connection.
|
||||||
db, err := gorm.Open(dbDriver, dbDsn)
|
db, err := gorm.Open(dbDriver, dbDsn)
|
||||||
if err != nil || db == nil {
|
if err != nil || db == nil {
|
||||||
for i := 1; i <= 12; i++ {
|
for i := 1; i <= 12; i++ {
|
||||||
|
@ -338,12 +341,33 @@ func (c *Config) connectDb() error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Configure database logging.
|
||||||
db.LogMode(false)
|
db.LogMode(false)
|
||||||
db.SetLogger(log)
|
db.SetLogger(log)
|
||||||
|
|
||||||
|
// Set database connection parameters.
|
||||||
db.DB().SetMaxOpenConns(c.DatabaseConns())
|
db.DB().SetMaxOpenConns(c.DatabaseConns())
|
||||||
db.DB().SetMaxIdleConns(c.DatabaseConnsIdle())
|
db.DB().SetMaxIdleConns(c.DatabaseConnsIdle())
|
||||||
db.DB().SetConnMaxLifetime(10 * time.Minute)
|
db.DB().SetConnMaxLifetime(time.Hour)
|
||||||
|
|
||||||
|
// Check database server version.
|
||||||
|
switch dbDriver {
|
||||||
|
case MySQL:
|
||||||
|
type Res struct {
|
||||||
|
Value string `gorm:"column:Value;"`
|
||||||
|
}
|
||||||
|
var res Res
|
||||||
|
if err = db.Raw("SHOW VARIABLES LIKE 'innodb_version'").Scan(&res).Error; err != nil {
|
||||||
|
return err
|
||||||
|
} else if v := strings.Split(res.Value, "."); len(v) < 3 {
|
||||||
|
log.Warnf("config: unknown database server version")
|
||||||
|
} else if major := txt.UInt(v[0]); major < 10 {
|
||||||
|
err = fmt.Errorf("config: MySQL %s is not supported, please upgrade to MariaDB 10.5.12 or later (https://docs.photoprism.app/getting-started/#databases)", res.Value)
|
||||||
|
return err
|
||||||
|
} else if txt.UInt(v[1]) <= 5 && txt.UInt(v[2]) <= 12 {
|
||||||
|
log.Errorf("config: MariaDB %s is not supported, please upgrade to MariaDB 10.5.12 or later (https://docs.photoprism.app/getting-started/#databases)", res.Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c.db = db
|
c.db = db
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue