在MySQL数据库管理中,local_infile
参数是一个重要的系统变量,用于控制是否启用或禁用 LOAD DATA LOCAL INFILE
命令。当 local_infile
设置为 OFF
时,意味着客户端将无法使用此命令来从本地文件系统加载数据到数据库表中。
默认情况下,为了安全考虑,local_infile
被设置为 OFF
。然而,在需要频繁导入大量数据的场景下,开启此功能可以极大提高效率。
下面通过一个具体的例子来说明如何操作 local_infile
:
首先,我们查看一个名为 t
的表结构:
mysql> show create table test.t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`id` int(11) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
接着,检查当前 local_infile
的状态:
mysql> show variables like 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | OFF |
+---------------+-------+
1 row in set (0.00 sec)
尝试执行 LOAD DATA LOCAL INFILE
语句,由于 local_infile
被设置为 OFF
,因此会遇到错误:
mysql> load data local infile 'D:\ATMP\mysql_repl\5.6_local\data.txt' into table test.t fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';
ERROR 1148 (42000): The used command is not allowed with this MySQL version
为了解决这个问题,我们需要将 local_infile
设置为 ON
:
mysql> set global local_infile=ON;
Query OK, 0 rows affected (0.00 sec)
再次尝试相同的 LOAD DATA LOCAL INFILE
语句,这次成功了:
mysql> load data local infile 'D:\ATMP\mysql_repl\5.6_local\data.txt' into table test.t fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';
Query OK, 3 rows affected (0.06 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
以上步骤展示了如何通过调整 local_infile
配置项来控制数据的导入过程,这对于数据迁移和批量数据处理任务非常有用。