6/1/2023

MariaDb phpMyAdmin privileges foutmelding: Illegal mix of collations

Filed under: — cybrarian @ 2:49 pm

Op mijn laptop (opensuse 15.3, mariadb), in phpMyAdmin, bij het kiezen van de privileges
krijg ik een foutmelding:

#1267 – Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8mb4_unicode_ci,COERCIBLE) for operation ‘<>‘

Hier (2) vond ik een beschrijvnig:

Ik zie in Server:localhost, Settings, Features, Databases:

http://localhost/phpMyAdmin/prefs_forms.php?form=Features#tab_Databases

Server connection collation:
utf8mb4_unicode_ci

Verander utf8mb4_unicode_ci naar utf8mb4_general_ci.

Daarna kan ik weer de privileges opvragen en bewerken..

Ok!

ps: op een andere computer met Nederlandstalige desktop heb ik dat probleem niet ondanks dat daar ook die unicode versie ingesteld is.

Links:
(1) http://localhost/phpMyAdmin/server_privileges.php?db=mysql&table=global_priv&checkprivsdb=mysql&checkprivstable=global_priv&viewing_mode=table
(2) https://www.iwally.nl/1267-illegal-mix-of-collations-utf8mb4-general-ci-coercible-and-utf8mb4-unicode-ci-coercible-for-operation

16/11/2022

SQL opvraging over verschillende databanken

Filed under: — cybrarian @ 9:43 am

Ja, je kan in 1 sql-statement een opvraging van verschillende databanken combineren (als je er toegang toe hebt met je account).

SELECT db1.table1.*, db2.table2.name FROM db1.table1, db2.table2 WHERE db2.table2.id=db1.table1.external_id

Je kan verschillende rechten hebben op de databases; bv op de ene tabel lees-wijzig-invoeg rechten, en op de andere alleen leesrechten.

Toepassing: database user planktonalfheim heeft enkel leesrecht op Alfheim2.application om de naam op te zoeken:

REVOKE ALL PRIVILEGES ON `Alfheim2`.* FROM 'planktonalfheim'@'localhost'; GRANT SELECT ON `Alfheim2`.* TO 'planktonalfheim'@'localhost';
REVOKE ALL PRIVILEGES ON `plankton`.* FROM 'planktonalfheim'@'localhost'; GRANT SELECT, INSERT, UPDATE, DELETE ON `plankton`.* TO 'planktonalfheim'@'localhost';

MariaDbServer
* Alfheim2

  • application
    – id
    – name

* plankton

  • issue
    – id
    – description
    – isactive
    – application_id

SELECT plankton.issue.*, Alfheim2.application.name FROM plankton.issue, Alfheim2.application WHERE plankton.issue.isactive=1 AND Alfheim2.application.id=plankton.issue.application_id

25/10/2022

Mysql/Mariadb, phpMyAdmin: Illegal mix of collations

Filed under: — cybrarian @ 12:38 pm

De LAMP server draait MariaDb, gebruiker heeft toegang met phpMyAdmin vanop dezelfde machine.

Bij het opvragen van de “privileges” in phpMyAdmin (url: hieronder)…
http://localhost/phpMyAdmin/server_privileges.php?db=mysql&table=user&checkprivsdb=mysql&checkprivstable=user&viewing_mode=table

…krijg ik volgende foutmelding:

#1267 – Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8mb4_unicode_ci,COERCIBLE) for operation ‘<>‘
Current selection does not contain a unique column. Grid edit, Edit, Copy and Delete features may result in undesired behavior. Documentation

Ik ga deze oplossing uitproberen als ik tijd heb:
(stackoverflow)

31/5/2022

Databank structuur versie bijhouden in databank?

Filed under: — cybrarian @ 6:50 pm

Database versioning. Brainstorm.

Ontwerp
Ik maak een applicatie (bv in Gambas3), en gebruik een mariadb databank om de gegevens op te slaan.
Ik exporteer de structuur en bewaar die mee in de broncode om dat databank terug op te kunnen bouwen.
De vorige wordt overschreven, alleen de huidige, bij de software passende versie databank.sql wordt hier bewaard. Door het versiebeheersysteem (Git), kan je teruggaan naar oudere software versies, en dan heb je daar ook altijd de bijpassende databank struktuur bij.

Verandering
Als er een verandering gebeurt aan de code en aan de “database structure”, moet ik ergens kunnen bijhouden welke versie van de database struktuur dit is (zeker als mogelijk verschillende applicaties of versies van software gebruikt worden om die aan te spreken).

Een logische plaats zou zijn: in de database zelf.

De wijziging aan de database moet kunnen gedetecteerd worden door de software; en als maar 1 software die databank gebruikt, zou de software die ook (automatisch) kunnen aanpassen/opwaarderen, of de juiste aanpassing kunnen suggereren.
Upgrade/Downgrade: als er een upgrade script is, ook een downgrade script voor ingeval onverwachte problemen (in productie).

Het zou goed zijn als de toepassing de databank struktuur checkt bij het opstarten, dan kan er geen te oude code draaien met een niet meer kloppende nieuwere versie van de databank.

De software moet dus ook weten voor welke versie van databank ze gemaakt is; bv met een constante gedefinieerd in Main “dBVersion = 10”.

Als er een “library” gebruikt wordt om de database te benaderen kan dat daarin.

Vorm
Hoe gedetailleerd moet de database struktuur versienummering zijn?
bv:
Db is aangemaakt, is versie 1, Db v1
Db is aangepast, extra tabel, Db v 2
Db heeft extra index gekregen, Db v2.1
Nog een extra index gekregen, Db v2.2
Extra velden in tabel, Db v 3.0
Extra velden krijgen index, Db v 3.1
Tabel bijgemaakt, Db v 4.0
Velden bijgemaakt daarin, Db v 5.0
Nog een tabel extra Db v6.0

De hoofdversie vereist overeenkomstige wijziging aan de code die de data gebruikt.
Een minor versienummer levert bv een praktische versnelling op, maar geen code wijziging?

Waarschuwing
– major versienummer verschil: waarschuwing en afsluiten/readonly (?).
– minor versienummer verschil: waarschuwing en verderwerken.

Bij major aanpassing:
– telkens de database structuur bij de broncode, dan kan in principe vanaf die struktuur vertrokken worden bij nieuwe installatie van het geheel (dus ook nieuwe databank).
– de code om de database op deze stand te brengen vanuit de vorige toestand.
Dus bij de developer moet de database-wijziging gebeuren met code, dezelfde die mee geleverd wordt als upgrade code voor de gebruiker. Dat zal niet altijd kunnen, als er dingen uitgeprobeerd worden bij development; maar uiteindelijk moet de developer dan toch de vorige volle versie terugzetten en een upgrade script maken tot de gewenste toestand.

Bij minor aanpassing:
– telkens de database structuur bij de broncode, blijft.
– ook deze aanpassing als code meeleveren.

History?
– in database een history bijhouden van in gebruik geweeste versienummers, met datum, updaternaam enz.

Best eens een test maken om dat uit te proberen…

27/4/2022

MariaDb zonder root: en phpMyAdmin dan?

Filed under: — cybrarian @ 11:54 am

Korte versie:

Maak, als root, een phpmyadmin account met de nodige rechten:
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'wachtwoord';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Ik begon van OpenSUSE 15.3 geïnstalleerde mysql (=MariaDb):
Server version: 10.5.15-MariaDB MariaDB package

Geen root login meer?

