移动数据库文件所需的简单 shell 脚本

移动数据库文件所需的简单 shell 脚本

我在用MySQL乌班图机器。

我需要物理移动下面的数据库文件/var/lib/mysql/(这是所有数据库目录所在的位置)。

假设我有两个数据库,db_1db_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 脚本来完成以下简单任务:

  1. 创建一个新的目录,命名db_1_temp/var/lib/mysql/

  2. 移动与相关的文件汽车顾客目录中的表db_1db_1_temp目录

  3. 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 导入您需要的表。

相关内容