MySql导入

文件目录

show variables like 'secure_file_priv';

如果值为NULL,需要先去打开,在my.conf中增加secure_file_priv="",然后必须重启数据库

打开导入配置

  • 检查服务器状态

    首先,确认服务器端的 local_infile全局变量当前是否已开启。在 MySQL 命令行中执行:

     
    SHOW GLOBAL VARIABLES LIKE 'local_infile';

    如果查询结果显示 ValueOFF,则说明服务器禁止了该功能

     

  • 开启服务器功能

    在 MySQL 命令行中执行以下命令,动态开启该功能(需要管理员权限,如 root用户):

     
    SET GLOBAL local_infile = 1;

    这个设置会在 MySQL 服务重启前一直有效

  • 重新连接后重试

    完成上述设置后,请退出当前 MySQL 连接,然后再次使用 ./mysql -uroot -p --local-infile=1重新登录。之后再次尝试执行您的 LOAD DATA LOCAL INFILE命令,应该就可以成功了

  • 永久生效配置(可选)

    通过 SET GLOBAL命令修改的设置只在当前 MySQL 服务运行期间有效。如果服务器重启,该设置会恢复默认值(通常是 OFF)。

    如果您希望此设置永久生效,需要修改 MySQL 的配置文件(通常是 my.cnfmy.ini文件)

    。在 [mysqld]部分添加以下一行:
     
    [mysqld]
    local_infile = ON

    添加配置并保存文件后,必须重启 MySQL 服务器服务才能使更改永久生效

导入

truncate table person;
load data infile '/opt/mysql8.0.35/mysql-files/person.txt' ignore into table person
fields terminated by ',' enclosed by '"' --用,进行分割,默认是tab,对于","这种不分割
lines terminated by '\n' starting by '' --行结束标志
ignore 1 lines -- 忽略第一行
(id,name,salary,@sal) --文件多一列:第四列不导入@sal是占位符 导入的表多一列,直接(id,name,salary)三列就行 【注意列名是单独放在语句最后(如果有set子句则在set语句之前)】
set import_time=current_timestamp --增加一列时间
set salary=if(@sal<3000, @sal+999, @sal); --对占位符那一列做处理
select * from peron;

 

客户端导入

LOAD DATA LOCAL INFILE '/data/mysql/mysql-files/tmp_accountcancel.txt' 
INTO TABLE tmp_accountcancel
FIELDS TERMINATED BY ',' 
ENCLOSED BY ''
LINES TERMINATED BY '\r\n' 
IGNORE 0 LINES
(userid); 

image

LOAD DATA LOCAL INFILE '/data/mysql/mysql-files/tab_username.txt' 
INTO TABLE tab_username
FIELDS TERMINATED BY ',' 
ENCLOSED BY ''
LINES TERMINATED BY '\r\n' 
IGNORE 0 LINES
(USERNAME); 

 

posted @ 2024-10-18 11:14  疯狂的草  阅读(16)  评论(0)    收藏  举报