cybrarian@MijnMachine:~> mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Of toch?

cybrarian@MijnMachine:~> su
Password:
MijnMachine:/home/cybrarian # mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 23
Server version: 10.5.15-MariaDB MariaDB package
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

MariaDB [(none)]> select Host, User, Password from mysql.user;
+-----------+-------------+----------+
| Host      | User        | Password |
+-----------+-------------+----------+
| localhost | mariadb.sys |          |
| localhost | root        | invalid  |
| localhost | mysql       | invalid  |
| localhost |             |          |

Ik lees dat ze dit veranderd hebben in versie 10.4: https://mariadb.com/kb/en/authentication-from-mariadb-104/

Dit heeft het voordeel dat de root account vanaf installatie afgeschermd is, en dat je niet hals-over-kop eerst je root account moet gaan toe-zetten, zoals vroeger.

Het root account wordt automatisch gemaakt, en je kan het gebruiken als je root bent op je systeem, ofwel met sudo.

Het test account lijkt voor iedereen open te staan nu:

cybrarian@MijnMachine:~> mysql -u test
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.5.15-MariaDB MariaDB package
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| @localhost     |
+----------------+
1 row in set (0.001 sec)
MariaDB [(none)]> select USER();        
+----------------+
| USER()         |
+----------------+
| test@localhost |
+----------------+
1 row in set (0.000 sec)
MariaDB [(none)]> exit
Bye

met een willekeurige naam:

cybrarian@MijnMachine:~> mysql -u joskevermeulen
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 19
Server version: 10.5.15-MariaDB MariaDB package
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select USER();        
+--------------------------+
| USER()                   |
+--------------------------+
| joskevermeulen@localhost |
+--------------------------+
1 row in set (0.001 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.001 sec)
MariaDB [(none)]> exit
Bye

Beveiligen
Het script na installatie blijft bestaan:

mysql_secure_installation

Het laat toe de root wachtwoord en login instellingen aan te passen, en eindigt met :


Remove test database and access to it? [Y/n]
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
… Success!

Cleaning up…

All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

en dan is:

MariaDB [(none)]> select Host, User, Password, plugin from mysql.user;
+-----------+-------------+----------+-----------------------+
| Host      | User        | Password | plugin                |
+-----------+-------------+----------+-----------------------+
| localhost | mariadb.sys |          | mysql_native_password |
| localhost | root        | invalid  | mysql_native_password |
| localhost | mysql       | invalid  | mysql_native_password |
+-----------+-------------+----------+-----------------------+
3 rows in set (0.002 sec)

phpMyAdmin
Als je hierboven *geen* root wachtwoord hebt gezet, dan zal phpMyAdmin niet werken met root.

From mysql 5.7 and mariadb 10.4 on, one cannot use ‘root’ login with default authentication method. One solution is to create a new admin user for the database just for phpMyAdmin.

Je moet dus ofwel

  • “root” weer gaan aktiveren en er een wachtwoord aan toekennen,
  • een gebruiker bijmaken voor phpMyAdmin, om zelf mee in te loggen via phpMyAdmin.

Aangezien ze root verwijderd hebben voor een reden, en dat ook zo in de volgende versies zal zijn, leer je er beter me leven. Kies een goede naam, waarmee je zelf weet waar hij voor dient (“phpmyadmin”?), of gebruik je eigen naam bv als je jezelf vertrouwt met root rechten; beperk eventueel tot localhost.

Log in als root (of je eigen gekozen beheerdersaccount).
ps: De “whoami” van mysql? check wie je nu bent met:
SELECT CURRENT_USER();

In de tabel mysql:
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'VerzinZelf1Wachtwoord';

MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]>CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'VerzinZelf1Wachtwoord';

MariaDB [mysql]> select Host, User, Password, plugin from mysql.user;

+-----------+-------------+-------------------------------------------+-----------------------+
| Host      | User        | Password                                  | plugin                |
+-----------+-------------+-------------------------------------------+-----------------------+
| localhost | mariadb.sys |                                           | mysql_native_password |
| localhost | root        | invalid                                   | mysql_native_password |
| localhost | mysql       | invalid                                   | mysql_native_password |
| localhost | phpmyadmin  | *60BE5F4C0B7FD3747C1845476CED1F220739403B | mysql_native_password |
+-----------+-------------+-------------------------------------------+-----------------------+

Helaas; ik kan nu wel inloggen in phpMyAdmin, maar ik zie geen tabellen, ik kan niets doen.
Nog rechten toekennen aan de nieuwe gebruiker:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.004 sec)

en de rechten herladen:

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

Hallo phpMyAdmin!

12/3/2021

WordPress meer-sits, meer-gebruikers

Filed under: — cybrarian @ 2:12 pm

Een artikel over WordPress op een gemeenschappelijke server voor meer sites of gebruikers/blogs:

https://www.smashingmagazine.com/2020/01/complete-guide-wordpress-multisite/

26/4/2020

Delen in mijn public_html folder

Filed under: — cybrarian @ 10:29 pm

Covid-19, aan huis gekluisterd of in quarantaine, en snel wat dingen delen met je huis/kotgenoten? Daar bestaat een gemakkelijke, snelle, en Linux-vriendelijke manier voor: de map public_html.

public_html
Als Linux gebruiker zie ik in mijn “home” directory, map of folder een map “public_html” tussen de Document, Pictures enz. mappen, maar op het eerste zicht doet die map niets (of doet er niets iets met die map). public_html komt voor bij openSUSE, Debian, .. (kan een iets andere naam hebben, bv www, …).

Ze is bedoeld om bestanden te delen op een manier dat een webserver dat doet. Je kan er:
– gewoon bestanden in zetten om te laten downloaden of bekijken.
– een index pagina maken en het gebruiken als een soort persoonlijke website.

Webserver
Deze map wordt gebruikt door de webserver, die moet je dus installeren indien nog niet gebeurd.
Hij moet ook aktief zijn. Op een webserver is die normaal aktief, op je pc/laptop zal je die alleen aktiveren indien nodig.
Als de webserver (Apache) draait, en daarvoor is ingesteld (wat standaard zo zou kunenn zijn), dan gaat hij voor alle gebruikers, hier één voorgesteld door “cybrarian”, kijken in de map
/home/cybrarian/public_html
en die weergeven in bv Firefox aan de gebruikers van de webserver.

Zelf:
file:///home/cybr/public_html

Lokaal:
die directory weergeven aan andere gebruikers op diezelfde server die de site van die gebruiker opvragen op de manier:
http://localhost/~cybrarian/

Netwerk:
Stel dat de server het ip adres 192.168.1.67 heeft dan kunnen gebruikers binnen het eigen lokale netwerk de pagina’s opvragen met:
http://192.168.1.167/~cybrarian/

Hosting:
Ook bij hosting kan dit scenario voorkomen. De URL om de pagina’s op te vragen zal dan de internet-URL zijn van de server (of kan misschien ook met ip-adres).

