آموزش کامل خروجی گرفتن CSV از MariaDB با استفاده از SELECT INTO OUTFILE

یکی از روش‌های ساده و سریع برای خروجی گرفتن داده‌ها از جدول‌های MariaDB، استفاده از دستور SELECT ... INTO OUTFILE است. این روش به شما امکان می‌دهد نتایج یک کوئری را مستقیماً در یک فایل CSV ذخیره کنید و بدون نیاز به ابزارهای جانبی، داده‌ها را به فرمت استاندارد انتقال دهید.

در این مقاله، مراحل کامل انجام کار را به‌صورت عملی و همراه با مثال اجرا شده روی یک MariaDB واقعی توضیح می‌دهیم.

1. ورود به MariaDB

mysql -u root

اگر همه‌چیز درست باشد، پیام ورود MariaDB نمایش داده می‌شود.


2. مشاهده دیتابیس‌ها

show databases;
خروجی چیزی شبیه زیر خواهد بود:
+--------------------+
| Database           |
+--------------------+
| company            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| test_replication   |
+--------------------+
 

3. انتخاب دیتابیس مناسب

برای نمونه ما روی دیتابیس test کار می‌کنیم:

use test;

4. ساخت جدول تستی نمونه

برای تست خروجی گرفتن CSV یک جدول فرضی ایجاد می‌کنیم:

CREATE TABLE testuser (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    loan_type VARCHAR(50) NOT NULL,
    amount DECIMAL(12,2) NOT NULL,
    status VARCHAR(30) NOT NULL,
    created_at DATETIME NOT NULL
);

5. اضافه کردن داده نمونه
 
INSERT INTO loan_userloan (user_id, loan_type, amount, status, created_at) VALUES
(101, 'EDUCATOR_LENDING', 1500000.00, 'APPROVED', '2025-01-10 09:15:00'),
(102, 'PERSONAL_LENDING', 800000.00, 'PENDING', '2025-01-11 10:30:00'),
(103, 'EDUCATOR_LENDING', 2200000.00, 'APPROVED', '2025-01-12 11:45:00'),
(104, 'BUSINESS_LENDING', 5000000.00, 'REJECTED', '2025-01-13 14:20:00'),
(105, 'EDUCATOR_LENDING', 1750000.00, 'PENDING', '2025-01-14 16:10:00');
 
6. اجرای کوئری اصلی
SELECT *
FROM loan_userloan
WHERE loan_type = 'EDUCATOR_LENDING';
 
نمونه خروجی:
+----+---------+------------------+------------+----------+---------------------+
| id | user_id | loan_type        | amount     | status   | created_at          |
+----+---------+------------------+------------+----------+---------------------+
|  1 |     101 | EDUCATOR_LENDING | 1500000.00 | APPROVED | 2025-01-10 09:15:00 |
|  3 |     103 | EDUCATOR_LENDING | 2200000.00 | APPROVED | 2025-01-12 11:45:00 |
|  5 |     105 | EDUCATOR_LENDING | 1750000.00 | PENDING  | 2025-01-14 16:10:00 |
+----+---------+------------------+------------+----------+---------------------+
 

پوشه‌ای که MariaDB اجازهٔ نوشتن دارد وجود ندارد یا دسترسی ندارد.

برای بررسی مسیر مجاز:

SHOW VARIABLES LIKE 'secure_file_priv';

در دیتابیس ما مقدار آن خالی بود:

یعنی MariaDB محدودیتی برای مسیر ندارد، اما مسیر انتخاب‌شده باید وجود داشته باشد و کاربر mysql مالک آن باشد.

 

8. ساخت مسیر مجاز برای خروجی گرفتن

در سیستم‌عامل:

sudo mkdir -p /var/lib/mysql-files
sudo chown mysql:mysql /var/lib/mysql-files
sudo chmod 750 /var/lib/mysql-files

این مرحله بسیار مهم است چون سرویس MariaDB به‌صورت user = mysql اجرا می‌شود.


9. اجرای دستور خروجی گرفتن CSV

پس از ساخت مسیر، دوباره در MariaDB دستور را اجرا کنید:

SELECT *
FROM testuser 
WHERE loan_type = 'EDUCATOR_LENDING'
INTO OUTFILE '/var/lib/mysql-files/testusertable.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

اگر همه چیز درست باشد، این پیغام را خواهیم گرفت:
Query OK, 3 rows affected, 1 warning
 

10. نکته مهم: عدم وجود Header در OUTFILE

خروجی OUTFILE هدر ندارد. اگر می‌خواهید هدر اضافه کنید:

(SELECT 'id','user_id','loan_type','amount','status','created_at')
UNION ALL
(SELECT id,user_id,loan_type,amount,status,created_at
 FROM testuser
 WHERE loan_type='EDUCATOR_LENDING')
INTO OUTFILE '/var/lib/mysql-files/educator_testuser.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

روش SELECT ... INTO OUTFILE یکی از سریع‌ترین و کارآمدترین راه‌های خروجی گرفتن از MariaDB است. تنها نکتهٔ مهم این است که مسیر خروجی باید برای MariaDB قابل نوشتن باشد. پس از تنظیم مسیر و سطح دسترسی صحیح، ذخیره‌سازی نتایج یک کوئری در قالب CSV بسیار ساده و قابل اتکا خواهد بود.