WebCie Databases

From A-Eskwiki
Revision as of 17:57, 14 January 2018 by Timb (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

De WebCie runt een paar databases waarin alle websitedata (dus ook ledendata, en transactiedata) staat. Op de vm-www, vm-www-debug en de vm-www-inwerking draaien allemaal een databaseserver en dezelfde databasestructuur (modulo updatevolgorde).

Gebruik in de code

De beste manier om kwerries op de databaas te doen is met QueryBuilder. Dit is een manier om volautomatisch SQL te genereren vanuit object-georienteerde code, zonder dat je bang hoeft te zijn voor injectie enzo.

In principe zouden dingen als databaseconnectie enzo al geregeld moeten zijn als je controllerfunctie aangeroepen wordt. Dat wordt door space gedaan, op basis van gebruikersnaam + wachtwoord zoals in secret.php geconfigureerd. Dit zorgt ervoor dat inloggen en uitloggen (en eigenlijk alles wat de auth van de gebruiker aanpast) een refresh vereist voordat alles goed weergegeven kan worden!

De belangrijkste database is whoswho4, waar alle WhosWho4-objecten in staan. Dan zijn er nog benamite voor Benamite en boeken voor Bookweb.

Debugdatabase

Op de vm-www-debug wordt elke nacht een kopietje gemaakt van de livedatabases om op te kunnen debuggen. Deze db's heten test_$BLA waar $BLA staat voor de naam van de originele database.

Aanpassen buiten de code om

Heb je een nieuwe klasse gemaakt of een nieuw veld? Dan kun je op [1] (of als je echt PHPMyAdmin nodig hebt [2]) (debugdb) en [3] (livedb) inloggen op localhost met gebruikersnaam root en het databasewachtwoord. Dit wachtwoord vind je in het bestand .my.cnf in de homedir van gebruiker webcie. Als je klaar bent met dit soort wijzigingen, moet je de Databasestructuur committen.

Migratie naar PostgreSQL

MySQL is stiekem best wel slecht, dus we willen graag in plaats daarvan PostgreSQL gebruiken. De migratie gaat ongeveer als volgt.

SSH naar de VM waar de oorspronkelijke database opstaat. Dan doe je ongeveer de volgende stappen (dit is voor de vm-www-debug). Eerst installeren we Postgres:

wget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm
rpm -Uvh pgdg-centos96-9.6-3.noarch.rpm
sudo yum update                                                                
sudo yum install postgresql96-server postgresql96-contrib                      
sudo service postgresql-9.6 initdb                                             
sudo service postgresql-9.6 start                                              
sudo chkconfig postgresql-9.6 on                                               
sudo -i                                                                        
su postgres                                                                    
psql

Doe nu CREATE USER voor alle users in je secret.php.

Dan zijn we klaar om de koppeling met PHP te maken:

sudo yum install php-pgsql                                                        
sudo service httpd restart

Pas /var/lib/pgsql/9.6/data/pg_hba.conf aan zodat je auth method md5 gebruikt. (De bestanden /usr/pgsql/* slaan nergens op, negeer deze.)

sudo service postgresql-9.6 restart

Je zou nu moeten kunnen inloggen met psql --user $BLA -d postgres en ook op adminer (maar let op dat je een database kiest die bestaat).

Data migreren

Ruim eerst je DB een beetje op! (oftewel zorg dat je foreign keys kloppen, dat er geen datums zijn met jaar 0000, maand 00 of dag 00 enzo)

Dit is een volledige migratie, inclusief dbstructuur. Gebruik andere opties voor mysqldump om alleen data te verhuizen.

mysqldump --compatible=postgresql --user=root --password --default-character-set=utf8 test_whoswho4 > export.sql
python2.7 docs/db_converter.py export.sql pg-export.sql                    
psql -d test_whoswho4 -U root -f pg-export.sql