Apache maakt dit mogelijk met “mod_userdir” (http://httpd.apache.org/docs/2.4/mod/mod_userdir.html).
Instellingen van de webserver kunnen roet in het eten gooien.
Maar het is een goede, veilige manier van werken want dan kan een gebruiker eenvoudig bestanden aanbieden aan de webserver zonder dat hij rechten moet hebben om in de webserver directories wijzigingen aan te brengen.

Voorbeeld:
Op OpenSUSE waar al een databank op draaide met phpMyAdmin stond de webserver al geïnstalleerd. Na het starten met
sudo systemctl start apache2
werkte het vanzelf. Je moet er enkel op letten ook werkelijk iets in die public_html te zetten, iets anders dan een “lege” index.html (die is wel nuttig om even de inhoud van je directory te verbergen).

27/1/2020

MySQL Automatisch nummeren wijzigen (AUTO_INCREMENT)

Filed under: — cybrarian @ 1:06 pm

Een databank mijndata heeft tabel mijntabel met een veld id, waarvoor de eigenschap AUTO_INCREMENT gezet is.

Elke keer er een record bijgemaakt wordt, verhoogt de waarde met 1, en standaard begint die waarde bij 1.

Als je het laatste record verwijdert, bv dat met id 3, zal een nieuw gemaakt record waarde 4 krijgen (niet waarde 3!).

Aan de opeenvolging van deze record id’s kan je bv zien dat er records verwijderd zijn. (tenzij…)

Als het om één of andere reden toch nodig is om een verwijderd record te vervangen door één met hetzelfde nummer als reeds gebruikt, kan je hetvolgende doen:
– verwijder alle records vanaf 3; hier dus 3 en 4 (als je er zeker van bent dat het record id nergens andere gebruikt is!).
– wijzig de AUTO_INCREMENT teller die wordt bijgehouden op tabelniveau.

ALTER TABLE mijndata AUTO_INCREMENT=3

Je kan het ook automatisch laten bepalen door de databank zelf:
ALTER TABLE mijndata AUTO_INCREMENT=1
De databank zal dan het eerstvolgende vrije nummer nemen, in dit geval 3.

Met phpMyAdmin:
Selecteer de database tabel, en kies tab “Operations”. Daar zie je onder “Table Options” de wijzigbare AUTO_INCREMENT waarde staan. Denk eraan dat hier de volgende toe te kennen waarde staat.

De waarde die de database bijhoudt om het volgende recordnummer te maken kan je zien in de extra informatie over de tabel in phpMyAdmin “Structure”, “Information”.
Daar vind je de volgende waarde bewaard als “next autoindex”.

Op de commandolijn kan je “show” gebruiken:
SHOW CREATE TABLE mijntabel;
In dat antwoord zie je “AUTO_INCREMENT=4”.

14/11/2019

Accenten in apache2 php mysql applicatie

Filed under: — cybrarian @ 10:30 am

Een bestaande CMS applicatie maakt gebruik maakt van debian, apache2, php, mysql.
Bij het installeren van een reserve-systeem wordt de é niet juist weergegeven op het scherm.

De letter é wordt weergegeven als � in mijn (Firefox) browser.

Gevolg
Erger nog, als ik een “edit” doe van de gegevens, waarbij de bestaande gegevens in invulvelden worden weergegeven, blijft het veld met de accent-letter leeg, en na bewaar is een lege waarde bewaard. In de database is het veld leeg.

Als ik in de applicatie zelf een é invul, lijkt dat te gaan. Die wordt bewaard zonder foutmelding en weergegeven als é.
Maar! In de database zie ik: é. Speelt op zich geen rol maar wel als de andere é’s er als é inzitten en fout weergegeven blijven worden.

Locale en tekensets
Er zijn nogal wat niveau’s waarop taaleigen instellingen worden gemaakt: van de databank, naar de php/apache-server, tot in de browser die het weergeeft.

Server
root@myserver:~# locale

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=”en_US.UTF-8″
LC_NUMERIC=”en_US.UTF-8″
LC_TIME=”en_US.UTF-8″
LC_COLLATE=”en_US.UTF-8″
LC_MONETARY=”en_US.UTF-8″
LC_MESSAGES=”en_US.UTF-8″
LC_PAPER=”en_US.UTF-8″
LC_NAME=”en_US.UTF-8″
LC_ADDRESS=”en_US.UTF-8″
LC_TELEPHONE=”en_US.UTF-8″
LC_MEASUREMENT=”en_US.UTF-8″
LC_IDENTIFICATION=”en_US.UTF-8″
LC_ALL=

phpinfo
Een goed hulpmiddel om dat te onderzoeken is phpinfo. Maak op de server een bestand, bv info.php, waarin je phpinfo() aanroept.
Je krijgt een scherm met alle mogelijke informatie over het systeem waarop de CMS draait; server en software versies, instellingen enz.

Apache Environment
HTTP_ACCEPT_LANGUAGE en-US,en;q=0.5
HTTP Headers Information
Accept-Language en-US,en;q=0.5
Core
default_charset iso-8859-1
PHP Variables
_SERVER["HTTP_ACCEPT_LANGUAGE"] en-US,en;q=0.5
mbstring
mbstring.language neutral
mbstring.encoding_translation Off

phpMyAdmin
Met phpMyAdmin kan je kijken hoe de database ingesteld is:
Database Server
Server charset: UTF-8 Unicode (utf8)
General Settings
Server connection collation: utf8mb4_general_ci
Database
Table collation: latin1_swedish_ci

Onzichtbare waarden
Als je in de instellingen (bv php.ini, …) alles exact hetzelfde hebt staan, is dat nog geen garantie voor gelijk gedrag.
De ene versie van php reageert anders dan de andere, zelfs al is het versie-verschil onnoemelijk klein. Zo kan een niet-opgegeven instelling standaard verschillend gedrag opleveren, omdat uitgegegaan wordt van een andere standaard of “default” waarde als er geen instelling gemaakt is.

Als de waarde default_charset niet voorkomt in het initialisatiebestand, geldt standaard…
PHP Version 5.6.0RC3 : iso-8859-1
PHP Version 5.6.40-0+deb8u6 : UTF-8

Dit kan je oplossen door de instelling impliciet op te geven in het php.ini bestand.

default_charset="UTF-8"
of, om op de recente compatibel te zijn met de RC3:
default_charset="iso-8859-1"
daarna:
service apache2 restart

Het resultaat kan je bv zien in bovenvermelde phpinfo()

25/10/2019

phpMyAdmin (Max: 2,048KiB)

Filed under: — cybrarian @ 8:57 am

Bij het importeren van een database bestand (bv export mijndata.sql, een data backup of een dump uit mysql/mariadb), stoot je soms op een limiet, hier 2 Mb:

Browse your computer: No file selected. (Max: 2,048KiB)

Als je doorgaat en bv een bestand van 7 Mb probeert te uploaden, krijg je een foutmelding zoals:

No data was received to import. Either no file name was submitted, or the file size exceeded the maximum size permitted by your PHP configuration. See FAQ 1.16.

Uit de link naar de uitleg leer je dat er een paar plaatsen zijn waar je instellingen kan/moet aanpassen in het php.ini bestand.
Dat kan je (bv OpenSUSE 42.3) vinden in /etc/php5/apache2

php.ini

file_uploads = On
upload_max_filesize = 2M
post_max_size = 50M
memory_limit = 128 M
max_execution_time = 30

In de eerste lijn zie je de waarde terugkomend die de phpMyAdmin interface ook weergeeft. Je kan die wijzigen naar je eigen nodenm bv 8M.
Daarbij moet post_max_size > upload_max_filesize !

service apache2 restart
http://localhost/phpMyAdmin/server_import.php (of F5 om te herladen)

Daar zie je dan bv:

Browse your computer: No file selected. (Max: 8,192KiB)

Soms is dat al genoeg om verder te kunnen met je te-grote upload in phpMyAdmin.

7/2/2018

NextCloud server op OpenSUSE 42.3

Filed under: — cybrarian @ 6:21 pm

Nextcloud

Op huidige OpenSUSE?

Nextcloud is aanwezig in de openSUSE repositories (momenteel met versienummer 11.0.3), en kan daar eenvoudig uitgekozen worden, zowel server als client.

Er wordt bij Nextcloud server ook sqlite3, php5, apache en een akonadi plugin geïnstalleerd, in totaal 154.91 MB.

Je hebt een webserver nodig, die draait:

systemctl start apache2
linux-4j3c:~ # systemctl enable apache2
Created symlink from /etc/systemd/system/httpd.service to /usr/lib/systemd/system/apache2.service.
Created symlink from /etc/systemd/system/apache.service to /usr/lib/systemd/system/apache2.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/apache2.service to /usr/lib/systemd/system/apache2.service.

En een databank*:

linux-4j3c:~ # systemctl start mysql.service
linux-4j3c:~ # systemctl enable mysql.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mysql.service to /usr/lib/systemd/system/mysql.service.

Indien vers geïnstalleerd eventueel onnodige veiligheidsrisico’s uitschakelen met:
mysql_secure_installation

Na installatie is de server via de browser te bereiken:

http://my.server.ip.address/nextcloud

Foutje

De browser toont het antwoord:

This version of Nextcloud requires at least PHP 5.6.0
You are currently running 5.5.14. Please update your PHP version.

In de openSUSE package manager zijn ter twee php versies aanwezig: 5 en 7.

Helaas, als je php 7 installeert (apache2-mod_php7) en apache herstart, lijkt het nadien of je apache de .php scripts ziet als gewone tekst bestanden. In Firefox laat dat de gebruiker die php bestanden downloaden in plaats dat ze uitgevoerd worden en de gebruiker het resultaat te zien krijgt.

Dat kan er op wijzen dat apache de php module niet geladen heeft. Wat nazoekwerk leidt me naar een bestand in de php7 installatie, dat eigenaardig genoeg verwijst naar php5, maar dan moet php7 al gevonden zijn. (/etc/php7/apache2/php.ini)

Ik zoek verder hoe de apache website de php module laadt; en in het configuratiebestand van Apache2 staat inderdaad enkel het aanroepen van php5 (die niet meer geïnstalleerd is); het installeren van 7 heeft dit niet gewijzigd.
Dus met de hand aanpassen van 5 naar 7 (bv met mcedit):

mcedit /etc/sysconfig/apache2

Apache herstarten:

systemctl stop apache2
systemctl start apache2

Eventueel controleren met journalctl -u apache2

Daarna terug naar de browser:

http://localhost/nextcloud/

De blauwe startpagina verschijnt!

NextCloud configuratie

De volgende vragen of opties komen op je af in het openingsscherm:

Om een admin account te maken: gebruiker, wachtwoord.

Databank kiezen;
standaard SQLite met data in /srv/www/htdocs/nextcloud

Als je MySQL/MariaDB kiest moet je databank -naam, -gebruiker, -wachtwoord geven,
En de server opgeven; “localhost” staat vooraf ingevuld.

* Er wordt aangeraden om voor professioneel gebruik, met synchronisatie vanuit verschillende desktops eerder MySQL/MariaDB te gebruiken dan de ingebouwde bestanden-databank.

In het invulscherm is niet aangegeven of de databankgegevens vooraf moeten aangemaakt worden op de server, of dat door installatie gebeurt, maar dat is dus inderdaad het geval; anders krijg je een foutmelding: … access denied for user at localhost…

Na het aanmaken van de gebruikersaccounts in Nextcloud kom je op de volgende welkom-pagina:

http://localhost/nextcloud/index.php/apps/files/?dir=/&fileid=2

a safe home for all your data

Access & share your files, calendars, contacts, mail & more from any device, on your terms

.. waarachter een “desktop” pagina zichtbaar wordt met
– een kolom met All Files/Recent/Favorites/Shared…/Tags
– een kolom met mappen Documents en Photos en de bestanden Nextcloud.mp4 en Nextcloud Manual.pdf (die 63 blz is).

In de databank zijn dan 48 tabellen aangemaakt, telkens van de vorm “oc_*”.

Op de webserver ziet het er zo uit:

/srv/www/htdocs/nextcloud # ls
3rdparty AUTHORS console.php cron.php db_structure.xml index.html l10n occ ocs-provider remote.php robots.txt settings themes .user.ini
apps config core data .htaccess index.php lib ocs public.php resources search status.php updater version.php


Uitleg: https://en.opensuse.org/SDB:Nextcloud
En ouder al : https://lizards.opensuse.org/2016/10/28/nextcloud-installation-on-opensuse-leap/

16/9/2017

Mysql, MariaDB databank: welk type sleutel of id, en hoe groot?

Filed under: — cybrarian @ 10:27 am

Hoe groot kan een id worden? Meestal zet je de waarde van de sleutel op auto-increment.
Maar je wil liefst niet verrast worden door een databank waar je geen records meer kan toevoegen.

UNSIGNED INT: 4.294.967.295
UNSIGNED BIGINT: 18.446.744.073.709.551.615

Ik zie aangeraden worden om
– niet te spaarzaam te zijn op ruimte
– werk je op een 32 bit of 64 bit systeem?
– UNSIGNED te gebruiken als het kan; als je niet van plan bent om negatieve waarden te gebruiken kan je het bereik van een type als INT of BIGINT verdubbelen.
– INT(8) of INT(44) maakt geen verschil, aangezien dat getal enkel slaat op de weergave van de getallen, niet op de (maximum) waarde.

Waarschijnlijk is het niet slecht om in je applicatie een test in te bouwen bij het aanmaken van records, en het niet kunnen maken van een nieuw record op te vangen met een foutafhandeling. Maar zelfs dan kan het moeilijk worden om je applicatie overeind te houden, en levert het zeker problemen op voor de gebruiker. Misschien iets inbouwen voor als je in de richting van het maximum gaat?

8/9/2017

phpMyAdmin logt uit na 1440 seconden

Filed under: — cybrarian @ 9:22 am

Het is nu eenvoudig om de instelling van phpMyAdmin te veranderen zonder zelf in de configuratie bestanden te moeten gaan zoeken:

  • Start phpMyAdmin, log in
  • Kies het hoofdscherm (bv server:localhost) met General Settings en Appearance settings in het midden, en Database server – Web server – phpMyAdmin in de rechterkolom
  • Appearance settings, klik onderaan op “More settings”
  • Klik op het tweede tabblad met een steeksleutel: “Features”
  • Login cookie validity (seconden): verander 1440 naar een gepast getal.
  • Klik “Apply” om te bevestigen.

Helaas is deze instelling enkel geldig voor de huidige sessie!

Voor een meer permanente moet je toch op de server zijn:

In config.inc.php :
$cfg['LoginCookieValidity'] = 36000;

en in .htaccess bestand in de phpMyAdmin site:
php_value session.gc.maxlifetime 36000

Voor het gemak wat omrekeningen:

1140 seconden = 24 minuten
3600 seconden = 1 uur
28800 seconden = 8 uur
86400 seconden = 24 uur
432000 seconden = 5 dagen.

enz.

16/3/2017

PostgreSQL

Filed under: — pinguim @ 1:25 pm

Postgres

Een databank met SQL-taal, PostgreSQL – soms afgekort tot Postgres (vroegere naam Postgres95, Postgres verwees naar Ingres), is ontworpen voor gebruik op unix-achtige systemen, en is beschikbaar in de meeste Linux distributies, bij hosting providers enz.

LAMP?

De PostgreSQL wereld vertaalt de LAMP afkorting anders dan “Linux Apache MySQL Php”, en eigenlijk is hun afkorting zelfs logischer: Linux Apache Middleware PostgreSQL, waarbij Middelware staat voor de taal, bv php, python, …

De clients

Er zijn verschillende clients, als psql (commmandolijn), pgAdmin3, en phpPgAdmin.

  • psql

    Deze werkt pas als alles juist geconfigureerd is (zie PostgreSQL installeren)

    postgres@linuxbox:~> psql

    psql (9.4.9)
    Type "help" for help.
     
    postgres=#

    Of geef opties als:
    cybr@linuxbox:~> psql -d mydatabase
    cybr@linuxbox:~> psql -U myusername

    zoniet :
    psql

    psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket “/tmp/.s.PGSQL.5432”?

    psql

    psql: FATAL: role “myusername” does not exist

    (als je geen username opgeeft wordt standaard de linux user gebruikt)

    psql: FATAL: database “cybr” does not exist

    (als je geen database opgeeft en die van de user die dan als standaard genomen wordt, niet bestaat)

  • pgAdmin3 of pgAdminIII?

    Op commandolijn starten met :
    pgAdmin3
    wat een applicatie start (met een olifantfoto), en als titel heeft “pgAdminIII”

WebInterface

De bijhorende web-interface (vergelijkbaar met phpMyAdmin) is phpPgAdmin.
http://localhost/phpPgAdmin/

En MySQL?

Kan PostgreSQL geïnstalleerd worden op dezelfde server waar al een MySQL databank draait? Ja, in principe wel. Maar een praktijkvoorbeeld leert toch voorzichtig te zijn met je productieserver; bij na-installatie van postgreSQL op een bestaande distributie, eindigde ik met een fout die de webserver verhinderde te starten:
Syntax error on line 15 of /etc/apache2/conf.d/phpPgAdmin.conf
Dit heeft blijkbaar met phpPgAdmin te maken, en waarschijnlijk niets met PostgreSQL op zich, maar het effect is duidelijk.
Het heeft ook te maken met de distributie OpenSUSE 13.1, en de standaard daarin niet geladen Apache module mod_version.
Het is even snel verholpen door het toevoegen van die module in de apache configuratie /etc/sysconfig/apache2:

APACHE_MODULES=”… version”

Dan wordt het iets als:

# fairly minimal
# APACHE_MODULES=”authz_host alias auth dir log_config mime setenvif”
#
# apache’s default installation
# APACHE_MODULES=”authz_host actions alias asis auth autoindex cgi dir imap include log_config mime negotiation setenvif status userdir”
# your settings
APACHE_MODULES=”actions alias auth_basic authn_file authz_host authz_groupfile authz_user autoindex cgi dir env expires include log_config mime negotiation setenvif ssl userdir reqtimeout authn_core authz_core version”

De server

Installeer in Suse via Yast, zoek “postgreSQL” of
zypper in postgresql94 postgresql94-contrib postgresql94-server

Starten gebeurt net als bij de andere servers als root met:

systemctl start postgresql

Check systemctl status postgresql

systemctl status postgresql
postgresql.service – LSB: Start the PostgreSQL master daemon
Loaded: loaded (/etc/init.d/postgresql)
Active: active (exited) since Mon 2017-03-13 11:13:32 CET; 10s ago
Process: 12947 ExecStart=/etc/init.d/postgresql start (code=exited, status=0/SUCCESS)

Mar 12 11:13:26 pgbox su[12963]: (to root) root on (null)
Mar 12 11:13:31 pgbox postgresql[12947]: Initializing PostgreSQL 9.2.14 at location /var/lib/pgsql/data..done
Mar 12 11:13:31 pgbox su[13034]: (to root) root on (null)
Mar 12 11:13:31 pgbox su[13069]: (to root) root on (null)
Mar 12 11:13:32 pgbox postgresql[12947]: Starting PostgreSQL 9.2.14 ..done
Mar 12 11:13:32 pgbox systemd[1]: Started LSB: Start the PostgreSQL master daemon.

Installatie

Zie PostgreSQL installeren

Gebruik (verschil MySQL/MariaDB)

EN-talig bondig overzicht op deze digital ocean site

Schema
In MySQL heb je een database, die verschillende tables bevat.
In PostgreSQL heb je een database, die bevat een Schema, dat bevat Tables
database.schema.table
Zonder er op te letten heb ik mijn tables in het schema “public” gemaakt.

Tabel
– “without OIDS” staat standaard aan in phpPgAdmin (**)
– Tabel zit in een Schema (database.schema.table)
– Tabel kan gemaakt worden “LIKE parent_table” (create table like ..) dan wordt die structuur al volledig overgenomen
– Tabel kan gemaakt worden met INHERITS; dat creëert een band

Veldtypes
veld “auto-increment” -> veld Type SERIAL (*)
veldtype int -> veld Type integer
veldtype varchare -> veld Type character varying (er bestaat ook Type text)
veldtype float -> numeric (voor geldbedragen, exact), anders float (inexact)
veldtype datetime -> timestamp (without time zone?).

*) SERIAL :

  • bij het maken van de tabel, creatie van het veld, kan SERIAL worden opgegeven (is eerste keuze in lijst phpPgAdmin types); dan wordt automatisch al het nodige gedaan (en wordt het uiteindelijk toch type integer). Je moet daar verder geen type, lengte, of zo bij opgeven, wel eventueel “Primary key” aanduiden.
  • Bij SERIAL wordt automatisch NOT NULL ingevuld.
  • Als je eerst integer kiest, kan je nadien niet wijzigen naar SERIAL! (je moet dan het veld verwijderen en opnieuw maken)
  • **) OIDS: Vroeger kon je in PostgreSQL ook tabellen maken zonder “id”, en toch individuele rijen aanspreken omdat PostgreSQL zelf een soort Object IDentifierS aanmaakte, die je expliciet kon opvragen en gebruiken. Nu maak je normaal tabellen met optie WITHOUT OIDS.

