如果没有 sudo,glob 模式上的 mv 将无法工作

如果没有 sudo,glob 模式上的 mv 将无法工作

我在用MySQL数据库上乌班图机器。

我的MySQL数据目录是/var/lib/mysql/,因为我有一个名为“数据库测试“,所以,我有一个名为db_test/under 的目录/var/lib/mysql/。所有表信息都在/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
...

我想要实现的目标很简单,只需创建一个名为“的新目录”备份“, 和将所有文件移动到 /var/lib/mysql/db_test//var/lib/mysql/backup/目录。所以,我在下面运行以下命令我的主目录的子目录:

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

第一个mkdir命令成功运行,我确实在下面得到了一个名为“backup/”的新目录/var/lib/mysql/

但是第二个命令失败了,并显示以下错误消息:

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

为什么??我的db_test/目录下有/var/lib/mysql/很多表文件,为什么会出现错误消息?

聚苯乙烯 我知道只有root用户可以访问/var/lib/mysql/。难道是这个原因吗? (但我用过sudo),但我不确定......以及如何摆脱它?

答案1

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

当您键入该内容时,您的用户的 shell 会尝试展开/var/lib/mysql/db_test/*.如果您的用户无权访问该目录,则会失败,并且不会进行替换。

所以mv运行的命令sudo/var/lib/mysql/db_test/*作为文字文件名。具有此类名称的文件不存在。

尝试使用:

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

但你应该真的,真的考虑使用数据库工具进行数据库备份。

答案2

这不是 MySQL 数据库备份的方式。相反,你需要mysqldump像这样使用:

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

不要在/var/lib/mysql目录中创建备份目录,将其放在其他地方。在上面的示例中,将 db_test 替换root为数据库用户的名称,并将 db_test 替换为您的数据库的名称。系统将提示您输入密码,该密码是数据库用户的密码,而不是您本地帐户的密码。当这一切都完成后,〜/backup/db_test.sql 将包含完整备份。要恢复备份,您只需

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

这会将备份导入 MySQL。再次将上述名称替换为其各自的值。

相关内容