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…

29/4/2022

Datums meenemen

Filed under: — cybrarian @ 9:16 am

Kopiëren van één pc/server naar andere
scp kopieert van .. naar .. over het netwerk, met encryptie (s = secure).
Je hebt het wachtwoord van de gebruiker op de andere computer nodig.

scp mapopdezecomputer/bestand.ext user@anderecomputer:/map

of van andere computer naar de huidige locatie ./ op deze computer:

scp username@andere:/map/bestand.txt ./

Bestand
Bv een configuratiebestand:

root@deze:/etc/apache2/sites-available#
scp root@andere.copyleft.loc:/etc/apache2/sites-available/copyleft.conf ./

Mappen met inhoud
van een webserver naar een andere:

root@deze:/var/www/html#
scp -r root@andere.copyleft.loc:/var/www/html/copyleft ./

Met behoud van datum

scp -rp
p van preserve: datum, tijd, mode

27/4/2022

MariaDb zonder root: en phpMyAdmin dan?

Filed under: — cybrarian @ 11:54 am

Op 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.
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!

6/4/2022

Spreken met Linux

Filed under: — cybrarian @ 11:43 pm

Altijd leuk om een langdurig backupscript van een server zelf zijn einde te laten aankondigen.
Of je laptop die je erop wijst dat je lang genoeg gewerkt hebt vanuit een script dat je inlogtijd monitort.
Of iets met je domotica.

Ubuntu
spd-say
(was standaard aanwezig in mijn 18.04 LTS, weet niet of het ooit bij-geïnstalleerd is of werkelijk standaard is).

Vb: spd-say 'Dat is lang genoeg'
De uitspraak gebeurt met Engelstalige klanken, maar het is redelijk verstaanbaar.

Suse
espeak
Maar die is ondertussen vervangen door de “next generation” espeak-ng.

Vb: espeak-ng "tijd om te gaan slapen"
Natuurlijk ook hier Engelstalige klanken, “slapen” klinkt als “slijpen”.

Je kan er zelf natuurlijk op inspelen, en de zin opgeven met wat Engelstalige “hacks”:

espeak-ng "teight om the gahn slathpen"

Klinkt beter!

17/3/2022

cifs: mount is niet beschijfbaar

Filed under: — cybrarian @ 9:50 am

Een nieuwe installatie (openSUSE 15.3 cifs-utils 6.9-5.12.1) gaf me het probleem van het mounten van een netwerkdrive van een oudere server.
Ik had voordien al vers=1.0 moeten toevoegen om de mount nog te doen werken, maar ik merkte nu dat ik niet meer kon schrijven op de server, nog wel lezen.

sudo mount -t cifs -o rw,uid=cybrarian,username=cybrarian,password=******,vers=1.0 //server.copyleft.loc/cybrarian/ /home/cybrarian/Netwerk/

Als ik de directory listing bekijk, zie ik dat de user niet ingevuld staat met naam, maar enkel met nummer 502

ls -lFA

drwxr-xr-x+ 4 502 502 0 20 mei 2020 test/

Op https://serverfault.com zag ik een parameter die ik nog niet gebruikt had: “forceuid”.
Toegepast:

sudo mount -t cifs -o rw,uid=cybrarian,forceuid,username=cybrarian,password=******,vers=1.0 //server.copyleft.loc/cybrarian/ /home/cybrarian/Netwerk/

Werkt weer: ik kan terug schrijven op de netwerkdrive; username wordt ook weergegeven in directorylist:

drwxr-xr-x+ 4 cybrarian 502 0 20 mei 2020 test/

ps: in het script laat ik eerst de niet-connectie weergeven, en na mount de verbonden netwerkdrive:

ls -lFA ~/NetwerkU
sudo mount -t cifs -o rw,uid=cybrarian,forceuid,username=cybrarian,password=******,vers=1.0 //server.copyleft.loc/cybrarian/ /home/cybrarian/Netwerk/
ls -lFA ~/NetwerkU

26/11/2021

mariadb mysql import van commandolijn

Filed under: — cybrarian @ 2:28 pm

Een groot .sql bestand moet geïmporteerd worden in mariadb. Het is meer dan één GB groot, en ik kan het niet importeren langs phpMyAdmin.
Ik heb eerst de structuur van de databases geëxporteerd en geïmporteerd (die is kleiner, gaat wel met phpMyAdmin).

Daarna vanop de commandolijn:

mysql -u root -p DBNAAM < DBNAAM.sql

Enter password:

