Changer le mot de passe root MySQL sur Ubuntu 16.04

Cet article vous décrit la procédure pour changer le mot de passe root MySQL sur Ubuntu 16.04.

Lorsque vous installez MySQL sur Ubuntu (16.04), l’installation vous demande de fixer un mot de passe pour le compte root MySQL. Il peut arriver que si vous générez un mot de passe aléatoire que certains caractères ne passent pas bien dans la boite de dialogue prévue à cet effet. Vous vous retrouvez alors dans l’impossibilité de vous connecter en root sur votre nouvelle installation.

Désactiver l’authentification MySQL

Pour changer le mot de passe root MySQL, il faut d’abord désactiver l’authentification MySQL afin de pouvoir se connecter.

Cette opération est possible grâce à l’option skip-grant-tables

Editez le fichier /etc/mysql/mysql.conf.d/mysqld.cnf et ajoutez cette option dans la section [mysqld]

[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
skip-grant-tables

Redémarrer mysql :

$ /etc/init.d/mysql restart

Changer le mot de passe root MySQL

Vous pouvez maintenant vous connecter sans mot de passe. Exécutez la console mysql en ligne de commande pour changer le mot de passe comme suit :

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.16-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql;

mysql> UPDATE user SET authentication_string = PASSWORD('password'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Réactivez l’authentification MySQL

Editez le fichier /etc/mysql/mysql.conf.d/mysqld.cnf et enlevez l’option skip-grant-tables.

Redémarrez mysql, l’authentification et votre mot de passe root MySQL sont à jour

$ /etc/init.d/mysql restart

 

Mysql: dumper une base à travers ssh

J’ai un serveur de QA dont le disque n’a pas assez d’espace libre pour faire un dump d’une base mysql. Pour récupérer ce dump et transférer le service sur un autre serveur, j’ai redirigé le dump à travers ssh directement sur la nouvelle machine.

mysqldump --skip-extended-insert -u user -p dbname | ssh user@serveur 'cat >~/database.dump.sql'

Avec –skip-extended-insert pour ne faire qu’un INSERT sql par ligne.

 

Mysql: retrouver toutes les tables qui contiennent un champ donné

J’ai eu besoin pour une migration de retrouver toutes les tables qui contenaient un champ spécifique : tag_id

Mysql fournit une base spéciale « information_schema » qui contient toutes les informations sur les noms de bases, de tables et colonnes (entre autres). Le détail des tables de cette base est disponible dans la documentation MySQL.

Pour retrouver un champ en particulier, il faut interroger la table columns :

SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('tag_id')
    AND TABLE_SCHEMA='750g';

Exemple de résultats :

bloc
link
multicontent
tags_recipes

J’ai filtré ici sur TABLE_SCHEMA pour n’afficher que les résultats de la base sur laquelle je travaille.