一键导入:MySQL批量导入所有数据库技巧 (mysql 导入所有数据库)

在现代信息时代,数据已经成为企业和个人重要的资产,而MySQL作为最广泛应用的开源关系型数据库,被广泛应用于各大企业和个人系统中。在MySQL的应用过程中,一键导入多个数据库是一项重要的技巧,它可以大幅度提高数据库维护和迁移的效率。本文将介绍如何使用MySQL实现一键导入所有数据库的技巧。

一、备份导出

在一键导入之前,首先我们必须要将要导入的所有数据库进行备份,并将备份文件导出到一个指定目录。MySQL提供了mysqldump命令来实现备份导出功能,使用该命令可以将MySQL数据库备份成可读的文本文件,备份大体分为全备份和增量备份,全备份最为常用,下面是备份的基本命令:

(1)全备份:

“`mysqldump -u root -p –opt –all-databases > /path/to/backup-file.sql“`

其中,root和p是用户名和密码,–all-databases表示备份所有数据库,输出到备份文件中。

(2)增量备份:

“`mysqldump -u root -p –opt –databases db1 db2.. > /path/to/backup-file.sql“`

其中,db1、db2..表示选定要备份的数据库。

备份导出完成之后,我们可以将备份文件放置到一个指定目录。

二、批量导入

批量导入所有数据库需要使用MySQL提供的命令行工具mysql,该工具可以执行SQL命令,并在执行完毕后输出结果。使用mysql导入数据的时候,需要注意以下几个关键点:

(1)创建数据库 :在导入数据之前,需要先创建所有的数据库。

(2)指定编码 :使用SET NAMES utf8指令可以设置导入文本文件的编码。

(3)指定命令结束符 :使用DELIMITER指令可以指定SQL语句的结束符。

(4)导入文本文件 :使用source指令可以指定导入文本文件的路径。

下面是导入命令的基本语法:

“`

mysql -u root -p

SET NAMES utf8;

DELIMITER $$

DROP DATABASE IF EXISTS db1;

CREATE DATABASE db1 character set utf8mb4 collate utf8mb4_unicode_ci;

USE db1$$

SOURCE /path/to/db1-backup.sql$$

DROP DATABASE IF EXISTS db2;

CREATE DATABASE db2 character set utf8mb4 collate utf8mb4_unicode_ci;

USE db2$$

SOURCE /path/to/db2-backup.sql$$

“`

其中,root和p分别指代用户名和密码,DROP DATABASE IF EXISTS用于检索数据库是否存在,如果存在则删除,CREATE DATABASE用于新建指定编码的数据库,USE用于指定使用对应的数据库,SOURCE指令用于导入文本文件。

以上命令可以批量导入所有数据库,同时其它各种创建用户,表等常用命令也可以通过批量方式执行。

三、定时任务实现

虽然通过以上方法可以实现一键导入所有数据库,但是人工执行方法效率不够高,需要采用定时任务的方式来实现。为了实现定时任务,我们可以使用Linux操作系统自带的crontab命令,将导入命令添加到crontab定时任务中。下面是添加到crontab任务的基本语法:

“`

crontab -e

“`

打开编辑器,在文件底部添加如下任务:

“`

0 2 * * * /path/to/import-db.sh

“`

其中,0表示每个小时的0分开始执行任务,import-db.sh是上述批量导入的脚本文件路径。

通过以上方法,我们可以实现每天凌晨2点自动导入所有数据库。

结论

MySQL批量导入所有数据库技巧提高了数据库管理效率,通过备份导出,批量导入,定时任务实现可以实现一次性导入所有数据库。精通这一技巧可以在完整保证数据库数据一致性的前提提高数据库管理和维护效率。

(注:以上仅为作者一家之言,仅供参考。)

相关问题拓展阅读:

如何用MySQL命令对数据库进行导出/导入/技巧

info:

1.txt

zhangsan wuhan

lishi wuhan

把1.txt文件插入到mysql数据库中

1.mysql -u root -p 数据库名 导出的文件名

mysqldump -u wcnc -p gp_apps_wcnc > wcnc.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u wcnc -p gp_apps_wcnc users> wcnc_users.sql

3.导出一个数据库结构

mysqldump -u wcnc -p -d –add-drop-table gp_apps_wcnc >d:\wcnc_db.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库

常用source 命令

进入mysql数据库控制台,

如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source d:\wcnc_db.sql

4.可参看 MySQL数据的导出和导入工具:mysqldump

====================================

批处理是一种非交互式运行mysql程序的方法,如同您在mysql中使用的命令一样,你仍然将使用这些命令。为了实现批处理,您重定向一个文件到 mysql程序中,首先我们需要一个文本文件,这个文本文件包含有与我们在mysql中输入的命令相同的文本。比如我们要插入一些数据,使用包含下面文本的文件(文件名为New_Data.sql,当然我们也可以取名为New_Data.txt及任何其他的合法名字,并不一定要以后缀sql结尾):

USE Meet_A_Geek;

INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, “Block”);

INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, “Newton”);

INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, “Simmons”);

