我在用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。再次将上述名称替换为其各自的值。