diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index f6250eacb..3704a1c0d 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -150,7 +150,7 @@ services: security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239 - seccomp:unconfined - apparmor:unconfined - 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 + command: mariadbd --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: diff --git a/docker-compose.mariadb.yml b/docker-compose.mariadb.yml index 1d0841b46..7e4f3472e 100644 --- a/docker-compose.mariadb.yml +++ b/docker-compose.mariadb.yml @@ -4,6 +4,29 @@ version: '3.5' ## Setup: https://docs.photoprism.app/developer-guide/setup/ ## services: + ## MariaDB 11.0 Database Server + ## Docs: https://mariadb.com/docs/reference/ + ## Release Notes: https://mariadb.com/kb/en/mariadb-11-0-0-release-notes/ + mariadb-11-0: + image: mariadb:11.0-rc + security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239 + - seccomp:unconfined + - apparmor:unconfined + command: mariadbd --port=4001 --innodb-strict-mode=1 --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" + ports: + - "4003:4001" # database port (host:container) + volumes: + - "./scripts/sql/mariadb-init.sql:/docker-entrypoint-initdb.d/init.sql" + environment: + MARIADB_AUTO_UPGRADE: "1" + MARIADB_INITDB_SKIP_TZINFO: "1" + MARIADB_DATABASE: "photoprism" + MARIADB_USER: "photoprism" + MARIADB_PASSWORD: "photoprism" + MARIADB_ROOT_PASSWORD: "photoprism" + ## MariaDB 10.8 Database Server ## Docs: https://mariadb.com/kb/en/release-notes-mariadb-108-series/ mariadb-10-8: @@ -11,7 +34,7 @@ services: security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239 - seccomp:unconfined - apparmor:unconfined - 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 + command: mariadbd --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" ports: diff --git a/docker-compose.yml b/docker-compose.yml index 7ce5a0572..e376dd18f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -133,7 +133,7 @@ services: security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239 - seccomp:unconfined - apparmor:unconfined - command: mysqld --port=4001 --innodb-strict-mode=1 --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 + command: mariadbd --port=4001 --innodb-strict-mode=1 --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" ports: diff --git a/internal/commands/backup.go b/internal/commands/backup.go index f628a86cb..116db3b7f 100644 --- a/internal/commands/backup.go +++ b/internal/commands/backup.go @@ -121,7 +121,7 @@ func backupAction(ctx *cli.Context) error { switch conf.DatabaseDriver() { case config.MySQL, config.MariaDB: cmd = exec.Command( - conf.MysqldumpBin(), + conf.MariadbDumpBin(), "--protocol", "tcp", "-h", conf.DatabaseHost(), "-P", conf.DatabasePortString(), diff --git a/internal/commands/restore.go b/internal/commands/restore.go index 5f13e3c4d..eddfbe47c 100644 --- a/internal/commands/restore.go +++ b/internal/commands/restore.go @@ -129,7 +129,7 @@ func restoreAction(ctx *cli.Context) error { switch conf.DatabaseDriver() { case config.MySQL, config.MariaDB: cmd = exec.Command( - conf.MysqlBin(), + conf.MariadbBin(), "--protocol", "tcp", "-h", conf.DatabaseHost(), "-P", conf.DatabasePortString(), diff --git a/internal/config/config_filepaths.go b/internal/config/config_filepaths.go index b4c99efc8..2e455ac47 100644 --- a/internal/config/config_filepaths.go +++ b/internal/config/config_filepaths.go @@ -591,14 +591,14 @@ func (c *Config) TestdataPath() string { return filepath.Join(c.StoragePath(), "testdata") } -// MysqlBin returns the mysql executable file name. -func (c *Config) MysqlBin() string { - return findBin("", "mysql") +// MariadbBin returns the mariadb executable file name. +func (c *Config) MariadbBin() string { + return findBin("", "mariadb") } -// MysqldumpBin returns the mysqldump executable file name. -func (c *Config) MysqldumpBin() string { - return findBin("", "mysqldump") +// MariadbDumpBin returns the mariadb-dump executable file name. +func (c *Config) MariadbDumpBin() string { + return findBin("", "mariadb-dump") } // SqliteBin returns the sqlite executable file name. diff --git a/internal/config/config_filepaths_test.go b/internal/config/config_filepaths_test.go index 10ffc5086..5626ba9e1 100644 --- a/internal/config/config_filepaths_test.go +++ b/internal/config/config_filepaths_test.go @@ -417,14 +417,14 @@ func TestConfig_AssetsPath2(t *testing.T) { } } -func TestConfig_MysqlBin(t *testing.T) { +func TestConfig_MariadbBin(t *testing.T) { c := NewConfig(CliTestContext()) - assert.Contains(t, c.MysqlBin(), "mysql") + assert.Contains(t, c.MariadbBin(), "mariadb") } -func TestConfig_MysqldumpBin(t *testing.T) { +func TestConfig_MariadbDumpBin(t *testing.T) { c := NewConfig(CliTestContext()) - assert.Contains(t, c.MysqldumpBin(), "mysqldump") + assert.Contains(t, c.MariadbDumpBin(), "mariadb-dump") } func TestConfig_SqliteBin(t *testing.T) { diff --git a/internal/config/report.go b/internal/config/report.go index df468e6db..0203b8769 100644 --- a/internal/config/report.go +++ b/internal/config/report.go @@ -175,6 +175,8 @@ func (c *Config) Report() (rows [][]string, cols []string) { {"database-password", strings.Repeat("*", utf8.RuneCountInString(c.DatabasePassword()))}, {"database-conns", fmt.Sprintf("%d", c.DatabaseConns())}, {"database-conns-idle", fmt.Sprintf("%d", c.DatabaseConnsIdle())}, + {"mariadb-bin", c.MariadbBin()}, + {"mariadb-dump-bin", c.MariadbDumpBin()}, // File Converters. {"sips-bin", c.SipsBin()}, diff --git a/internal/entity/schema/README.md b/internal/entity/schema/README.md index eb9a5acc9..f669345bb 100644 --- a/internal/entity/schema/README.md +++ b/internal/entity/schema/README.md @@ -14,7 +14,7 @@ ## MariaDB SQL Dump -The following dump was created by running `mysqldump --no-data --skip-add-locks --skip-comments --skip-opt --skip-set-charset photoprism > mariadb.sql` in a terminal: +The following dump was created by running `mariadb-dump --no-data --skip-add-locks --skip-comments --skip-opt --skip-set-charset photoprism > mariadb.sql` in a terminal: ↪ [mariadb.sql](mariadb.sql) diff --git a/setup/docker/arm64/docker-compose.yml b/setup/docker/arm64/docker-compose.yml index 057f1e6bb..c37b451f3 100644 --- a/setup/docker/arm64/docker-compose.yml +++ b/setup/docker/arm64/docker-compose.yml @@ -115,7 +115,7 @@ services: security_opt: - seccomp:unconfined - apparmor:unconfined - command: mysqld --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 + command: mariadbd --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 ## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder: volumes: - "./database:/var/lib/mysql" # DO NOT REMOVE diff --git a/setup/docker/cloud/docker-compose.yml b/setup/docker/cloud/docker-compose.yml index 187a8b9a3..bb4b6ad44 100644 --- a/setup/docker/cloud/docker-compose.yml +++ b/setup/docker/cloud/docker-compose.yml @@ -198,7 +198,7 @@ services: security_opt: - seccomp:unconfined - apparmor:unconfined - command: mysqld --innodb-buffer-pool-size=512M --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 + command: mariadbd --innodb-buffer-pool-size=512M --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 ## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder: volumes: - "./database:/var/lib/mysql" # DO NOT REMOVE diff --git a/setup/docker/docker-compose.yml b/setup/docker/docker-compose.yml index ef938c6fe..d11d3251c 100644 --- a/setup/docker/docker-compose.yml +++ b/setup/docker/docker-compose.yml @@ -114,7 +114,7 @@ services: security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239 - seccomp:unconfined - apparmor:unconfined - command: mysqld --innodb-buffer-pool-size=512M --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 + command: mariadbd --innodb-buffer-pool-size=512M --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 ## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder: volumes: - "./database:/var/lib/mysql" # DO NOT REMOVE diff --git a/setup/docker/macos/docker-compose.yml b/setup/docker/macos/docker-compose.yml index e2ef3af7f..3e15db9f3 100644 --- a/setup/docker/macos/docker-compose.yml +++ b/setup/docker/macos/docker-compose.yml @@ -88,7 +88,7 @@ services: - apparmor:unconfined ## --lower-case-table-names=1 stores tables in lowercase and compares names in a case-insensitive manner ## see https://mariadb.com/kb/en/server-system-variables/#lower_case_table_names - command: mysqld --lower-case-table-names=1 --innodb-buffer-pool-size=512M --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 + command: mariadbd --lower-case-table-names=1 --innodb-buffer-pool-size=512M --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 volumes: - "database:/var/lib/mysql" # Named volume "database" is defined at the bottom (DO NOT REMOVE) environment: diff --git a/setup/docker/nvidia/docker-compose.yml b/setup/docker/nvidia/docker-compose.yml index 4420c5cc2..fd578c2da 100644 --- a/setup/docker/nvidia/docker-compose.yml +++ b/setup/docker/nvidia/docker-compose.yml @@ -118,7 +118,7 @@ services: security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239 - seccomp:unconfined - apparmor:unconfined - command: mysqld --innodb-buffer-pool-size=512M --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 + command: mariadbd --innodb-buffer-pool-size=512M --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 ## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder: volumes: - "./database:/var/lib/mysql" # DO NOT REMOVE diff --git a/setup/docker/scheduler/docker-compose.yml b/setup/docker/scheduler/docker-compose.yml index 4460e953e..d63d8bc6a 100644 --- a/setup/docker/scheduler/docker-compose.yml +++ b/setup/docker/scheduler/docker-compose.yml @@ -96,7 +96,7 @@ services: security_opt: - seccomp:unconfined - apparmor:unconfined - command: mysqld --innodb-buffer-pool-size=512M --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 + command: mariadbd --innodb-buffer-pool-size=512M --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 ## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder: volumes: - "./database:/var/lib/mysql" # DO NOT REMOVE diff --git a/setup/docker/windows/docker-compose.yml b/setup/docker/windows/docker-compose.yml index 037dd090a..ad70be627 100644 --- a/setup/docker/windows/docker-compose.yml +++ b/setup/docker/windows/docker-compose.yml @@ -96,7 +96,7 @@ services: - apparmor:unconfined ## --lower-case-table-names=1 stores tables in lowercase and compares names in a case-insensitive manner ## see https://mariadb.com/kb/en/server-system-variables/#lower_case_table_names - command: mysqld --innodb-buffer-pool-size=512M --lower-case-table-names=1 --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 + command: mariadbd --innodb-buffer-pool-size=512M --lower-case-table-names=1 --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 volumes: - "database:/var/lib/mysql" # Named volume "database" is defined at the bottom (DO NOT REMOVE) environment: diff --git a/setup/podman/docker-compose.yml b/setup/podman/docker-compose.yml index 1523c7a25..bfac02d90 100644 --- a/setup/podman/docker-compose.yml +++ b/setup/podman/docker-compose.yml @@ -108,7 +108,7 @@ services: - apparmor:unconfined ## --lower-case-table-names=1 stores tables in lowercase and compares names in a case-insensitive manner ## see https://mariadb.com/kb/en/server-system-variables/#lower_case_table_names - command: mysqld --innodb-buffer-pool-size=2G --lower-case-table-names=1 --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=180 + command: mariadbd --innodb-buffer-pool-size=2G --lower-case-table-names=1 --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=180 volumes: - "./database:/var/lib/mysql" environment: