From 67c0b060520861a494649751b86e89ec0084b7e9 Mon Sep 17 00:00:00 2001
From: Jan Grewe <jan.grewe@g-node.org>
Date: Fri, 31 Jul 2020 18:01:59 +0200
Subject: [PATCH] [docs] info on db server configurations

---
 docs/index.md | 74 ++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 65 insertions(+), 9 deletions(-)

diff --git a/docs/index.md b/docs/index.md
index a0345e1..869dcf9 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,4 +1,4 @@
-# How to use the fish book
+# How to use the fishbook
 
 ## Requirements
 
@@ -31,32 +31,88 @@
   >> sudo pip3 install fishbook
   ```
 
-### 3) Connecting to the database
 
-#### Installing a local database
+### 3) Installing a local database server
 
 When you want to run *fishbook* locally you need to install a local database server (either mariaDB or mysql).
 
 On Ubuntu or Linux mint use *apt* to install the server
 
 ```bash
-sudo apt install mysql
+sudo apt update
+sudo apt install mariadb-server
+sudo mysql_secure_installation
 ```
 
 On Fedora use *dnf*
 
 ```bash
-sudo dnf install mysql
+sudo dnf update
+sudo dnf install mariadb-server
+sudo mysql_secure_installation
 ```
 
-On MacOS the most convenient way is to use [*homebrew*](https://brew.sh)
+On MacOS the most convenient way is to use [*homebrew*](https://brew.sh) see also [mariadb documentation](https://mariadb.com/kb/en/installing-mariadb-on-macos-using-homebrew/)
 
 ```bash
-brew install mysql
+brew install mariadb
+mysql.server start
+brew services start mariadb  # to automatically start the server upon boot
 ```
 
 On Windows you probably need to download an installer...
 
-#### Database connection
+Upon installation you should be able to log into the database as root without a password. 
+
+```bash
+mysql -u root 
+``` 
+
+To allow *datajoint* to store stuff on the server you need to:
+1. Create a database on the server.
+2. Add a user and grant this user read and write access.
+
+### Creating a database
+
+At the moment *fishbook* assumes that your database is called **fish_book**. To create it log into the server 
+
+```bash
+mysql -u root -p
+```
+
+And and execute the following commands
+
+```sql
+MariaDB [(none)]> CREATE DATABASE fish_book CHARACTER SET = utf8;
+MariaDB [(none)]> GRANT ALL ON fish_book.* TO 'foo'@'localhost' IDENTIFIED BY 'password';
+MariaDB [(none)]> FLUSH PRIVILEGES;
+```
+
+The first command creates the empty database and sets the Character set to utf8. This is important at least when it comes to *fishbook*. The second row creates a user **foo** and grants that user all rights on all tables of **fish_book**. So far **foo** can only log in from the local machine. In order to grant access also from outsides you need to issue a second command:
+
+```sql
+MariaDB [(none)]> GRANT ALL ON fish_book.* TO 'foo'@'%' IDENTIFIED BY 'password';
+MariaDB [(none)]> FLUSH PRIVILEGES;
+```
+
+From localhost you should now be able to log into the **fish_book** database by 
+
+```bash
+mysql fish_book -u foo -p
+```
+
+From outsides use
+
+```shell
+mysql fish_book -h yourhost.yourdomain -u foo -p
+```
+
+### Things to remember
+
+* Database engine must be InnoDB, which is default in MariaDB
+* **OperationalError: (1071, 'Specified key was too long; max key length is 3072 bytes')**
+Caused by a wrong character set check that it is set to utf8:
+```sql
+ALTER DATABASE `fish_book` CHARACTER SET utf8;
+```
 
-Suppose that you intend to work on a project named `foo` use the terminal to navigate to the project directory: `cd foo`
\ No newline at end of file