Het kan (na het ingeven van het wachtwoord) een paar (tientallen) minuten duren eer de import klaar is; je krijgt ondertussen geen statusinformatie (je kan wel naar je processorbelasting gaan kijken, bleef hier bv rond 10%, om dan terug te vallen op 2% als de import klaar was).

12/7/2021

Voorbeeld opensuse 15.3 fixed ip server

Filed under: — cybrarian @ 2:14 pm

De meeste systemen komen met een voorgeïnstalleerde Windows, bv 10, geînstalleerd met UEFI toestanden.

Boot
In het bios (bv ESC ingeduwd houden bij opstarten) kan je de instellingen voor het booten veranderen, en bv de UEFI Boot Sources op Disabled zetten.
Daarna USB-key met opensuse 15.3 aansluiten, ESC of F9 om boot medium te kiezen.
Kies de USB-key uit de aangeboden mogelijkeheden.

OpenSUSE
kies het toetsenbord; bv Belgisch (taal laat ik op standaard Engels staan).
Activate online repositories: No (later wel).
Installatie: “Server” of “Transactional Server” (met read-only file system; die reboot automatisch na updates, ’s nachts ergens tussen 3 en 5, maar instelbaar. Voordeel is dat je er niet zelf aan moet denken om te herstarten om de updates aktief te maken, en dat het updaten geen productieve tijd wegneemt. Wel checken wanneer je backups lopen!)

Import pu..k..: .. (HD nummer).. hier kan je waarschijnlijk voorbij zonder op te letten..

Netwerk
Probleem met instellen van netwerkgegevens en/of ip-adres:
– ping: Destination host unreachable
– network is unreachable of zoiets

systemctl status network
Toont of wicked werkt (default op Suse voor vaste computers; voor laptops is het Network Manager)
(werkt met de wicked deamon wickedd, voor systemctl start wicked of systemctl start network zie meer hier)

Voorbeeld van instellen van een server onder opensuse 15.3
met yast: System, Network Settings:
Overview – Hostname – Routing

Overview: netwerkkaart(en) zichtbaar met mac-address en device name (bv eth0/eth1), en ip-adres of not configured.
Edit of Add om te wijzigen.

– ip adres 192.168.1.123 (bij instellen kies /24 ipv /32)
(ip a controleert)

Hostname/DNS
– Static hostname “myserver”
– Set hostname via DHCP: No
– Modify dns configuration (Use default policy): Minstens invullen Name Server1: bv 192.168.1.1
– domain search – (leeg laten? locale mynetwork.loc?)

Routing
je moet niet perse als server doorsturen, maar wel je default ingeven, bv 192.168.1.1 , device: eth0, destination leeg laten.
(dan test: cat /etc/resolve.conf moet achteraan nameserver 192.168.1.1 bevatten)

Na wijzigen zeker ook herstarten om te kijken of het bij start allemaal op zijn pootjes terechtkomt.

Is de kabel ingestoken, netwerkaansluiting aktief?
ip a controleert; geeft bv down als kabel los is, “up” als kabel aangesloten is (en ververst ook bij wijziging).

26/4/2021

Top maar niet zo snel

Filed under: — cybrarian @ 10:21 pm

Ik wil proberen hoelang een open ssh verbinding open blijft, ik doe op de afstands-Linux “top”; dat geeft bovenaan links de systeemtijd weer en die bevriest als de verbinding verbroken is.

ssh user@remoteIp
****
date
top
 d
 5

Top hoeft niet zo snel te verversen, maar er is geen parameter om bij het starten een interval aan te geven.
Dat kan je wel eens top draait: tik d en je krijgt de vraag een nieuwe delay in te geven, de standaard is 3.
Je kan top verlaten met q of met ctrl-c.
Als je voordien met date de datum/tijd laat weergeven, dan kan je die terugvinden als begintijd bij het verlaten van top (scherm naar boven).

Top maar niet zo veel
top
n

geeft bv 10 enter; dan krijg je een verkorte lijst van 10 te zien

20/10/2020

mariadb of mysql databank server verbinding over netwerk

Filed under: — cybrarian @ 2:17 pm

Verbinding van buitenaf
Een databank als mysql of mariadb is standaard geïnstalleerd in OpenSUSE 15.1. Meestal met het mysql_secure_installation script, dat er voor zorgt dat de databank in een veilige toestand op de server komt (niet zoals vroeger met alles draaiend, open, zonder root wachtwoord en een bekende voorgedefinieerde gast of test account…). Je kan na de installatie vanop de eigen server (localhost) inloggen. Maar als je nu vanop afstand wil inloggen op mysql of rechtstreeks vanuit programma’s de databank wil aanspreken, moet je een paar aanpassingen doen. Hieronder enkele voor intern gebruik (in een eigen lokaal netwerk), en even situeren:

