Diferència entre revisions de la pàgina «Connexió remota a mysql (OVHCloud)»
m |
|||
| (Hi ha 6 revisions intermèdies del mateix usuari que no es mostren) | |||
| Línia 1: | Línia 1: | ||
| + | =Professor: connexió a OVHCloud= | ||
| + | OVHCloud és una empresa amb la que podem contractar un VPS (Virtual Private Server). Aquesta wiki i l'aplicació ''bdquest'', entre d'altres aplicacions, estan allotjades en aquest VPS. | ||
| + | ==creació de l'usuari de MySQL== | ||
| + | El professor es connecta a la màquina al núvol, on hi ha un servidor mysql: | ||
<pre> | <pre> | ||
| − | + | $ ssh ubuntu@vps-f5d83567.vps.ovh.net | |
| − | + | </pre> | |
| − | + | El professor entra dins el mysql, i crea l'usuari ''provisional'': | |
| − | + | <pre> | |
| − | create user ' | + | $ mysql -u root -p |
| + | mysql> create user 'provisional'@'%' identified by 'password'; | ||
mysql> select User,Host from mysql.user; | mysql> select User,Host from mysql.user; | ||
| − | +------------------+ | + | +------------------+-----------+ |
| − | | User | Host | + | | User | Host | |
| − | +------------------+ | + | +------------------+-----------+ |
| − | | | + | | bdquest | % | |
| − | | | + | | provisional | % | |
| − | + | ... | |
| − | + | </pre> | |
| + | Es dóna permisos de ''select'' sobre les tres taules de la base de dades de ''municipis'': | ||
| + | <pre> | ||
| + | GRANT SELECT ON municipis.* TO 'provisional'@'%'; | ||
| + | SHOW GRANTS FOR 'provisional'@'%'; | ||
| + | +----------------------------------------------------+ | ||
| + | | Grants for provisional@% | | ||
| + | +----------------------------------------------------+ | ||
| + | | GRANT USAGE ON *.* TO `provisional`@`%` | | ||
| + | | GRANT SELECT ON `municipis`.* TO `provisional`@`%` | | ||
| + | +----------------------------------------------------+ | ||
| + | </pre> | ||
| + | ==MySQL: habilitar connexions remotes== | ||
| + | El servidor MySQL té fitxers de configuració a ''/etc/mysql''. Concretament: | ||
| + | <pre> | ||
| + | $ cd /etc/mysql/mysql.conf.d | ||
$ sudo joe mysqld.cnf | $ sudo joe mysqld.cnf | ||
# Instead of skip-networking the default is now to listen only on | # Instead of skip-networking the default is now to listen only on | ||
# localhost which is more compatible and is not less secure. | # localhost which is more compatible and is not less secure. | ||
| − | # bind-address | + | # bind-address = 127.0.0.1 |
| − | + | bind-address = 0.0.0.0 | |
| − | + | </pre> | |
| − | + | Per defecte, un servidor MySQL només accepta connexions locals (127.0.0.1), i per acceptar connexions remotes des de qualsevol IP ho canviem per ''0.0.0.0''. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | Reiniciem el servidor MySQL: | ||
| + | <pre> | ||
| + | $ sudo /etc/init.d/mysql restart | ||
| + | </pre> | ||
| + | El professor comproca que el servidor està escoltant pel port 3306, que és el port del MySQL: | ||
| + | <pre> | ||
$ sudo lsof -i -P -n | grep LISTEN | $ sudo lsof -i -P -n | grep LISTEN | ||
| − | |||
| − | |||
| − | |||
... | ... | ||
| − | mysqld | + | mysqld 3274835 mysql 32u IPv6 170198035 0t0 TCP *:33060 (LISTEN) |
| − | + | mysqld 3274835 mysql 56u IPv4 170198037 0t0 TCP *:3306 (LISTEN) | |
| + | ... | ||
| + | </pre> | ||
o bé: | o bé: | ||
| + | <pre> | ||
$ sudo netstat -tulpn | grep LISTEN | $ sudo netstat -tulpn | grep LISTEN | ||
| − | tcp 0 0 | + | tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3274835/mysqld |
| − | + | ... | |
| − | + | tcp6 0 0 :::33060 :::* LISTEN 3274835/mysqld | |
| − | tcp6 0 0 ::: | + | ... |
| − | + | </pre> | |
| − | |||
| − | |||
| − | + | =Alumne: connexió remota= | |
| − | + | ==Des de dins del docker== | |
| − | + | Entrem a dins del docker: | |
| − | + | <pre> | |
| − | + | $ docker exec -it mysql_m02bd /bin/bash | |
| − | + | bash-4.4# | |
| − | + | </pre> | |
| − | + | Primer comprovem que podem accedir al servidor pel port 3306. Una manera de fer-ho és amb un telnet: | |
| − | + | <pre> | |
| − | + | # echo X | telnet -e X vps-f5d83567.vps.ovh.net 3306 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Telnet escape character is 'X'. | Telnet escape character is 'X'. | ||
Trying 51.210.179.7... | Trying 51.210.179.7... | ||
| Línia 103: | Línia 82: | ||
telnet> Connection closed. | telnet> Connection closed. | ||
| + | </pre> | ||
| + | Ha respost amb ''connected'', vol dir que s'ha fet la connexió. | ||
| − | + | Només tenim permisos per connectar-nos a la base de dades ''municipis'': | |
| + | <pre> | ||
| + | # mysql -h vps-f5d83567.vps.ovh.net -u provisional -ppassword langtrainer | ||
| + | mysql: [Warning] Using a password on the command line interface can be insecure. | ||
| + | ERROR 1044 (42000): Access denied for user 'provisional'@'%' to database 'langtrainer' | ||
| + | # mysql -h vps-f5d83567.vps.ovh.net -u provisional -ppassword municipis | ||
| − | + | mysql> show databases; | |
| − | + | +--------------------+ | |
| − | + | | Database | | |
| + | +--------------------+ | ||
| + | | information_schema | | ||
| + | | municipis | | ||
| + | +--------------------+ | ||
| + | </pre> | ||
| − | select | + | Només tenim permisos per fer selects. Per exemple: |
| − | + | <pre> | |
| − | + | mysql> select * from comunitats; | |
| − | + | +--------+----------------------+---------+ | |
| + | | id_com | comunitat | abr_com | | ||
| + | +--------+----------------------+---------+ | ||
| + | | 1 | Catalunya | CAT | | ||
| + | | 2 | Aragón | ARG | | ||
| + | | 3 | Comunidad Valenciana | VAL | | ||
| + | ... | ||
| + | </pre> | ||
| + | No podem fer un insert: | ||
| + | <pre> | ||
| + | mysql> insert into municipis (id_mun,municipi,id_prov) values(9000,'nou municipi',3); | ||
| + | ERROR 1142 (42000): INSERT command denied to user 'provisional'@'79.153.33.102' for table 'municipis' | ||
| + | </pre> | ||
| − | + | Municipis de Canarias: | |
| − | + | <pre> | |
| − | + | mysql> select concat(municipi,';',provincia) from municipis m | |
| − | |||
| − | select concat(municipi,';',provincia) from municipis m | ||
inner join provincies p using (id_prov) | inner join provincies p using (id_prov) | ||
inner join comunitats c using (id_com) | inner join comunitats c using (id_com) | ||
where comunitat = 'Islas Canarias'; | where comunitat = 'Islas Canarias'; | ||
| − | + | </pre> | |
| − | + | Anem a executar aquesta select, no des de la consola del mysql, sinó des de la consola del sistema operatiu. Per fer-ho, utilitzem l'opció '''-e''' (''--execute''), l'opció '''-s''' (''--silent'') i redirigim la sortida a un fitxer: | |
| − | + | <pre> | |
| − | + | # mysql -h vps-f5d83567.vps.ovh.net -u provisional -ppassword -D municipis -s | |
-e "select concat(municipi,';',provincia) from municipis m inner join provincies p using (id_prov) inner join comunitats c using (id_com) where comunitat = 'Euskadi'" > municipis_euskadi.txt | -e "select concat(municipi,';',provincia) from municipis m inner join provincies p using (id_prov) inner join comunitats c using (id_com) where comunitat = 'Euskadi'" > municipis_euskadi.txt | ||
| − | + | </pre> | |
| − | + | S'ha generat el fitxer ''municipis_euskadi.txt'': | |
| − | + | <pre> | |
| + | # cat municipis_euskadi.txt | ||
Alegría-Dulantzi;Álava | Alegría-Dulantzi;Álava | ||
Amurrio;Álava | Amurrio;Álava | ||
| Línia 143: | Línia 145: | ||
Ayala/Aiara;Álava | Ayala/Aiara;Álava | ||
... | ... | ||
| + | </pre> | ||
| + | Concretament, la sentència que ha d'executar l'alumne i que haurà d'entregar és: | ||
| + | <pre> | ||
| + | # mysql -h vps-f5d83567.vps.ovh.net -u provisional -ppassword -D municipis -s | ||
| + | -e "select concat(municipi,';',provincia) as 'nom_alumne' from municipis m inner join provincies p using (id_prov) inner join comunitats c using (id_com) where comunitat = 'Euskadi' order by rand() limit 10" > municipis_euskadi_nom_alumne.txt | ||
| + | </pre> | ||
| − | + | ==Des del mysql-workbench:== | |
| − | + | [[Fitxer:Connexio mysql remota ovhcloud.png | thumbnail]] | |
| − | + | Veure la imatge. Si ens ha funcionat des del docker, també ens funcioanrà des d'una eina gràfica com el mysql-workbench. | |
| − | + | =Professor. Veure les connexions remotes= | |
| − | + | [[Fitxer:Connexions remotes.png | thumbnail]] | |
| − | |||
| − | |||
| − | |||
| − | des del mysql-workbench | ||
| − | |||
| − | |||
Per veure les connexions al servidor: | Per veure les connexions al servidor: | ||
<pre> | <pre> | ||
| Línia 170: | Línia 172: | ||
| 542 | provisional | 79.153.33.102:47082 | municipis | Sleep | 6 | | NULL | | 542 | provisional | 79.153.33.102:47082 | municipis | Sleep | 6 | | NULL | ||
</pre> | </pre> | ||
| − | ==mysql | + | Podem veure tots els processor que han creat els alumnes, és a dir, les connexions que estan obertes. |
| − | + | ||
| + | =Tasques a realitzar= | ||
| + | Aquesta pràctica s'entrega al final de la classe, doncs l'usuari amb què hem treballat (''provisional'') quedarà deshabilitat (''mysql> drop user 'provisional'@'%';''). | ||
| + | |||
| + | Entregaràs un pdf amb dues captures de pantalla: | ||
| + | |||
| + | 1. la teva llista de 10 municipis d'Euskadi o de qualsevol altra comunitat (en la capçalera ha de sortir el teu nom) | ||
| + | 2. Captura de pantalla de la connexió correcta del mysql-workbench, on hi hagi una evidència de què ho has fet amb la teva màquina. | ||
{{Autor}}, febrer 2022 | {{Autor}}, febrer 2022 | ||
Revisió de 16:30, 2 març 2022
Contingut
Professor: connexió a OVHCloud
OVHCloud és una empresa amb la que podem contractar un VPS (Virtual Private Server). Aquesta wiki i l'aplicació bdquest, entre d'altres aplicacions, estan allotjades en aquest VPS.
creació de l'usuari de MySQL
El professor es connecta a la màquina al núvol, on hi ha un servidor mysql:
$ ssh ubuntu@vps-f5d83567.vps.ovh.net
El professor entra dins el mysql, i crea l'usuari provisional:
$ mysql -u root -p mysql> create user 'provisional'@'%' identified by 'password'; mysql> select User,Host from mysql.user; +------------------+-----------+ | User | Host | +------------------+-----------+ | bdquest | % | | provisional | % | ...
Es dóna permisos de select sobre les tres taules de la base de dades de municipis:
GRANT SELECT ON municipis.* TO 'provisional'@'%'; SHOW GRANTS FOR 'provisional'@'%'; +----------------------------------------------------+ | Grants for provisional@% | +----------------------------------------------------+ | GRANT USAGE ON *.* TO `provisional`@`%` | | GRANT SELECT ON `municipis`.* TO `provisional`@`%` | +----------------------------------------------------+
MySQL: habilitar connexions remotes
El servidor MySQL té fitxers de configuració a /etc/mysql. Concretament:
$ cd /etc/mysql/mysql.conf.d $ sudo joe mysqld.cnf # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. # bind-address = 127.0.0.1 bind-address = 0.0.0.0
Per defecte, un servidor MySQL només accepta connexions locals (127.0.0.1), i per acceptar connexions remotes des de qualsevol IP ho canviem per 0.0.0.0.
Reiniciem el servidor MySQL:
$ sudo /etc/init.d/mysql restart
El professor comproca que el servidor està escoltant pel port 3306, que és el port del MySQL:
$ sudo lsof -i -P -n | grep LISTEN ... mysqld 3274835 mysql 32u IPv6 170198035 0t0 TCP *:33060 (LISTEN) mysqld 3274835 mysql 56u IPv4 170198037 0t0 TCP *:3306 (LISTEN) ...
o bé:
$ sudo netstat -tulpn | grep LISTEN tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3274835/mysqld ... tcp6 0 0 :::33060 :::* LISTEN 3274835/mysqld ...
Alumne: connexió remota
Des de dins del docker
Entrem a dins del docker:
$ docker exec -it mysql_m02bd /bin/bash bash-4.4#
Primer comprovem que podem accedir al servidor pel port 3306. Una manera de fer-ho és amb un telnet:
# echo X | telnet -e X vps-f5d83567.vps.ovh.net 3306 Telnet escape character is 'X'. Trying 51.210.179.7... Connected to vps-f5d83567.vps.ovh.net. Escape character is 'X'. telnet> Connection closed.
Ha respost amb connected, vol dir que s'ha fet la connexió.
Només tenim permisos per connectar-nos a la base de dades municipis:
# mysql -h vps-f5d83567.vps.ovh.net -u provisional -ppassword langtrainer mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1044 (42000): Access denied for user 'provisional'@'%' to database 'langtrainer' # mysql -h vps-f5d83567.vps.ovh.net -u provisional -ppassword municipis mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | municipis | +--------------------+
Només tenim permisos per fer selects. Per exemple:
mysql> select * from comunitats; +--------+----------------------+---------+ | id_com | comunitat | abr_com | +--------+----------------------+---------+ | 1 | Catalunya | CAT | | 2 | Aragón | ARG | | 3 | Comunidad Valenciana | VAL | ...
No podem fer un insert:
mysql> insert into municipis (id_mun,municipi,id_prov) values(9000,'nou municipi',3); ERROR 1142 (42000): INSERT command denied to user 'provisional'@'79.153.33.102' for table 'municipis'
Municipis de Canarias:
mysql> select concat(municipi,';',provincia) from municipis m inner join provincies p using (id_prov) inner join comunitats c using (id_com) where comunitat = 'Islas Canarias';
Anem a executar aquesta select, no des de la consola del mysql, sinó des de la consola del sistema operatiu. Per fer-ho, utilitzem l'opció -e (--execute), l'opció -s (--silent) i redirigim la sortida a un fitxer:
# mysql -h vps-f5d83567.vps.ovh.net -u provisional -ppassword -D municipis -s -e "select concat(municipi,';',provincia) from municipis m inner join provincies p using (id_prov) inner join comunitats c using (id_com) where comunitat = 'Euskadi'" > municipis_euskadi.txt
S'ha generat el fitxer municipis_euskadi.txt:
# cat municipis_euskadi.txt Alegría-Dulantzi;Álava Amurrio;Álava Añana;Álava Aramaio;Álava Armiñón;Álava Arraia-Maeztu;Álava Arrazua-Ubarrundia;Álava Artziniega;Álava Asparrena;Álava Ayala/Aiara;Álava ...
Concretament, la sentència que ha d'executar l'alumne i que haurà d'entregar és:
# mysql -h vps-f5d83567.vps.ovh.net -u provisional -ppassword -D municipis -s -e "select concat(municipi,';',provincia) as 'nom_alumne' from municipis m inner join provincies p using (id_prov) inner join comunitats c using (id_com) where comunitat = 'Euskadi' order by rand() limit 10" > municipis_euskadi_nom_alumne.txt
Des del mysql-workbench:
Veure la imatge. Si ens ha funcionat des del docker, també ens funcioanrà des d'una eina gràfica com el mysql-workbench.
Professor. Veure les connexions remotes
Per veure les connexions al servidor:
select id,
user,
host,
db,
command,
time,
state,
info
from information_schema.processlist;
...
| 542 | provisional | 79.153.33.102:47082 | municipis | Sleep | 6 | | NULL
Podem veure tots els processor que han creat els alumnes, és a dir, les connexions que estan obertes.
Tasques a realitzar
Aquesta pràctica s'entrega al final de la classe, doncs l'usuari amb què hem treballat (provisional) quedarà deshabilitat (mysql> drop user 'provisional'@'%';).
Entregaràs un pdf amb dues captures de pantalla:
1. la teva llista de 10 municipis d'Euskadi o de qualsevol altra comunitat (en la capçalera ha de sortir el teu nom)
2. Captura de pantalla de la connexió correcta del mysql-workbench, on hi hagi una evidència de què ho has fet amb la teva màquina.
creat per Joan Quintana Compte, febrer 2022