Files
nextcloud-docs/admin_manual/configuration/configuration_database.rst
2013-11-25 10:29:35 +01:00

360 lines
11 KiB
ReStructuredText

Database Configuration
======================
ownCloud requires a database where administrative data will be held. Four different database types are currently
supported, `MySQL <http://www.mysql.com/>`_, `MariaDB <https://mariadb.org/>`_, `SQLite <http://www.sqlite.org/>`_,
and `PostgreSQL <http://www.postgresql.org/>`_. MySQL or MariaDB are the recommended database engines. By default
SQLite is chosen because it is a file based database with the least administrative overhead.
.. note:: Because SQLite handles multiple users very badly SQLite is only recommended for single user ownCloud installations
Requirements
------------
If you decide to use MySQL, MariaDB, or PostgreSQL you need to install and set-up the
database first. These steps will not be covered by this description as they are easy to find elsewhere.
Parameters
----------
MySQL/MariaDB Database
~~~~~~~~~~~~~~~~~~~~~~
If you decide to use a MySQL or MariaDB database make sure that you have installed and
enabled the MySQL extension in PHP and that the **mysql.default_socket**
points to the correct socket (if the database runs on same server as ownCloud).
Please note that MariaDB is backwards compatible with MySQL, so all instructions will work for both.
You will not need to replace mysql with anything.
The PHP configuration in :file:`/etc/php5/conf.d/mysql.ini` could look like this:
.. code-block:: ini
# configuration for PHP MySQL module
extension=pdo_mysql.so
extension=mysql.so
[mysql]
mysql.allow_local_infile=On
mysql.allow_persistent=On
mysql.cache_size=2000
mysql.max_persistent=-1
mysql.max_links=-1
mysql.default_port=
mysql.default_socket=/var/lib/mysql/mysql.sock # Debian squeeze: /var/run/mysqld/mysqld.sock
mysql.default_host=
mysql.default_user=
mysql.default_password=
mysql.connect_timeout=60
mysql.trace_mode=Off
Now you need to create a database user and the database itself by using the
MySQL command line interface. The database tables will be created by ownCloud
when you login for the first time.
To start the MySQL command line mode use::
mysql -uroot -p
Then a **mysql>** or **MariaDB [root]>** prompt will appear. Now enter the following lines and confirm them with the enter key:
.. code-block:: sql
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS owncloud;
GRANT ALL PRIVILEGES ON owncloud.* TO 'username'@'localhost' IDENTIFIED BY 'password';
You can quit the prompt by entering::
quit
In the ownCloud configuration you need to set the hostname on which the
database is running and a valid username and password to access it.
.. code-block:: php
<?php
"dbtype" => "mysql",
"dbname" => "owncloud",
"dbuser" => "username",
"dbpassword" => "password",
"dbhost" => "localhost",
"dbtableprefix" => "",
SQLite Database
~~~~~~~~~~~~~~~
If you decide to use a SQLite database make sure that you have installed and
enabled the SQLite extension in PHP. The PHP configuration in :file:`/etc/php5/conf.d/sqlite3.ini` could look like this:
.. code-block:: ini
# configuration for PHP SQLite3 module
extension=pdo_sqlite.so
extension=sqlite3.so
It is not necessary to create a database and a database user in advance
because this will automatically be done by ownCloud when you login for the
first time.
In the ownCloud configuration in :file:`config/config.php` you need to set at least the **datadirectory** parameter to
the directory where your data and database should be stored. Note that for the PDO SQLite driver this directory must
be writable (this is recommended for ownCloud anyway). No authentication is required to access the database therefore
most of the default parameters could be taken as is:
.. code-block:: php
<?php
"dbtype" => "sqlite",
"dbname" => "owncloud",
"dbuser" => "",
"dbpassword" => "",
"dbhost" => "",
"dbtableprefix" => "",
"datadirectory" => "/www/htdocs/owncloud/data",
PostgreSQL Database
~~~~~~~~~~~~~~~~~~~
If you decide to use a PostgreSQL database make sure that you have installed
and enabled the PostgreSQL extension in PHP. The PHP configuration in :file:`/etc/php5/conf.d/pgsql.ini` could look
like this:
.. code-block:: ini
# configuration for PHP PostgreSQL module
extension=pdo_pgsql.so
extension=pgsql.so
[PostgresSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
Now you need to create a database user and the database itself by using the
PostgreSQL command line interface. The database tables will be created by
ownCloud when you login for the first time.
To start the postgres command line mode use::
psql -hlocalhost -Upostgres
Then a **postgres=#** prompt will appear. Now enter the following lines and confirm them with the enter key:
.. code-block:: sql
CREATE USER username WITH PASSWORD 'password';
CREATE DATABASE owncloud TEMPLATE template0 ENCODING 'UNICODE';
ALTER DATABASE owncloud OWNER TO username;
GRANT ALL PRIVILEGES ON DATABASE owncloud TO username;
You can quit the prompt by entering::
\q
In the ownCloud configuration you need to set the hostname on which the
database is running and a valid username (and sometimes a password) to
access it. If the database has been installed on the same server as
ownCloud a password is very often not required to access the database.
.. code-block:: php
<?php
"dbtype" => "pgsql",
"dbname" => "owncloud",
"dbuser" => "username",
"dbpassword" => "password",
"dbhost" => "localhost",
"dbtableprefix" => "",
Oracle Database
~~~~~~~~~~~~~~~
If you are deploying to an Oracle database make sure that you have installed
and enabled the `Oracle extension <http://php.net/manual/en/book.oci8.php>`_ in PHP. The PHP configuration in
:file:`/etc/php5/conf.d/oci8.ini` could look like this:
.. code-block:: ini
# configuration for PHP Oracle extension
extension=oci8.so
Make sure that the Oracle environment has been set up for the process trying to use the Oracle extension.
For a local Oracle XE installation this can be done by exporting the following environment variables
(eg. in :file:`/etc/apache2/envvars` for Apache)
.. code-block:: bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
Installing and configuring Oracle support for PHP is way out of scope for this document.
The official Oracle documentation called `The Underground PHP and Oracle Manual <http://www.oracle.com/technetwork/topics/php/underground-php-oracle-manual-098250.html>`_
should help you through the process.
Creating a database user for ownCloud can be done by using the sqlplus command line interface
or the Oracle Application Express web interface.
The database tables will be created by ownCloud when you login for the first time.
To start the Oracle command line mode with a DBA account use::
sqlplus system AS SYSDBA
After entering the password a **SQL>** prompt will appear. Now enter the following lines and confirm them with the enter key:
.. code-block:: sql
CREATE USER owncloud IDENTIFIED BY password;
ALTER USER owncloud DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA unlimited ON users;
GRANT create session
, create table
, create procedure
, create sequence
, create trigger
, create view
, create synonym
, alter session
TO owncloud;
.. note:: In Oracle creating a user is the same as creating a database in other RDBMs, so no ``CREATE DATABASE`` statement is necessary.
You can quit the prompt by entering::
exit
In the ownCloud configuration you need to set the hostname on which the
database is running and a valid username and password to
access it. If the database has been installed on the same server as
ownCloud to config file could look like this:
.. code-block:: php
<?php
"dbtype" => "oci",
"dbname" => "XE",
"dbuser" => "owncloud",
"dbpassword" => "password",
"dbhost" => "localhost",
.. note:: This example assumes you are running an Oracle Express Edition on ``localhost``. The ``dbname`` is the name
of the Oracle instance. For Oracle Express Edition it is always ``XE``.
Trouble Shooting
----------------
How can I find out if my MySQL/PostgreSQL server is reachable?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Use the ping command to check the server availability::
ping db.server.dom
::
PING db.server.dom (ip-address) 56(84) bytes of data.
64 bytes from your-server.local.lan (192.168.1.10): icmp_req=1 ttl=64 time=3.64 ms
64 bytes from your-server.local.lan (192.168.1.10): icmp_req=2 ttl=64 time=0.055 ms
64 bytes from your-server.local.lan (192.168.1.10): icmp_req=3 ttl=64 time=0.062 ms
How can I find out if a created user can access a database?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The easiest way to test if a database can be accessed is by starting the
command line interface:
**SQLite**::
sqlite3 /www/htdocs/owncloud/data/owncloud.db
::
sqlite> .version
SQLite 3.7.15.1 2012-12-19 20:39:10 6b85b767d0ff7975146156a99ad673f2c1a23318
sqlite> .quit
**MySQL**::
mysql -uUSERNAME -p
::
mysql> SHOW VARIABLES LIKE "version";
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| version | 5.1.67 |
+---------------+--------+
1 row in set (0.00 sec)
mysql> quit
**PostgreSQL**::
psql -Uusername -downcloud
::
postgres=# SELECT version();
PostgreSQL 8.4.12 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.3 20080704 (prerelease), 32-bit
(1 row)
postgres=# \q
**Oracle**::
sqlplus username
::
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
SQL> exit
Useful SQL commands
~~~~~~~~~~~~~~~~~~~
**Show Database Users**::
SQLite : No database user is required.
MySQL : SELECT User,Host FROM mysql.user;
PostgreSQL: SELECT * FROM pg_user;
Oracle : SELECT * FROM all_users;
**Show available Databases**::
SQLite : .databases (normally one database per file!)
MySQL : SHOW DATABASES;
PostgreSQL: \l
Oracle : SELECT name FROM v$database; (requires DBA privileges)
**Show ownCloud Tables in Database**::
SQLite : .tables
MySQL : USE owncloud; SHOW TABLES;
PostgreSQL: \c owncloud; \d
Oracle : SELECT table_name FROM user_tables;
**Quit Database**::
SQLite : .quit
MySQL : quit
PostgreSQL: \q
Oracle : quit