mv em um padrão glob não funciona sem sudo

5

Estou usando o banco de dados MySQL na máquina Ubuntu .

Meu diretório de dados MySQL é /var/lib/mysql/ , pois tenho um banco de dados chamado " db_test ", portanto, tenho um diretório chamado db_test/ under /var/lib/mysql/ . E todas as informações da tabela estão em /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
...

O que eu quero alcançar é muito simples, basta criar um novo diretório chamado " backup " e mover todos os arquivos em /var/lib/mysql/db_test/ para o diretório /var/lib/mysql/backup/ . Então, eu corro os seguintes comandos em um subdiretório do meu diretório home :

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

O primeiro comando mkdir foi executado com sucesso, eu recebi um novo diretório chamado "backup /" sob /var/lib/mysql/

Mas o segundo comando falhou , com a seguinte mensagem de erro:

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

Por quê? Eu tenho db_test/ diretório em /var/lib/mysql/ e muitos arquivos de tabela dentro, por que elevar a mensagem de erro?

P.S. Eu sei que apenas usuário root pode acessar /var/lib/mysql/ . Poderia ser o motivo? (mas eu usei sudo ), eu não tenho certeza ... e como me livrar disso?

    
por Mellon 28.11.2011 / 17:14

2 respostas

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

Quando você digita isso, as tentativas de shell do usuário expandem a lista de arquivos para /var/lib/mysql/db_test/* . Se o seu usuário não tiver acesso a esse diretório, isso falhará e nenhuma substituição será feita.

Portanto, o comando mv executado por sudo receberá /var/lib/mysql/db_test/* como um nome de arquivo literal . Um arquivo com esse nome não existe.

Experimente:

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

Mas você deve realmente , realmente considerar o uso de ferramentas de banco de dados para fazer backups de banco de dados.

    
por 28.11.2011 / 17:45
3

Não é assim que você faz backups de banco de dados MySQL. Em vez disso, você precisa usar mysqldump da seguinte forma:

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

Não crie um diretório de backup no diretório /var/lib/mysql , coloque-o em outro lugar. No exemplo acima, substitua root pelo nome do usuário do banco de dados e db_test pelo nome do banco de dados. Você será solicitado a fornecer uma senha, que é a senha do usuário do banco de dados, não a senha da sua conta local. Quando tudo estiver dito e feito, o ~ / backup / db_test.sql conterá um backup completo. Para restaurar um backup, você simplesmente precisa

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

Isso importará o backup para o MySQL. Novamente substitua os nomes acima mencionados pelos seus respectivos valores.

    
por 28.11.2011 / 17:41