WebCie Databases
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).
Contents
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