除了使用 mysqldump(参见 MySQL/管理部分),您还可以导出/导入原始数据。


导出数据

数据可以通过 INTO OUTFILE 关键字导出:

SELECT * FROM destinataire INTO OUTFILE '/tmp/test' WHERE id IN (41, 141, 260, 317, 735, 888, 1207, 2211);

需要注意以下几点:

  • 文件将由 MySQL 守护进程写入,而不是运行 MySQL 客户端的用户。
  • 文件将存储在服务器上,而不是您的本地主机上。
  • 服务器需要对指定路径有写入权限(通常,服务器无法写入您的主目录,例如 /home 目录)。因此在示例中,我们(不太安全地)将路径设置为 /tmp

您也可以通过命令行导出数据:

mysql < query.txt > output.txt

其中 query.txt 包含一条 SQL 查询,输出将存储在 output.txt 中。


导入数据

在另一台数据库/计算机等中可以导入数据:

LOAD DATA INFILE '/tmp/test' INTO TABLE destinataire;

可选参数包括:

  • FIELDS TERMINATED BY '\t'
  • LINES TERMINATED BY '\n'
  • IGNORE 1 LINES

这些参数用于指定文档格式以及是否有表头。 如果数据文件中的列与数据库表的列不对应,可以映射列,甚至可以通过使用虚拟变量省略某些列:

LOAD DATA LOCAL INFILE
'/tmp/test'
INTO TABLE destinataire
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
  @dummy,
  name,
  phone_number,
  @dummy,
  @dummy,
  @dummy,
  @dummy,
  @dummy,
  @dummy,
  @dummy
);

在这个例子中,我们只需要数据文件中的第二列和第三列,并将这些值存储在数据库表的 namephone_number 列中。


内容细节

如果要导入一个 .sql 文件,该文件会创建用户及其数据库,需要注意以下问题:

  • 确保该用户在服务器上尚未存在,因为 MySQL 没有 DROP USER IF EXISTS 语句。
  • 数据库可以使用 DROP DATABASE IF EXISTS 语句。

例如:

DROP DATABASE IF EXISTS `base1`;
CREATE DATABASE `base1` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `base1`;

--DROP USER `user1`@'localhost';
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'p@ssword1';
GRANT USAGE ON *.* TO 'user1'@'localhost' IDENTIFIED BY 'p@ssword1';
GRANT ALL PRIVILEGES ON `base1`.* TO 'user1'@'localhost';

注意: 如果该命令返回错误“DROP DATABASE 语句被 PhpMyAdmin 禁用”,需要通过修改 config.default.php 文件启用它:

$cfg['AllowUserDropDatabase'] = true;

之后清空浏览器缓存即可。

最后修改: 2025年01月17日 星期五 19:26