Commando’s

\l = show databases
\d = show tables
\d = show tables
\d table = show columns
\d+ table = describe table

14/3/2017

PostgreSQL installeren, configureren

Filed under: — cybrarian @ 11:48 pm

zie ook ons PostgreSQL artikel

Ik volg een (openSUSE) installatie met dit Engelstalig artikel, en vat het ook even samen…
https://www.howtoforge.com/tutorial/how-to-install-postgresql-and-phppgadmin-on-opensuse-leap-42.1/#step-install-postgresql

Opm: Ik installeerde via Yast ipv met zypper; zoek “postgres” en je krijgt heel wat opties; installeer de server, de client, de management tool pgadmin3, de webtool phpPgAdmin, de odbc- en libreoffice-drivers, … De server heeft het versienummer in de naam (postgresql94), de client niet (postgresql).

  • Leap 42.2 – postgresql94 – postgres – pgadmin .. – phpPgAdmin ..
  • openSUSE 13.1 – postgres92 (9.2) – postgres (psql 9.2) – pgadmin3 1.16 – phpPgAdmin 5.0.4

Starten doe je zo:

systemctl start postgresql
vroeger: /etc/init.d/postgresql start

… en checken of hij draait in details als (* volledig log zie onderaan):

linuxbox:/home/cybr # systemctl status postgresql