1. Installatie
2. local user
3. remote use
A. Firewall
B. listen to port
C. remote use
D. SSL tunnel/VPN

1. en 2. zijn gebeurd is het uitgangspunt.

3. remote use
3.A. Firewall
Opensuse YAST: Firewall tool, service “mysql”, in zone “public” (is bv default).

op de commandolijn:
systemctl status firewalld
(om te zien of hij draait)

firewall-cmd --list-all
toont lijst met bv:

..
services: ssh dhcpv6-client mysql
ports:

grep mysql /etc/services

toont op welke poorten de diensten zitten

grep mysql /etc/services
mysql-cluster 1186/tcp # MySQL Cluster Manager [Arjen_Lentz]
mysql-cluster 1186/udp # MySQL Cluster Manager [Arjen_Lentz]
mysql-cm-agent 1862/tcp # MySQL Cluster Manager Agent [Andrew_Morgan]
mysql-cm-agent 1862/udp # MySQL Cluster Manager Agent [Andrew_Morgan]
mysql-im 2273/tcp # MySQL Instance Manager [Petr_Chardin]
mysql-im 2273/udp # MySQL Instance Manager [Petr_Chardin]
mysql 3306/tcp # MySQL [Monty]
mysql 3306/udp # MySQL [Monty]
mysql-proxy 6446/tcp # MySQL Proxy [Kay_Roepke]
mysql-proxy 6446/udp # MySQL Proxy [Kay_Roepke]
mysqlx 33060/tcp # MySQL Database Extended Interface [Oracle_8] [Omer_BarNir]

3.B. listen to port

telnet mysql.servernaam.loc 3306

Trying 192.168.1.205…
telnet: connect to address 192.168.1.205: Connection refused

nc -v mysql.servernaam.loc 3306

nc: connect to mysql.servernaam.loc port 3306 (tcp) failed: Connection refused

Connection refused: waarschijnlijk is poort wel open, maar luistert de dienst niet.

Dat wordt bepaald in /etc/my.cnf
staat standaard uitgecomment:

#port = 3306

en bind-address=127.0.0.1 staat standaard aan; uit-commenten zodat hij die algemene bind netwerk doet.
bind-address=127.0.0.1

3.C. user name, ip
Gebruiker bijmaken voor gebruik vanop afstand. (voor elk ander gebruik dan root-beheer moet je een andere account maken).

CREATE USER ‘my_app_user’@’10.132.51.34’ IDENTIFIED BY ‘some-strong-password’;

In plaats van op 1 bepaald ip addres kan ook een reeks adressen gebruikt worden:
netmask IPV4: ‘my_app_user’@’10.132.51.0/255.255.255.0′
Wildcards:’my_app_user’@’%.example.com’

systemctl status mysql
systemctl restart mysql

7/9/2020

Databank lettertekenset (Collation)

Filed under: — cybrarian @ 10:59 am

Als ik in een huidige databank (mariadb) kijk met phpMyAdmin, zie ik op het hoogste niveau “databases” de namen van mijn databanken, en daarnaast de colom “Collatie”. Daar staat bij de meeste databanken utf8_general_ci. (zie ook Databank collation) Er is één uitzondering, en dat is de database “mysql” (van het systeem zelf). Die heeft als collation: “utf8mb4_general_ci”. Waarom?

Een artikel uit 2016 hier op Medium.com geeft daar een antwoord op, en als het klopt zou ik ook meestal utf8mb4 moeten gebruiken, en al mijn bestaande databanken moeten omzetten.

MariaDB is afgeleid van MySQL, en daar hebben ze ooit een zuinige vorm van Unicode tekenset gemaakt en die “utf8” genoemd. Helaas bleek die achteraf niet overeen te komen met de uitgewerkte UTF-8 standaard, en MySQL kon zijn eigen versie niet meer aanpassen omdat ze te weinig plaats hadden voorzien in hun opslagruimte daarvoor (3 bytes/letter ipv 4). Hun onvolledige “utf8” veranderen zou bestaande programma’s kunnen doen crashen, en het enige wat hen restte was een andere vorm van utf8 bij te maken: utf8mb4.

Daardoor heb je nu zowel “utf8_general_ci” als “utf8mb4_general_ci” (ook wel “Unicode UCA 4.0.0).
ps: CI staat voor Case Insensitive (niet hoofdlettergevoelig, een zoek op “Abc” levert ook “abc” op).
En ook utf8mb4_bin, utf8mb4_(taalcodes)
ps: bin = wel hoofdlettergevoelig, dus Abc en abc verschillen voor de databank.

bron: https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434

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).