注意上面的这些句子的语法都必须是正确的,并且每个句子以分号结束。上面的USE命令选择数据库,INSERT命令插入数据。

下面我们要把上面的文件导入到数据库中,导入之前要确认数据库已经在运行,即是mysqld进程(或者说服务,Windows NT下面称为”服务“,unix下面为”进程“)已经在运行。然后运行下面的命令:

bin/mysql –p

接着按提示输入密码,如果上面的文件中的语句没有错误,那么这些数据就被导入到了数据库中。

命令行中使用LOAD DATA INFILE 从文件中导入数据到数据库:

现在您可能会问自己,”究竟为什么我要输入所有的这些SQL语句到文件中,然后通过程序运行它们呢?”这样看起来好像需要大量的工作。很好,你这样想很可能就对了。但是假如你有从所有这些命令中产生的log记录呢?现在这样就很棒,嗯,大多数数据库都会自动产生数据库中的事件记录的log。而大部分log 都包含有用过的原始的SQL命令。因此,如果您不能从您现在的数据库中导出数据到新的mysql数据库中使用,那么您可以使用log和mysql的批处理特性,来快速且方便地导入您地数据。当然,这样就省去了打字的麻烦。

LOAD DATA INFILE

这是我们要介绍的最后一个导入数据到MySQL数据库中的方法。这个命令与mysqlimport非常相似,但这个方法可以在mysql命令行中使用。也就是说您可以在所有使用API的程序中使用这个命令。使用这种方法,您就可以在应用程序中导入您想要导入的数据。

使用这个命令之前,mysqld进程(服务)必须已经在运行。启动mysql命令行:

bin/mysql –p

按提示输入密码,成功进入mysql命令行之后,输入下面的命令:

USE Meet_A_Geek;

LOAD DATA INFILE “/home/mark/data.sql” INTO TABLE Orders;

简单的讲,这样将会把文件data.sql中的内容导入到表Orders中,如mysqlimport工具一样,这个命令也有一些可以选择的参数。比如您需要把自己的电脑上的数据导入到远程的数据库服务器中,您可以使用下面的命令:

LOAD DATA LOCAL INFILE “C:\MyDocs\SQL.txt” INTO TABLE Orders;

上面的LOCAL参数表示文件是本地的文件,服务器是您所登陆的服务器。这样就省去了使用ftp来上传文件到服务器,MySQL替你完成了.

您也可以设置插入语句的优先级,如果您要把它标记为低优先级(LOW_PRIORITY),那么MySQL将会等到没有其他人读这个表的时候,才把插入数据。可以使用如下的命令:

LOAD DATA LOW_PRIORITY INFILE “/home/mark/data.sql” INTO TABLE Orders;

您也可以指定是否在插入数据的时候,取代或者忽略文件与数据表中重复的键值。替代重复的键值的语法:

LOAD DATA LOW_PRIORITY INFILE “/home/mark/data.sql” REPLACE INTO TABLE Orders;

上面的句子看起来有点笨拙,但却把关键字放在了让您的剖析器可以理解的地方。

下面的一对选项描述了文件的记录格式,这些选项也是在mysqlimport工具中可以用的。他们在这里看起来有点不同。首先,要用到FIELDS关键字,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:

TERMINATED BY character

ENCLOSED BY character

ESCAPED BY character

这些关键字与它们的参数跟mysqlimport中的用法是一样的. The

TERMINATED BY 描述字段的分隔符,默认情况下是tab字符(\t)

ENCLOSED BY描述的是字段的括起字符。比方以引号括起每一个字段。

ESCAPED BY 描述的转义字符。默认的是反些杠(backslash:\ ).

下面仍然使用前面的mysqlimport命令的例子,用LOAD DATA INFILE语句把同样的文件导入到数据库中:

LOAD DATA INFILE “/home/mark/Orders.txt” REPLACE INTO TABLE Orders FIELDS TERMINATED BY ‘,’

ENCLOSED BY ‘”‘;

LOAD DATA INFILE语句中有一个mysqlimport工具中没有特点:LOAD DATA INFILE 可以按指定的列把文件导入到数据库中。

当我们要把数据的一部分内容导入的时候,这个特点就很重要。比方说,我们要从Access数据库升级到MySQL数据库的时候,需要加入一些栏目(列/字段 /field)到MySQL数据库中,以适应一些额外的需要。这个时候,我们的Access数据库中的数据仍然是可用的,但是因为这些数据的栏目 (field)与MySQL中的不再匹配,因此而无法再使用mysqlimport工具。尽管如此,我们仍然可以使用LOAD DATA INFILE,下面的例子显示了如何向指定的栏目(field)中导入数据:

LOAD DATA INFILE “/home/Order.txt” INTO TABLE Orders(Order_Number, Order_Date, Customer_ID);

如您所见,我们可以指定需要的栏目(fields)。这些指定的字段依然是以括号括起,由逗号分隔的,如果您遗漏了其中任何一个,MySQL将会提醒您^_^ 。

关于mysql 导入所有数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 一键导入:MySQL批量导入所有数据库技巧 (mysql 导入所有数据库)