postgresql.service - PostgreSQL database server
Active: active (running) since Tue 2017-03-14 22:01:20 CET; 9s ago

linuxbox:/home/cybr # journalctl -u postgresql

Mar 14 22:01:19 linuxbox postgresql-init[4956]: 2017-03-14 22:01:19 CET HINT: Future log output will appear in directory "pg_log".
Mar 14 22:01:20 linuxbox systemd[1]: Started PostgreSQL database server.

Met veel details en uitleg:

ps aux|grep postgres

wat de hiërarchie toont van de processen (=> pid hoofdproces):

ps -AH|grep postgres

Bij installatie is er een user postgres gemaakt op de server;
compgen -u
je moet werken als die gebruiker om verder te configureren (als root wordt niet toegelaten in de standaard configuratie):

linuxbox:/home/cybr # su - postgres

postgres@linuxbox:~>

Start de commandolijn “client” psql:

postgres@linuxbox:~> psql

psql (9.4.9)
Type "help" for help.
 
postgres=#

Zet eerst een wachtwoord:

postgres=# \password postgres

Enter new password:
Enter it again:
postgres=#

Je geraakt uit de postgres commandolijn met \q

Maak, nog steeds als postgres user op je Linux systeem een nieuwe gebruiker en rol aan, en geef hem ineens superkrachten (en een database):

