All of Fedora's persistent content and metadata are stored on disk in an OCFL storage root. For performance reasons, Fedora maintains a cache of system and user metadata in a rebuildable database.
For quickly spinning up Fedora in a testing / experimental context, a default H2 database is available by default.
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
|
By default, Fedora comes configured to write binary resources (i.e. files) to the file system and RDF resources (i.e. objects) to a database. For testing, a file-based objects database may be useful. However, for production installations, it is recommended to use a MySQL or PostgresSQL object store. MariaDB, MySQL or PostgreSQL database.
Note |
---|
Fedora currently supports the following versions:
|
Below are the steps to use MySQL, MariaDB or PostgreSQL, as well as Docker instructions if you choose to run your database in a Docker container.
Info |
---|
For the full list of database properties, please refer to the Database section of the Properties documentation. You can find additional information on this wiki about how Fedora rebuilds these caches and the structure of the tables in the database. |
...
Table of Contents |
---|
Native Database Setup
MariaDB
...
- Install an instance of MySQL of MariaDB and create a database called database called
fcrepo
and a user account that a user account that can access it - Run Fedora with the following properties defined either in your properties file or in your
JAVA_OPTS
:
Code Block |
---|
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.modeshape.configuration=classpath:/config/jdbc-mysql/repository.json"
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.mysql.username=<username>"
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.mysql.password=<password>"
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.mysql.host=<default=localhost>"
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.mysql.port=<default=3306>" |
fcrepo.db.url=jdbc:mariadb://localhost:3306/fcrepo
fcrepo.db.user=<username>
fcrepo.db.password=<password> |
Note, the fcrepo
database Note, the fcrepo
database must be manually created, but the tables will be automatically created.
PostgreSQL
- Install an instance of PostgreSQL and create a database called
fcrepo
and a user account that can access it - Run Fedora with the following properties defined either in your properties file or in your
JAVA_OPTS:
Code Block |
---|
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.modeshape.configuration=classpath:/config/jdbc-postgresql/repository.json"
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.postgresql.username=<username>"
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.postgresql.password=<password>"
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.postgresql.host=<default=localhost>"
JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.postgresql.port=<default=5432>" |
fcrepo.db.url=jdbc:postgresql://localhost:5432/fcrepo
fcrepo.db.user=<username>
fcrepo.db.password=<password> |
Note, the fcrepo
database must be manually created, but the tables will be automatically created.
MySQL
- Install an instance of MySQL and create a database called
fcrepo
and a user account that can access it - Run Fedora with the following properties defined either in your properties file or in your
JAVA_OPTS:
Code Block |
---|
fcrepo.db.url=jdbc:mysql://localhost:3306/fcrepo
fcrepo.db.user=<username>
fcrepo.db.password=<password> |
Note, the fcrepo
database Note, the fcrepo
database must be manually created, but the tables will be automatically created.
Database
...
Initialization
MySQL and MariaDB
To create a new database and user in MySQL, assuming a username of user1
and a password of xyz
:
Code Block |
---|
$ mysql -u root -p > createCREATE databaseDATABASE fcrepo CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; > createCREATE userUSER 'user1'@'localhost' IDENTIFIED BY 'xyz'; > GRANT ALL PRIVILEGES ON fcrepo.* to 'user1'@'localhost'; > \q |
Note |
---|
MySQL and MariaDB use case insensitive collations by default, but resources in Fedora are case sensitive. If you decide to create your database using a case insensitive collation, then Fedora will not be able to handle case appropriately, leading to undefined behavior. |
PostgreSQL
To create a new database and user in PostgreSQL, assuming a username of user1
and a password of xyz
:
Code Block |
---|
$ sudo -u postgres psql > createCREATE databaseDATABASE fcrepo; > createCREATE userUSER user1; > alterALTER userUSER user1 passwordPASSWORD 'xyz'; > grantGRANT allALL privilegesPRIVILEGES onON databaseDATABASE fcrepo toTO user1; > \q |
Docker-based Database Setup
The following instructions detail how to run your database in a Docker container.
MariaDB
The following instructions use the database username of "fcrepo-user" and password of "fcrepo-pw". You will want to change these to something more secure.
No Format |
---|
docker run --name f6-mariadb -e MYSQL_ROOT_PASSWORD=root-pw -e MYSQL_DATABASE=fcrepo -e MYSQL_USER=fcrepo-user -e MYSQL_PASSWORD=fcrepo-pw -p 3306:3306 -d mariadb:10.5.3 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
..when done with the database:
docker stop f6-mariadb
docker rm f6-mariadb |
MariaDB CLI Client
To connect via the command line with the above database, the following command may be used:
No Format |
---|
docker exec -it f6-mariadb mysql -ufcrepo-user -pfcrepo-pw -Dfcrepo |
In order for Fedora to connect with a database configured as above, the Fedora should be started with the following properties:
No Format |
---|
fcrepo.db.url=jdbc:mariadb://localhost:3306/fcrepo
fcrepo.db.user=fcrepo-user
fcrepo.db.password=fcrepo-pw |
PostgreSQL
The following instructions use the database username of "fcrepo-user" and password of "fcrepo-pw". You will want to change these to something more secure.
No Format |
---|
docker run --name f6-postgres -e POSTGRES_USER=fcrepo-user -e POSTGRES_PASSWORD=fcrepo-pw -e POSTGRES_DB=fcrepo -p 5432:5432 -d postgres:12.3
..when done with the database:
docker stop f6-postgres
docker rm f6-postgres |
PostgreSQL CLI Client
To connect via the command line with the above database, the following command may be used:
No Format |
---|
docker exec -it f6-postgres psql -U fcrepo-user -d fcrepo |
In order for Fedora to connect with a database configured as above, the Fedora should be started with the following properties:
No Format |
---|
fcrepo.db.url=jdbc:postgresql://localhost:5432/fcrepo
fcrepo.db.user=fcrepo-user
fcrepo.db.password=fcrepo-pw |
MySQL
The following instructions use the database username of "fcrepo-user" and password of "fcrepo-pw". You will want to change these to something more secure.
No Format |
---|
docker run --name f6-mysql -e MYSQL_ROOT_PASSWORD=root-pw -e MYSQL_DATABASE=fcrepo -e MYSQL_USER=fcrepo-user -e MYSQL_PASSWORD=fcrepo-pw -p 3306:3306 -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
..when done with the database:
docker stop f6-mysql
docker rm f6-mysql |
MySQL CLI Client
To connect via the command line with the above database, the following command may be used:
No Format |
---|
docker exec -it f6-mysql mysql -ufcrepo-user -pfcrepo-pw -Dfcrepo |
In order for Fedora to connect with a database configured as above, the Fedora should be started with the following properties:
No Format |
---|
fcrepo.db.url=jdbc:mysql://localhost:3306/fcrepo
fcrepo.db.user=fcrepo-user
fcrepo.db.password=fcrepo-pw |