3/3/2020

Verbinding met oude smb-server

Filed under: — cybrarian @ 3:38 pm

Probleem bij een desktop update naar openSUSE 15.1: de mount van een netwerkdrive werkte niet meer.

Foutmelding: iets van directory bestaat niet zonder aanduiding of het een directory bij de client of bij de server betreft.

Oplossing: na totaal willekeurig tips proberen heeft het verwijzen naar een oudere versie in het commando het script terug doen werken:

sudo mount -t cifs -o rw,vers=1.0,uid=joske,username=joske,password=soske //server.domain.local/joske /home/joske/lokalenaam/

Voor wie er iets aan heeft… de server had samba 3.0.28.

ps: Op voorhand moet de subdirectory /home/joske/lokalemap/ we bestaan. Als je hem maakt terwijl je “root” bent, krijg je ook problemen.

Voorbeeld:
mkdir ~/toOldServer
cd ~/toOldServer
touch NotConnected.txt

Dan zie je goed het verschil tussen de “gemounte” versie van de map, en de “niet gemounte” (want dan zie je NotConnected.txt staan).
In NotConnected.txt kan je bv verwijzen naar het shell script dat je gebruikt om de drive te mounten, bv ~/bin/mountOldServer.sh

Daarin kan je de directory-inhoud tonen voor en na de mount, zodat je weet dat (/of) de mount gelukt is:

ls -lFA /home/joske/NetwerkOudeServer
sudo mount -t cifs -o rw,vers=1.0,uid=joske,username=joske,password=soske //server.domain.local/joske /home/joske/NetwerkOudeServer/
ls -lFA /home/joske/NetwerkOudeServer

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”.

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.

21/10/2019

systeem (processor) belasting op commandolijn

Filed under: — cybrarian @ 12:32 pm

top (aanwezig; processen-tabel levend)

htop (bij te installeren)
– levende tabel zoals top, maar met kleurkode en optie-menu als mc; bovenaan extra meters voor processorbelasting per cpu en geheugen + swap. De meters worden gevormd door gekleurde streepjes die doen denken aan LED-VU-meters.

netwerkverkeer op commandolijn

Filed under: — cybrarian @ 12:30 pm

De meeste tools moet je onderbreken met ctrl-c.
(soms is er een menu aanwezig dat je met de F1-F10 kan bedienen)

netstat -t -u -c (status dump: tcp verkeer, udp verkeer, continuous=voortscrollend)
iftop (installeren) soort netwerk (h)top
iptraf
tcpdump -i eth0
nethogs (installeren): netwerkverkeer per proces

3/9/2018

Docker in Yast

Filed under: — cybrarian @ 12:46 pm

Installeren:
– Yast, Softwarebeheer, zoek docker
– docker, docker-bash-completion, docker-libnetwork, docker-runc, docker-zhs-completion, ruby2.1-rubygem-docker-api, yast2-docker, zypper-docker (docker-compose)
– installeer.

Controleren:

Yast Control Center, Virtualisatie, Docker.

Start de module met venster YaST2 – docker @ host.loc

Twee tabbladen: Images en Containers.

Containers toont de “running docker containers”

Na het starten van het “Hello World” voorbeeld (zie commando’s), wordt in tabblad [Images] zichtbaar:

hello-world latest sh256:2cb0d 2018-07-11T00:32:08+00:00 1.80 KiB

Docker commando’s

Filed under: — cybrarian @ 12:38 pm

Docker
(voorbeelden op OpenSUSE, volg de gids op docs.docker.com)

Docker installeren:
zypper install docker docker-compose

Docker starten
systemctl start docker

Docker stoppen
systemctl stop docker

Docker automatisch laten starten:
sudo systemctl enable docker

Docker groep vervoegen:
sudo usermod -G docker -a GEBRUIKERSNAAM

Versie van Docker:
host:/home/gebruikersnaam # docker --version

Docker version 17.09.1-ce, build f4ffd2511ce9

Aktieve containers:
host:/home/gebruikersnaam # docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

(niets in gebruik hier)

Meer info:
host:/home/gebruikersnaam # docker info

Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.09.1-ce
Storage Driver: btrfs
Build Version: Btrfs v4.5.3+20160729
Library Version: 101
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc oci
Default Runtime: runc
….

Hallo Wereld!
docker run hello-world

Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the “hello-world” image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

# docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 2cb0d9787c4d 7 weeks ago 1.85kB

# docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

# docker image ls --all

REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 2cb0d9787c4d 7 weeks ago 1.85kB

# docker image ls -aq

2cb0d9787c4d

(q = quite mode)

Powered by WordPress