createuser -s nano
createdb nano_db

Geen reaktie = geen foutmeldingen.
Dan terug inloggen in psql en:

postgres=# alter user nano with encrypted password 'nano2test';

ALTER ROLE

postgres=# grant all privileges on database nano_db to nano;

GRANT


Op een andere terminal pas je de instellingen aan om op een publiek ip adres te luisteren, zodat je vanop een andere computer toegang krijgt, of een applicatie toegang kan geven.

mcedit /var/lib/pgsql/data/postgresql.conf

en wijzig de gepaste lijnen naar:

listen_addresses = 'localhost'
port = 5432

En dan de wachtwoordcontrole naar md5:

mcedit /var/lib/pgsql/data/pg_hba.conf

(de oude standaard waarde staat er nog boven)

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
# local all all peer
local all all md5
# IPv4 local connections:
# host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
# host all all ::1/128 ident
host all all ::1/128 md5

en herstart de server:

systemctl restart postgresql

Om phpPgAdmin toegang te geven:

mcedit /etc/phpPgAdmin/config.inc.php

en vul de localhost in:

$conf['servers'][0]['host'] = '';

naar

$conf['servers'][0]['host'] = 'localhost';

Bovendien heeft Apache wat extra activatie nodig; check of php5 en version geladen zijn:

a2enmod -l

Indien niet:

a2enmod php5
a2enmod version

Herstart apache en postgresql.

