Difference between revisions of "MySQL (Italiano)"

From ArchWiki
Jump to: navigation, search
(Running multiple instances (MySQL 4 and MySQL 5))
m (Punto)
(21 intermediate revisions by 8 users not shown)
Line 1: Line 1:
[[Category:Daemons and system services (Italiano)]]
+
[[Category:Database management systems (Italiano)]]
{{i18n|MySQL}}
+
[[cs:MySQL]]
{{translateme}}
+
[[de:MySQL]]
{{Nota|Questo articolo è in fase di traduzione. Seguite per ora le istruzioni della versione inglese.}}
+
[[en:MySQL]]
 +
[[es:MySQL]]
 +
[[fr:MySQL]]
 +
[[sr:MySQL]]
 +
[[tr:MySQL]]
 +
[[zh-CN:MySQL]]
 +
MySQL è un database SQL ampiamente diffuso e multi-threaded. Per maggiori informazioni sulle sue caratteristiche consultare la [http://www.mysql.it/ pagina ufficiale].
  
 +
{{Note|MariaDB è l'implementazione ufficialmente adottata da Archlinux. Si raccomandano gli utenti di [[#Passare da Oracle MySQL a MariaDB|passare]] a MariaDB. Oracle MySQL è in [[AUR]]. Annuncio ufficiale: [https://www.archlinux.org/news/mariadb-replaces-mysql-in-repositories/].}}
  
MySQL è un database SQL, ampiamente diffuso, multi-threaded e multi-utente. Per informazioni sul prodotto, andate alla [http://www.mysql.com/ pagina ufficiale].
+
== Installazione ==
  
==Installazione==
+
[[pacman|Installare]] {{Pkg|mariadb}}, {{Pkg|libmariadbclient}} e {{Pkg|mariadb-clients}} dai [[official repositories|repository ufficiali]].
Installate il pacchetto mysql:
+
Alcune implementazioni alternative sono {{Pkg|percona-server}} and Oracle {{AUR|mysql}}.
# pacman -S mysql
+
  
Dopo averlo installato si lanci lo script di avvio da root:
+
Avviare il demone {{ic|mysqld}}, eseguire lo script di installazione e riavviare:
  # /etc/rc.d/mysqld start && mysql_secure_installation
+
  # systemctl start mysqld
o con sudo:
+
# mysql_secure_installation
  # sudo /etc/rc.d/mysqld start && sudo mysql_secure_installation
+
  # systemctl restart mysqld
  
Poi si riavvii MySQL:
+
Sono disponibili le interfacce {{AUR|mysql-gui-tools}} e {{AUR|mysql-workbench}}.
# /etc/rc.d/mysqld restart
+
  
Per avviare MySQL automaticamente al boot, modificare /etc/rc.conf e aggiungere il demone mysqld:
+
=== Passare da Oracle MySQL a MariaDB ===
DAEMONS=(... mysqld ...)
+
  
Se si usa systemd, aggungere questi due file.
+
Gli utenti che desiderano usare l'implementazione supportata devono installare '''mariadb''', '''libmariadbclient''' o '''mariadb-clients''' ed eseguire {{ic|mysql_upgrade}} per migrare i propri sistemi.
{{File|/lib/systemd/system/mysqld.service|<pre>
+
# systemctl stop mysqld
[Unit]
+
# pacman -S mariadb libmariadbclient mariadb-clients
Description=MySQL Server
+
# systemctl start mysqld
After=network.target
+
# mysql_upgrade -p
  
[Service]
+
=== Aggiornare ===
Type=simple
+
ExecStart=/usr/bin/mysqld --user=mysql --pid-file=/var/run/mysqld/mysqld.pid
+
ExecStop=/bin/kill -15 $MAINPID
+
PIDFile=/var/run/mysqld/mysqld.pid
+
Restart=always
+
  
[Install]
+
È opportuno l'uso di questo comando dopo l'aggiornamento e l'avvio di MySQL:
WantedBy=multi-user.target
+
  # mysql_upgrade -u root -p
</pre>}}
+
 
+
{{File|/etc/tmpfiles.d/mysqld.conf|<pre>
+
# systemd tmpfile settings for mysql
+
# See tmpfiles.d(5) for details
+
 
+
d /var/run/mysqld 0755 mysql mysql -
+
</pre>}}
+
 
+
Avviare il server MySQL:
+
  # systemctl start mysqld.service
+
  
Per far partire automaticamente MySQL all'avvio
+
== Configurazione ==
# systemctl enable mysqld.service
+
Questo effettuerà le configurazioni di base come aggiungere al sistema gli utenti necessari e i file di log. Questo script vi indicherà inoltre come configurare MySQL dopo il primo avvio.
+
  
==Configurazione==
 
 
Una volta avviato il server MySQL, vorrete probabilmente aggiungere un account root con il quale gestire i database e gli utenti MySQL. Ciò è possibile o in maniera automatica, o manualmente, così come anticipato dall'output dello script precedente. O lanciate i comandi per settare la password per l'account root, oppure lanciate lo script di installazione sicura.
 
Una volta avviato il server MySQL, vorrete probabilmente aggiungere un account root con il quale gestire i database e gli utenti MySQL. Ciò è possibile o in maniera automatica, o manualmente, così come anticipato dall'output dello script precedente. O lanciate i comandi per settare la password per l'account root, oppure lanciate lo script di installazione sicura.
  
Line 59: Line 44:
 
  $ mysql -p -u root
 
  $ mysql -p -u root
  
Per lanciare MySQL al boot aggiungete <code>mysqld</code> alla lista dei demoni nel file <code>/etc/rc.conf</code> o {{Codeline|/etc/rc.d/mysqld start}} a {{Filename|/etc/rc.local}}.
+
=== Disabilitare l'accesso remoto ===
  
=== Abilitare l'accesso remoto ===
+
Il server MySQL è fin da subito accessibile dalla rete. Se MySQL severe solo al computer locale, si può migliorare la sicurezza evitando i controlli della porta TCP 3306. Per rifiutare connesioni remote, togliete il commento alla seguente linea di {{ic|/etc/mysql/my.cnf}}:
The MySQL server does not listen on the TCP port 3306 by default. To allow (remote) TCP connections, comment the following line in {{Filename|/etc/mysql/my.cnf}}:
+
 
  skip-networking
 
  skip-networking
  
Il server MySQL non sta in "ascolto" sulla porta TCP 3306 di default. Per abilitare le connessioni remote via TCP, commentate la linea seguente nel file {{Filename|/etc/mysql/my.cnf}}:
+
Questo non impedisce di connettersi al server sul computer locale.
skip-networking
+
  
== Aggiornare ==
+
=== Abilitare il completamento automatico ===
Si potrebbe considerare l'uso di questo comando dopo l'aggiornamento e l'avvio di MySQL:
+
# mysql_upgrade -u root -p
+
  
== Avviare istanze multiple (MySQL 4 and MySQL 5)==
+
{{Note|Questa procedura allunga i tempi di inizializzazione del client MySQL.}}
MySQL4:
+
Il completamento automatico nel client MySQL è disabilitato di default. Per abilitarlo per tutti gli utenti bisogna modificare {{ic|/etc/mysql/my.cnf}} e rimpiazzare {{ic|no-auto-rehash}} con {{ic|auto-rehash}}. Il completamento funzionerà dopo il riavvio del client MySQL.
Si possono ottenere i binari MySQL da [http://dev.mysql.com/downloads/mysql/4.1.html#downloads qui]
+
It is best to install them into:
+
/usr/local/mysql
+
Copy the start-up script to:
+
/etc/rc.d
+
as instructed in the README:
+
#cp  /usr/local/mysql/support-files/mysql.server /etc/rc.d/mysqld4
+
In the startup script, it helps to explicitly set
+
Basedir=/usr/local/mysql
+
pid_file=/usr/local/var/run/mysql/mysql4.pid
+
(make sure the referenced directories are created with suitable permissions)
+
  
Copy your choice of config file:
+
== Backup ==
#cp /usr/local/mysql/support-files/my-medium.cnf /usr/local/mysql/data/my.cnf
+
  
In the config file, set the socket file, and tcp/ip port:
+
Il database può essere scaricato su un file per facilitare il backup. Il seguente script serve agevola l'operazione, creando il backup {{ic|db_backup.gz}} nella stessa directory dello script:
[client]
+
port            = 3307
+
socket          = /usr/local/var/run/mysql/mysql4.sock
+
  
[mysqld]
+
{{bc|1=
port            = 3307
+
#!/bin/bash
socket          = /usr/local/var/run/mysqld/mysql4.sock
+
  
MySQL5:
+
THISDIR=$(dirname $(readlink -f "$0"))
The default start-up script in:
+
/etc/rc.d/mysqld
+
does not handle multiple instances of mysql.
+
  
Edit the file. Find this line:
+
mysqldump --single-transaction --flush-logs --master-data=2 --all-databases \
getPID() {
+
  <nowiki>| gzip > $THISDIR/db_backup.gz
  echo $(pgrep -u mysql mysqld 2>/dev/null);
+
echo 'purge master logs before date_sub(now(), interval 7 day);' |</nowiki> mysql
}
+
}}
 +
Vedere ache la [http://dev.mysql.com/doc/refman/5.6/en/mysqldump.html pagina] su {{ic|mysqldump}}nel manuale di MySQL.
  
And replace it with:
+
== Risoluzione di problemi ==
getPID() {
+
  echo $(pgrep -u mysql -f /usr/bin/mysqld 2>/dev/null);
+
}
+
  
Start up the services:
+
=== Il demone MySQL non parte ===
/etc/rc.d/mysqld start
+
/etc/rc.d/mysqld4 start
+
  
Optional, start the services automatically (in /etc/rc.conf) add:
+
Se MySQL non parte e non ci sono errori nei file di log, provate a verificare i permessi delle directory {{ic|/var/lib/mysql}} e {{ic|/var/lib/mysql/mysql}}. Se non appartengono a {{ic|mysql:mysql}}, impostatelo voi:
DAEMONS=(... mysqld4 mysqld)
+
 
+
That should be it!
+
 
+
== Troubleshooting ==
+
=== Mysql daemon cannot start ===
+
If you see something like this:
+
  # /etc/rc.d/mysqld restart
+
  :: Stopping MySQL  [FAIL]
+
  :: Starting MySQL [FAIL]
+
and no entry in log files, you might check permission of files in directories {{Filename|/var/lib/mysql}} and {{Filename|/var/lib/mysql/mysql}}. If owner of files in this directories is not mysql:mysql, you should do following:
+
 
   # chown mysql:mysql /var/lib/mysql -R
 
   # chown mysql:mysql /var/lib/mysql -R
If you run into permission problems despite having followed the above ensure that your {{Filename|my.cnf}} is copied to /etc/:
+
Se avete problemi di permessi anche dopo aver eseguito il comando, assicuratevi che esista una copia di {{ic|my.cnf}} in {{ic|/etc/}}:
 
   # cp /etc/mysql/my.cnf /etc/my.cnf
 
   # cp /etc/mysql/my.cnf /etc/my.cnf
Now try and restart the daemon.
+
Riavviate.
  
If you get these messages in your {{Filename|/var/lib/mysql/hostname.err}}
+
Se leggete questi messaggi in {{ic|/var/lib/mysql/hostname.err}}:
 
   [ERROR] Can't start server : Bind on unix socket: Permission denied
 
   [ERROR] Can't start server : Bind on unix socket: Permission denied
 
   [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
 
   [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
 
   [ERROR] Aborting
 
   [ERROR] Aborting
you should change permissions of {{Filename|/var/run/mysqld}} like so:
+
{{ic|/var/run/mysqld}} potrebbe avere i permessi sbagliati:
 
   # chown mysql:mysql /var/run/mysqld -R
 
   # chown mysql:mysql /var/run/mysqld -R
If you run mysqld and the following error appears:
 
  Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist
 
Run the following command to install the default tables:
 
  # mysql_install_db --user=mysql --ldata=/var/lib/mysql/
 
  
=== Unable to run mysql_upgrade because MySQL cannot start. ===
+
Se '''mysqld''' mostra i seguenti errori:
Try run MySQL in safemode:
+
Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist
 +
Eseguite il comando per installare le tavole predefinite da {{ic|/usr}}:
 +
# cd /usr
 +
# mysql_install_db --user=mysql --ldata=/var/lib/mysql/
 +
 
 +
=== Impossibile eseguire mysql_upgrade perchè MySQL non parte ===
 +
 
 +
Provare in modalità di ripristino:
 
  # mysqld_safe --datadir=/var/lib/mysql/
 
  # mysqld_safe --datadir=/var/lib/mysql/
And then run:
+
Eseguire:
 
  # mysql_upgrade -u root -p
 
  # mysql_upgrade -u root -p
  
=== Come resettare la password di Root ===
+
=== Resettare la password di amministratore ===
Fermare il demone mysqld:
+
 
# /etc/rc.d/mysqld stop
+
Interrompere il servizio ''mysqld''. Eseguire questo comando:
 
  # mysqld_safe --skip-grant-tables &
 
  # mysqld_safe --skip-grant-tables &
Connettersi al server mysql:
+
Connettersi al server MySQL. Eseguire:
 
  # mysql -u root mysql
 
  # mysql -u root mysql
Cambiare la password di root:
+
Cambiare la password di amministratore:
 
   mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
 
   mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
 
   mysql> FLUSH PRIVILEGES;
 
   mysql> FLUSH PRIVILEGES;
 
   mysql> exit
 
   mysql> exit
Poi riavviare il demone:
+
Riavviare il servizio ''mysqld''.
# /etc/rc.d/mysqld restart
+
 
Fatto!
+
== Altre risorse ==
  
== Ulteriori risorse ==
+
* [[LAMP (Italiano)|LAMP]] - Articolo del wiki di Archlinux che si mostra come installare un server LAMP (Linux Apache MySQL PHP)
* [[LAMP (Italiano)]] - Articolo del nostro wiki che tratta il setup di un server LAMP (Linux Apache MySQL PHP)
+
* http://mariadb.org/ - Implementazione comunitaria
* http://www.mysql.com/
+
* http://www.mysql.com/ - Implementazione di Oracle
* Frontend [http://aur.archlinux.org/packages.php?ID=42212 aur/mysql-gui-tools] [http://www.archlinux.org/packages/?q=mysql-workbench community/mysql-workbench]
+
* http://www.percona.com/software - Implementazione di Percona

Revision as of 10:57, 26 May 2013

MySQL è un database SQL ampiamente diffuso e multi-threaded. Per maggiori informazioni sulle sue caratteristiche consultare la pagina ufficiale.

Note: MariaDB è l'implementazione ufficialmente adottata da Archlinux. Si raccomandano gli utenti di passare a MariaDB. Oracle MySQL è in AUR. Annuncio ufficiale: [1].

Installazione

Installare mariadb, libmariadbclient e mariadb-clients dai repository ufficiali. Alcune implementazioni alternative sono percona-server and Oracle mysqlAUR.

Avviare il demone mysqld, eseguire lo script di installazione e riavviare:

# systemctl start mysqld
# mysql_secure_installation
# systemctl restart mysqld

Sono disponibili le interfacce mysql-gui-toolsAUR e mysql-workbenchAUR.

Passare da Oracle MySQL a MariaDB

Gli utenti che desiderano usare l'implementazione supportata devono installare mariadb, libmariadbclient o mariadb-clients ed eseguire mysql_upgrade per migrare i propri sistemi.

# systemctl stop mysqld
# pacman -S mariadb libmariadbclient mariadb-clients
# systemctl start mysqld
# mysql_upgrade -p

Aggiornare

È opportuno l'uso di questo comando dopo l'aggiornamento e l'avvio di MySQL:

# mysql_upgrade -u root -p

Configurazione

Una volta avviato il server MySQL, vorrete probabilmente aggiungere un account root con il quale gestire i database e gli utenti MySQL. Ciò è possibile o in maniera automatica, o manualmente, così come anticipato dall'output dello script precedente. O lanciate i comandi per settare la password per l'account root, oppure lanciate lo script di installazione sicura.

Ora potrete configurare il tutto dalla vostra interfaccia preferita. Per esempio usando la riga di comando di MySQL loggandovi come root sul vostro server MySQL:

$ mysql -p -u root

Disabilitare l'accesso remoto

Il server MySQL è fin da subito accessibile dalla rete. Se MySQL severe solo al computer locale, si può migliorare la sicurezza evitando i controlli della porta TCP 3306. Per rifiutare connesioni remote, togliete il commento alla seguente linea di /etc/mysql/my.cnf:

skip-networking

Questo non impedisce di connettersi al server sul computer locale.

Abilitare il completamento automatico

Note: Questa procedura allunga i tempi di inizializzazione del client MySQL.

Il completamento automatico nel client MySQL è disabilitato di default. Per abilitarlo per tutti gli utenti bisogna modificare /etc/mysql/my.cnf e rimpiazzare no-auto-rehash con auto-rehash. Il completamento funzionerà dopo il riavvio del client MySQL.

Backup

Il database può essere scaricato su un file per facilitare il backup. Il seguente script serve agevola l'operazione, creando il backup db_backup.gz nella stessa directory dello script:

#!/bin/bash

THISDIR=$(dirname $(readlink -f "$0"))

mysqldump --single-transaction --flush-logs --master-data=2 --all-databases \
  | gzip > $THISDIR/db_backup.gz
echo 'purge master logs before date_sub(now(), interval 7 day);' | mysql

Vedere ache la pagina su mysqldumpnel manuale di MySQL.

Risoluzione di problemi

Il demone MySQL non parte

Se MySQL non parte e non ci sono errori nei file di log, provate a verificare i permessi delle directory /var/lib/mysql e /var/lib/mysql/mysql. Se non appartengono a mysql:mysql, impostatelo voi:

 # chown mysql:mysql /var/lib/mysql -R

Se avete problemi di permessi anche dopo aver eseguito il comando, assicuratevi che esista una copia di my.cnf in /etc/:

 # cp /etc/mysql/my.cnf /etc/my.cnf

Riavviate.

Se leggete questi messaggi in /var/lib/mysql/hostname.err:

 [ERROR] Can't start server : Bind on unix socket: Permission denied
 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
 [ERROR] Aborting

/var/run/mysqld potrebbe avere i permessi sbagliati:

 # chown mysql:mysql /var/run/mysqld -R

Se mysqld mostra i seguenti errori:

Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

Eseguite il comando per installare le tavole predefinite da /usr:

# cd /usr
# mysql_install_db --user=mysql --ldata=/var/lib/mysql/

Impossibile eseguire mysql_upgrade perchè MySQL non parte

Provare in modalità di ripristino:

# mysqld_safe --datadir=/var/lib/mysql/

Eseguire:

# mysql_upgrade -u root -p

Resettare la password di amministratore

Interrompere il servizio mysqld. Eseguire questo comando:

# mysqld_safe --skip-grant-tables &

Connettersi al server MySQL. Eseguire:

# mysql -u root mysql

Cambiare la password di amministratore:

 mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
 mysql> FLUSH PRIVILEGES;
 mysql> exit

Riavviare il servizio mysqld.

Altre risorse