En aquest exemple podem veure com llistar les B.D. de MySQL i com llistar les taules d'una B.D. en concret. Utilitzem el client mysql i si l'usuari root encara no té password assignada (molt insegur, cal assignar-li una seguint l'explicació de més avall) l'opció -p no és necessària o cal introduir-la buida.
$ mysql -u root -p Enter password: mysql> show databases; +--------------+ | Database | +--------------+ | egroupware | | mambo452 | | mysql | | oscommerce | | phpgroupware | | provadb | | test | | zikmy | +--------------+ 8 rows in set (0.00 sec) mysql> 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 mysql> show tables; +-----------------+ | Tables_in_mysql | +-----------------+ | columns_priv | | db | | func | | host | | tables_priv | | user | +-----------------+ 6 rows in set (0.00 sec) mysql > quit
Primer cal saber el nom de la nostra màquina. Ho fem amb la comanda:
$ hostname
Ara assignarem el password d'usuari root dues vegades: per la màquina localhost i per la màquina nomservidor (el que hem obtingut amb la comanda anterior). En realitat totes dues són la mateixa màquina: una rep les peticions internes i l'altre les de l'exterior.
$ mysqladmin -u root -h localhost password 'novapassword' -p $ mysqladmin -u root -h nomservidor password 'novapassword' -p
$ mysql -u root -p
Enter password:
mysql> 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
mysql> select Host, User, Password from user;
+-----------+------------------+------------------+
| Host | User | Password |
+-----------+------------------+------------------+
| localhost | root | 4b29db693ef59bdc |
| zikmy | root | 4b29db693ef59bdc |
| localhost | | |
| zikmy | | |
| localhost | debian-sys-maint | 7eda1aa86ce9af77 |
+-----------+------------------+------------------+
5 rows in set (0.00 sec)
mysql > update user set Password=PASSWORD('nova_password') where user='root';
mysql > quit
Reiniciem el servidor per habilitar el nou password:
$ /etc/init.d/mysqld restart
//crear $ mysqladmin -u root -p create nom_base_dades //eliminar $ mysqladmin -u root -p drop nom_base_dades
$ mysql -u root -p mysql> GRANT select, insert, update, create, alter, delete, drop ON nom_base_dades.* TO usuari@localhost IDENTIFIED BY 'password'; mysql> GRANT ALL PRIVILEGES ON nom_base_dades.* TO usuari@localhost IDENTIFIED BY 'password';
En MySQL 5.0.2:
$ mysql -u root -p mysql> DROP USER nom_usuari
El més probable es que estigueu administrant MySQL 4.1.1 a la 5.0.1. Llavors cal algunes línies més de codi:
$ mysql -u root -p mysql> DELETE FROM mysql.user WHERE User='user_name' and Host='host_name'; mysql> FLUSH PRIVILEGES;
Fer un backup de totes les bases de taules d'una base de dades de mysql a un fitxer de text anomenat FITXER.sql:
$ mysqldump --opt --password=CLAU --user=USUARI NomBaseDades > FITXER.sql
Per fer una còpia de seguretat d'una taula d'una base de dades, s'ha d'afegir el nom de la taula a la sentència anterior:
$ mysqldump --opt --password=CLAU --user=USUARI NomBaseDades NomTaula > FITXER.sql
Volcar dades d'un fitxer FITXER.sql que conté comandes SQL:
$ mysql -u root -p nombasedades < FITXER.sql
Fitxer /etc/mysql/my.cnf ha de tenir skip-networking comentat i bind-address a 0.0.0.0:
#bind-address = 127.0.0.1 # Només permet connexions locals bind-address = 0.0.0.0 # Permet connexions des de qualsevol IP #skip-networking
Desprès cal reiniciar servidor mysql:
/etc/init.d/mysql restart
Fixem-nos que els fitxers /etc/hosts.deny i /etc/hosts.allow no continguin restriccions.
Podem comprovar que el port 3306 de mysql està obert fent:
nmap <ip_servidor>
Desprès hem de donar permisos d'accés a la base de dades per un usuari que accedeixi des del localhost, una IP determinada o des de qualsevol lloc:
mysql -u root -p GRANT select, insert, update, create, alter, delete, drop ON base_de_dades.* TO nom_usuari@localhost IDENTIFIED BY 'password'; GRANT select, insert, update, create, alter, delete, drop ON base_de_dades.* TO nom_usuari@IP_determinada IDENTIFIED BY 'password'; GRANT select, insert, update, create, alter, delete, drop ON base_de_dades.* TO nom_usuari IDENTIFIED BY 'password';
Exemple de cerca reemplaça:
update zik_content set fulltext2 = replace(fulltext2, '{/tabs}', '{/tab}');
mysqlcheck --user=root --password --databases nombasedades
sudo /Library/StartupItems/MySQLCOM/MySQLCOM start sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop
/usr/local/mysql/bin
El camp timestamp té una limitació i no mostra les dates més grans de l'any 2038. Hem d'utilitzar el camp datetine
A continuació un exemple de canvi del camp timestamp a datetine:
# rename the old TIMESTAMP field ALTER TABLE `zik_training_session` CHANGE `date_end` `temp_date_end` int(11) NOT NULL; # create a new DATETIME column of the same name as your old column ALTER TABLE `zik_training_session` ADD `date_end` DATETIME NOT NULL; # update all rows by populating your new DATETIME field UPDATE `zik_training_session` SET `date_end` = FROM_UNIXTIME(temp_date_end); # remove the temporary column ALTER TABLE `zik_training_session` DROP `temp_date_end`;