In phpPgAdmin (http://localhost/phpPgAdmin/)
kreeg ik voordien te zien:

Attempt to connect with invalid server parameter, possibly someone is trying to hack your system.

Maar nu krijg ik netjes een welkom, een taalkeuze en als ik op Servers klik:

Server Host Port Username Actions
PostgreSQL localhost 5432

Ik kan nu (op PostgreSQL klikken en) inloggen met de voorheen gemaakte nano account. Ik zie de nano_db database en postgres (default administrative connection database).
Inloggen met de administratieve account postgres gaat niet! (maar dat is dus de bedoeling).

En de server terug stoppen:

systemctl stop postgresql
(daarna werkt natuurlijk phpPgAdmin niet meer, en blijft hangen op : “Login to PostgreSQL”)

Klaar!

(en nu misschien eens proberen te gebruiken vanuit Gambas?)

– – –
* vervolg starten/checken server:
(meer…)

7/3/2017

LAMP commando’s (kort)

Filed under: — cybrarian @ 11:40 am

LAMP
= Linux + Apache + MySQL/*/MariaDB + Php
als de databank postgreSQL is: Linux Apache Middleware PostgreSQL (zie)
Apache en de databank zijn de serverdiensten.
Voorbeeld voor openSUSE 42.2

Werking

systemctl start mysql
journalctl -u mysql

systemctl start apache2
journalctl -u apache2

Ook:
systemctl stop apache2
systemctl restart apache2

Ook:
systemctl status apache2

http://localhost/phpMyAdmin

ps: Behalve de diensten manueel opstarten, kunnen ze ook zelfstartend ingesteld worden.

Installatie

Als de servers nog niet geïnstalleerd zijn, installeren. Dan:
which mysql

/usr/bin/mysql

Voor de Apache webserver is het:
which httpd

/usr/sbin/httpd

En phpMyAdmin kan je zo helemaal niet vinden, want die installeert als een php programma in de webserver:

/srv/www/htdocs/phpMyAdmin

met configuratiebestanden:

/etc/apache2/conf.d/phpMyAdmin.conf
/etc/phpMyAdmin
/etc/phpMyAdmin/config.inc.php

Initialisatie MySQL/MariaDB

Je moet eerst de mysql server starten alvorens je dit script kan draaien (zie ook de meldingen in journalctl -u mysql na het starten van systemctl start mysql):

mysql_secure_installation

  • wachtwoord zetten (gebeurt in die mysql_secure_installation, alsook het verwijderen van anonieme gebruikers, het verbieden van een afstandlogin als root en het verwijderen van de testtabellen).
  • Firewall openzetten: Allowed Service: MySQL server (standaard poort 3306)
  • Luisteren naar buitenwereld? mcedit /etc/my.cnf zoek “skip-networking”, # skip-networking
  • Gebruiker maken en met rechten vanaf zijn ip-adres in MySQL users.

Gebruik

  • Om phpMyAdmin te kunnen gebruiken heb je Apache nodig.
  • Om meer dan alleen op de localhost te kunnen inloggen op phpMyAdmin/Apache moet er een opening in de firewall zijn voor de webserver (bv via Yast):

    Allowed Service: HTTP server (standaard op poort 80).

  • mysql: vanuit programma’s met mysql-users; vanop localhost en/of ip-address en/of % (alle adressen)


Zelfstartend

In het systeembeheer kan nagekeken worden of de serverdiensten automatisch opstarten:
OpenSUSE, Yast, System, Services Manager: “enabled“=start bij opstarten Linux server.
bv. apache2 Enabled, Active en mysql Enabled, Active (active=huidige toestand).

De knop “Show Details” geeft ook een heel mooie samenvatting:

Apache, niet aktief:

Service apache2 Full Info

* apache2.service - The Apache Webserver
Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled; vendor preset: disabled)
Active: inactive (dead)

Apache aktief:

* apache2.service - The Apache Webserver
Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2017-03-23 10:21:03 CET; 10s ago
Main PID: 20519 (httpd-prefork)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
Tasks: 6
CGroup: /system.slice/apache2.service
|-20519 /usr/sbin/httpd-prefork -f /etc/apache2/httpd.conf -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d/ -DSYSTEMD -DFOREGROUND -k start
|-20592 /usr/sbin/httpd-prefork -f /etc/apache2/httpd.conf -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d/ -DSYSTEMD -DFOREGROUND -k start
|-20593 /usr/sbin/httpd-prefork -f /etc/apache2/httpd.conf -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d/ -DSYSTEMD -DFOREGROUND -k start
|-20594 /usr/sbin/httpd-prefork -f /etc/apache2/httpd.conf -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d/ -DSYSTEMD -DFOREGROUND -k start
|-20595 /usr/sbin/httpd-prefork -f /etc/apache2/httpd.conf -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d/ -DSYSTEMD -DFOREGROUND -k start
`-20597 /usr/sbin/httpd-prefork -f /etc/apache2/httpd.conf -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d/ -DSYSTEMD -DFOREGROUND -k start

Mar 23 10:21:03 pencoed systemd[1]: Starting The Apache Webserver...
Mar 23 10:21:03 pencoed systemd[1]: Started The Apache Webserver.

Mysql aktief:

Service mysql Full Info

* mysql.service - MySQL server
Loaded: loaded (/usr/lib/systemd/system/mysql.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2017-03-23 09:47:05 CET; 8min ago
Process: 3651 ExecStartPost=/usr/lib/mysql/mysql-systemd-helper wait (code=exited, status=0/SUCCESS)
Process: 3639 ExecStartPre=/usr/lib/mysql/mysql-systemd-helper upgrade (code=exited, status=0/SUCCESS)
Process: 3630 ExecStartPre=/usr/lib/mysql/mysql-systemd-helper install (code=exited, status=0/SUCCESS)
Main PID: 3650 (mysqld)
Tasks: 23 (limit: 512)
CGroup: /system.slice/mysql.service
`-3650 /usr/sbin/mysqld --defaults-file=/etc/my.cnf --user=mysql

Mar 23 09:46:57 pencoed systemd[1]: Starting MySQL server...
Mar 23 09:47:02 pencoed mysql-systemd-helper[3650]: 170323 9:46:59 [Note] /usr/sbin/mysqld (mysqld 10.0.29-MariaDB) starting as process 3650 ...
Mar 23 09:47:02 pencoed mysql-systemd-helper[3651]: Waiting for MySQL to start
Mar 23 09:47:05 pencoed mysql-systemd-helper[3651]: MySQL is alive
Mar 23 09:47:05 pencoed systemd[1]: Started MySQL server.

26/2/2017

MariaDB, waar is /var/log/messages ?

Filed under: — cybrarian @ 11:22 pm

Op een recent geïnstalleerde Linux server installeer ik mariadb, en zoek ik hoe de database te starten en hoe te kijken of ze gestart is. Ze heet waarschijnlijk niet meer “mysql”? Of toch? En Apache?

MySQL / MariaDB

MariaDB na installatie starten:

systemctl start mysql

Check of ze gestart is:
cat /var/log/messages ? Zo was het vroeger.
Sinds de overgang naar systemctl is ook de systeemlog gewijzigd naar journalctl. Dat commanda op zich opent een nogal heel grote tekst-log-file waarin je zonder filteren niet veel bent.

Uitleg en opties:
man journalctl

journalctl -u myqsl

Elke lijn begint met de tijd, hostname, en de bron van de loglijn; er uit met q van quit.
Feb 26 23:00:39 myhost mysql-systemd-helper[3186]:
(ik heb die hieronder vervangen door _ om het wat overzichtelijker te houden)

Starting MySQL server…
_ Creating MySQL privilege database…
_ Installing MariaDB/MySQL system tables in ‘/var/lib/mysql’ …
_ 170226 23:00:40 [Note] /usr/sbin/mysqld (mysqld 10.0.29-MariaDB) starting as process 3225 _ OK
_ Filling help tables…
_ 170226 23:00:51 [Note] /usr/sbin/mysqld (mysqld 10.0.29-MariaDB) starting as process 3252 …
_ OK
_ PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
_ To do so, start the server, then issue the following commands:
_ ‘/usr/bin/mysqladmin’ -u root password ‘new-password’
_ ‘/usr/bin/mysqladmin’ -u root -h myhost password ‘new-password’
_ Alternatively you can run:
_ ‘/usr/bin/mysql_secure_installation’
_ which will also give you the option of removing the test
_ databases and anonymous user created by default. This is
_ strongly recommended for production servers.
_ See the MariaDB Knowledgebase at http://mariadb.com/kb or the
_ MySQL manual for more instructions.
_ You can start the MariaDB daemon with:
_ rcmysql start
_ You can test the MariaDB daemon with mariadb-test package
_ Please report any problems at http://mariadb.org/jira
_ The latest information about MariaDB is available at http://mariadb.org/.
_ You can find additional information about the MySQL part at:
_ http://dev.mysql.com
_ Consider joining MariaDB’s strong and vibrant community:
_ https://mariadb.org/get-involved/
_ Waiting for MySQL to start
_ 170226 23:00:54 [Note] /usr/sbin/mysqld (mysqld 10.0.29-MariaDB) starting as process 3289 …
_ MySQL is alive
Feb 26 23:00:55 myhost systemd[1]: Started MySQL server.

Check eigen mariadb server log:
cat /var/log/mysql/mysqld.log

En dan nog steeds het veilig in gebruik stellen van mariadb/mysql:
mysql_secure_installation

Apache

ps: Hetzelfde geldt voor apache, moest dat de volgende vraag zijn:

systemctl start apache

En eigenlijk is het apache2 natuurlijk, dus vind je het in de logs als:

journalctl -u apache2

Na installatie van phpMyAdmin apache stoppen en terug starten:

systemctl stop apache
systemctl start apache

of
systemctl restart apache2

22/2/2015

Databank collation (bv mysql): utf8-belgisch-ci ?

Filed under: — cybrarian @ 11:04 pm

Bij het maken van een nieuwe databank in MySQL (& -achtigen) moet je kiezen welke “collation” je wil.
Dit is de taalgevoeligheid van de databank, en komt tot uiting in sorteringen.
Voor een toepassing die enkel van belang is voor je eigen taalgroep, kies je voor een UTF8-islandic-ci (bv). Maar er komt geen “Belgisch” voor, en evenmin “Frans” of “Nederlands” of “Vlaams”, indien het al wenselijk zou zijn.

In de lijst zie je dikwijls de uitgang “_ci”: die staat voor Case Insensitive; dwz hoofdletter-ongevoelig. Dat kan een voordeel zijn bij sorteren komt “Dit” en “dit” bijeen te staan.

De meer algemene systemen zijn:
– utf8_general_ci : behandelt alle tekens als ASCII, dus behandelt “A” en “a” hetzelfde, en zet om: ù als u; mogelijk iets sneller, en mogelijk de standaard instelling (mysql 5.x)
– utf8-bin : hoofdlettergevoelig.
– utf8_unicode_ci : sorteert wel rekening houdend met aantal eigen taal-letters, bv Duitse “ß” als “ss”, niet hoofdlettergevoelig.

De twee laatsten lijken de meest aangewezen, naargelang de inhoud van de data.

  • Voor puur abstracte dingen als random productcodes wil je misschien onderscheid maken tussen hoofd- en kleine letters, en vooral tussen een mét een accent en een zonder in een lijst met sleutelwaarden (key-values); dus utf-bin.
  • Voor meer algemene tekst-data waar woorden of namen in voorkomen, voor Engels/Nederlands/Frans/Duits, is utf8_unicode_ci waarschijnlijk het handigst.

27/4/2014

Apache mysql/mariadb phpMyAdmin openSUSE 13.1

Filed under: — cybrarian @ 2:13 am

In openSUSE 13.1 is het allemaal voorzien, en eenvoudig te installeren via het menu Installa/Remove Software, of dezelfde optie in Yast (1), of natuurlijk via zypper (4). Na installatie de servers starten (2), en extra instellingen doen (3).

1. Installatie
In Yast, in het tabblad Search zoek je naar:

  • mysql

    • mysql-community-server

    met bijhorende bestanden, uit Oss/update repo

  • Ofwel, wat eerder de standaard vervanging voor mysql is, maar waarvoor je anders moet zoeken:
    mariadb

    • mariadb Server part of MariaDB

    met bijhorende bestanden, uit Oss/update repo; verder volledig te gebruiken als mysql – er zijn nodige links voorzien om het gebruik transparant te maken. Zo zullen voor phpMyAdmin, Gambas, enz nog programmaonderdelen met de naam “mysql…” voorkomen.

  • apache
    • apache2 The Apache Web Server Version 2.2

    en een aantal bijhorende bestanden, uit Oss/update repo (er zijn wat verschillende versies beschikbaar, bv 64 bit ea)

  • php

    • apache2-mod_php5 PHP5 module for Apache 2.0

    en een aantal bijhorende bestanden, uit oss/update, overeenkomende versie met Apache.

  • phpMyAdmin

    • phpMyAdmin Administration of MySQL over the web – 4.1.8

    bij deze versie van openSUSE dus aanwezig in de gewone repositories (Oss/update)

  • Nb: Volgorde
    Als je achteraan begint, bij phpMyAdmin, worden waarschijnlijk ineens de webserver, php, en de database mee geïnstalleerd uit de afhankelijkheden.

2. Starten en checken van de servers
Starten van servers gebeurt momenteel in openSUSE met systemcontrol:

  • systemctl start mysql.service
  • op de commandolijn kan je nu verbinden met mysql of mysqladmin
  • Nb: Hoewel mariadb geïnstalleerd is, wordt mysql.service aangeroepen, en de client mysql gebruikt.

  • systemctl start apache2.service
  • Vroeger kreeg je daarna in je browser een leuke welkom-pagina te zien bij openSuse, maar de frivoliteit is er wat af als je nu naar http://localhost gaat; je wordt afgesnauwd met “Access forbidden!”. Dat betekent niet dat je installatie niet werkt; integendeel. Onderaan zie je “Apache/2.4.6 (Linux/SUSE)”; het is je Apache die deze foutmelding geeft omdat er nog geen inhoud is.

3. Instellingen

  • Mysql/mariadb
    De databaseserver moet in het begin minstens voorzien worden van een wachtwoord voor de beheerder of root (in de betekenis van root voor de database, hoeft niet overeen te komen met die van het systeem). Zolang dat niet is ingesteld zal phpMyAdmin weigeren te werken:

    Login without a password is forbidden by configuration (see AllowNoPassword)

    Er is een scriptje voorzien om mysql/mariadb in te stellen, te draaien als root:

    mysql_secure_installation

    Verloop:

    • Geef het wachtwoord voor de databank als je het al gezet zou hebben; zoniet enter
    • Kies een wachtwoord voor de beheerder of root user van de databank; herhaal het. Je ziet uit de reaktie dat het wachtwoord is geupdate, en de rechten herladen worden.
    • Kies om de anonieme gebruiker te verwijderen (Y)
    • Uitschakelen van inloggen op afstand voor root gebruiker (Y voor online systeem; voor lokale installatie kan je het voor het gebruiksgemak laten aanstaan als dat nodig is. Of maak een eigen extra gebruiker aan met de nodige rechten zodat je toch root kan buitensluiten)
    • Verwijder de standaard aanwezige test databank: (Y); maak zel zelf aan als je ze nodig hebt, met een eigen relevante naam die aangeeft wat je aan het testen bent, dan kan je gemakkelijker opkuisen nadien.
    • De laatste stap is het bevestigen van het herladen van de rechten
  • PhpMyAdmin

    In je brower, bv Firefox, kan je nu inloggen op phpMyAdmin, vanop hetzelfde toestel http://localhost//phpMyAdmin

    Opmerkingen:
    Je krijgt onderaan een foutmelding die doorverwijst naar documentatie, bv over de Server relation.
    Maar niet alle documentatie lijkt aanwezig, ik miste bv http://localhost/phpMyAdmin/pmadb
    Een online link met interessante uitleg daarover is http://wiki.phpmyadmin.net/pma/control_user
    Een goed begin is waarschijnlijk het configuratie bestand aanpassen of maken config.inc.php (zie setup doc).

4. Zypper:
Goede Engelstalige uitleg met gebruik van zypper commandolijn-tool.
http://www.unixmen.com/install-lamp-server-apache-mariadb-php-opensuse-13-1/

30/8/2013

MySQL server draait door

Filed under: — pinguim @ 11:28 am

Een Proliant ML server staat lawaaierig te blazen, alsof hij het heel warm heeft. Hij werkt nog normaal, maar een blik op het processorgebruik toont dat één van de twee processoren aan 100% zit te werken. De tweede processor heeft percentages die meegaan met het starten van taken op de server, vandaar dat het niet echt direkt merkbaar is. Maar wat veroorzaakt die drukte?

De processentabel verraad dat MySQL draait aan 50% continue; wat overeen kan komen met 1 van de 2 processoren. De programma’s op de server die MySQL gebruiken draaien nog en reageren normaal (binnen lage belasting op het moment weliswaar).

Inloggen op de server.
Inloggen in MySQL: mysql -u root -p

In de mysql prompt kan je dan weer naar de processen kijken:
mysql> SHOW PROCESSLIST;

Dat geeft een typische mysql-tabel met een aantal kolommen: Id, user, Host, db, Command, Time, State en Info.

De lijnen bestaan uit de processen.

Ze hebben een nummer, net als de processen in Linux.
Je kan ze ook “killen” op dezefde manier.

Zoek het proces dat het probleem vormt en overweeg of het kwaad kan om het te verwijderen.

In mijn geval was het een sql-statement dat ik uitgeprobeerd had in phpMyAdmin, op zoek naar gegevens de dag voordien; en er zat waarschijnlijk een fout in de query waardoor die eeuwig duurt en het antwoord gigantisch groot wordt. Kill dus!

mysql> KILL 3357;

Query OK, 0 rows affected (0.04 sec)

Daarna is het process verdwenen uit de tabel.

+------+--------+-----------+--------+---------+-------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+--------+-----------+--------+---------+-------+-------+------------------+
| 161 | bacula | localhost | bacula | Sleep | 25525 | | NULL |
| 3438 | cms | localhost | CMS | Sleep | 2114 | | NULL |
| 3439 | cms | localhost | CMS | Sleep | 1224 | | NULL |
| 3440 | cms | localhost | CMS | Sleep | 4353 | | NULL |
| 3441 | cms | localhost | CMS | Sleep | 4334 | | NULL |
| 3442 | cms | localhost | CMS | Sleep | 3094 | | NULL |
| 3443 | cms | localhost | CMS | Sleep | 2217 | | NULL |
| 3444 | cms | localhost | CMS | Sleep | 2137 | | NULL |
| 3445 | cms | localhost | CMS | Sleep | 2244 | | NULL |
| 3446 | cms | localhost | CMS | Sleep | 4148 | | NULL |
| 3447 | cms | localhost | CMS | Sleep | 2282 | | NULL |
| 3448 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+------+--------+-----------+--------+---------+-------+-------+------------------+

Onderaan zie je het commando zelf, erboven applicaties zoals het backup programma bacula en een cms toepassing.

Upd 2018-02:

Je kan informatie van de (ook mariadb) server krijgen:

mysqladmin -uroot -p pr

pr is afkorting van “processlist” (toont lijst van aktieve “threads” in de server)

Je kan hier zien in welke “state” een process is.

Powered by WordPress