解决mysql报错:1290 - The MySQL server is running with the --secure-fi ...

打印 上一主题 下一主题

主题 974|帖子 974|积分 2922

当使用 SELECT ... INTO OUTFILE 或 LOAD DATA INFILE 语句时,如果遇到错误 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement,这是因为 MySQL 服务器启用了 --secure-file-priv 选项。这个选项限制了数据导入和导出操纵只能在指定的目次中进行,以增强安全性。
解决方法

方法一:使用指定目次


  • 查找指定目次
    起首,你必要找到 --secure-file-priv 指定的目次。可以通过以下查询获取该目次:
    1. SHOW VARIABLES LIKE 'secure_file_priv';
    复制代码
    输出大概雷同于:
    1. +------------------+-----------------------+
    2. | Variable_name    | Value                 |
    3. +------------------+-----------------------+
    4. | secure_file_priv | /var/lib/mysql-files/ |
    5. +------------------+-----------------------+
    复制代码
  • 将文件放置在指定目次
    将你要导入或导出的文件放置在上述查询返回的目次中。
  • 修改 SQL 语句
    修改你的 SQL 语句,使其指向正确的目次。
    导出数据示例
    1. SELECT order_id, customer_name, order_date, total_amount
    2. INTO OUTFILE '/var/lib/mysql-files/orders.csv'
    3. FIELDS TERMINATED BY ','
    4. ENCLOSED BY '"'
    5. LINES TERMINATED BY '\n'
    6. FROM orders;
    复制代码
    导入数据示例
    1. LOAD DATA INFILE '/var/lib/mysql-files/orders.csv'
    2. INTO TABLE orders
    3. FIELDS TERMINATED BY ','
    4. ENCLOSED BY '"'
    5. LINES TERMINATED BY '\n'
    6. IGNORE 1 LINES;
    复制代码
方法二:禁用 --secure-file-priv 选项

如果你确实必要在其他目次中进行数据导入和导出操纵,可以禁用 --secure-file-priv 选项。但请留意,这样做会降低安全性。

  • 编辑 MySQL 配置文件
    打开 MySQL 的配置文件 my.cnf 或 my.ini,通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf。
  • 注释或删除 secure-file-priv 选项
    找到 secure-file-priv 选项并注释掉或删除它。
    1. # [mysqld]
    2. # secure-file-priv = /var/lib/mysql-files/
    复制代码
  • 重启 MySQL 服务
    保存配置文件并重启 MySQL 服务以使更改生效。
    1. sudo systemctl restart mysql
    复制代码
示例

假设你已经找到了 --secure-file-priv 指定的目次 /var/lib/mysql-files/,以下是具体的示例:
导出数据


  • 将文件路径修改为指定目次
    1. SELECT order_id, customer_name, order_date, total_amount
    2. INTO OUTFILE '/var/lib/mysql-files/orders.csv'
    3. FIELDS TERMINATED BY ','
    4. ENCLOSED BY '"'
    5. LINES TERMINATED BY '\n'
    6. FROM orders;
    复制代码
  • 确保文件权限
    确保 MySQL 服务器有权限写入该目次。你可以使用以下下令更改目次权限:
    1. sudo chown mysql:mysql /var/lib/mysql-files/
    2. sudo chmod 755 /var/lib/mysql-files/
    复制代码
导入数据


  • 将文件放置在指定目次
    将 orders.csv 文件复制到 /var/lib/mysql-files/ 目次中:
    1. sudo cp /path/to/orders.csv /var/lib/mysql-files/
    复制代码
  • 确保文件权限
    确保 MySQL 服务器有权限读取该文件。你可以使用以下下令更改文件权限:
    1. sudo chown mysql:mysql /var/lib/mysql-files/orders.csv
    2. sudo chmod 644 /var/lib/mysql-files/orders.csv
    复制代码
  • 执行导入操纵
    1. LOAD DATA INFILE '/var/lib/mysql-files/orders.csv'
    2. INTO TABLE orders
    3. FIELDS TERMINATED BY ','
    4. ENCLOSED BY '"'
    5. LINES TERMINATED BY '\n'
    6. IGNORE 1 LINES;
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表