我在用MySQL在乌班图机器。
我需要物理移动下面的数据库文件/var/lib/mysql/
(这是所有数据库目录所在的位置)。
假设我有两个数据库,db_1和db_2,所以我可以在路径下看到两个目录(db_1/
和) 。在这两个数据库目录下,都有很多文件,保存着数据库的所有表信息。db_2/
/var/lib/mysql/
.frm
.MYD
.MYI
例如,db_1/
目录下有以下文件:
/var/lib/mysql/db_1# ls
cars.frm
cars.MYD
cars.MYI
customers.frm
customers.MYD
customers.MYI
departments.frm
departments.MYD
departments.MYI
...
其中包含汽车,顾客,部门表的信息。
我需要一个 shell 脚本来完成以下简单任务:
创建一个新的目录,命名
db_1_temp
为/var/lib/mysql/
移动与相关的文件汽车和顾客目录中的表
db_1
到db_1_temp
目录db_2
将目录中的文件移动到db_1
目录
笔记,用户需要根访问权限 /var/lib/mysql/
我需要将这些内容放在 .sh 文件中,以便可以在另一个应用程序中运行它。
抱歉,我不知道 shell 脚本,但需要这个东西。如果有人可以提供帮助,我将不胜感激,我认为这个 shell 脚本应该不难。我尝试抽出一些时间来学习shell,因为现在我正忙于其他软件开发。谢谢你!
答案1
不要直接重命名数据库目录。相反,转储数据库,创建一个新的数据库名称(这反过来将创建新的目录名称),然后将数据库转储回新的数据库名称:
mysqldump -u username -p olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql
一旦验证数据库正常运行,您就可以删除数据:
mysqladmin -u username -p drop oldatabase.
看这里以供参考。
在您的情况下,您可能想要创建一个 tmp 数据库,将 db_1 数据库转储到该临时数据库中,删除并重新创建 db_2 数据库,然后将 db_2 数据库转储到新空的 db_1 数据库中。
答案2
嗯,它只是移动文件,所以没什么复杂的——只需 3 个 mv 命令
#!/bin/bash
mkdir /var/lib/mysql/db_1_temp
mv /var/lib/mysql/db_1/cars* /var/lib/mysql/db_1_temp
mv /var/lib/mysql/db_1/customers* /var/lib/mysql/db_1_temp
mv /var/lib/mysql/db_2/* /var/lib/mysql/db_1_temp
但如果您打算使用新数据库,最好创建一个新的空数据库,然后使用 mysqldump 导入您需要的表。