mv sur un model glob ne fonctionne pas sans sudo

J'utilise la base de données MySQL sur la machine Ubuntu .

Mon directory de données MySQL est /var/lib/mysql/ , puisque j'ai une database nommée " db_test ", j'ai donc un directory nommé db_test/ under /var/lib/mysql/ . Et toutes les informations de la table sont sous /var/lib/mysql/db_test/

 /var/lib/mysql# ls db_test /var/lib/mysql# cd db_test /var/lib/mysql/db_test# ls cars.frm cars.MYD cars.MYI customers.frm customers.MYD ... 

Ce que je veux réaliser est très simple, il suffit de créer un nouveau directory nommé " backup " et de déplacer tous les files sous /var/lib/mysql/db_test/ dans le /var/lib/mysql/db_test/ /var/lib/mysql/backup/ . Donc, j'exécute les commands suivantes sous un sous-directory de mon directory personnel :

 ~/tmp$ sudo mkdir /var/lib/mysql/backup ~/tmp$ sudo mv /var/lib/mysql/db_test/* /var/lib/mysql/backup 

La première command de mkdir exécutée avec succès, j'ai obtenu un nouveau directory nommé "backup /" sous /var/lib/mysql/

Mais la deuxième command a échoué , avec le message d'erreur suivant:

 mv: cannot stat `/var/lib/mysql/db_test/*': No such file or directory 

Pourquoi?? J'ai db_test/ directory sous /var/lib/mysql/ et de nombreux files de table à l'intérieur, pourquoi il soulève le message d'erreur?

PS Je sais que seul l'user root peut accéder à /var/lib/mysql/ . Pourrait-il être la raison? (mais j'ai utilisé sudo ), je ne suis pas sûr cependant … et comment s'en débarrasser?

 $ sudo mv /var/lib/mysql/db_test/* /var/lib/mysql/backup 

Lorsque vous tapez cela, le shell de l'user tente de développer la list de files de /var/lib/mysql/db_test/* . Si votre user n'a pas access à ce directory, celui-ci échouera et aucune substitution n'est effectuée.

Ainsi, la command mv exécutée par sudo obtiendra /var/lib/mysql/db_test/* comme nom de file littéral . Un file avec un tel nom n'existe pas.

Essayez avec:

 $ sudo sh -c 'mv /var/lib/mysql/db_test/* /var/lib/mysql/backup' 

Mais vous devriez vraiment , vraiment envisager d'utiliser des outils de database pour faire des sauvegardes de bases de données.

Ce n'est pas ainsi que vous faites les sauvegardes de bases de données MySQL. Au lieu de cela, vous devez utiliser mysqldump comme ceci:

 mysqldump -u root -p db_test > ~/backup/db_test.sql 

Ne créez pas de directory de sauvegarde dans le directory /var/lib/mysql , placez-le ailleurs. Dans l'exemple ci-dessus, remplacez root par le nom de l'user de database et db_test par le nom de votre database. Vous serez invité à entrer un mot de passe qui correspond au mot de passe de l'user de la database, pas au mot de passe de votre count local. Quand tout est dit et fait ~ / backup / db_test.sql contiendra une sauvegarde complète. Pour restaurer une sauvegarde, il vous suffit de

 mysql -u root -p db_test < ~/backup/db_test.sql 

Cela importera la sauvegarde dans MySQL. Remplacez à nouveau les noms mentionnés ci-dessus avec leurs valeurs respectives.