یکی از روشهای ساده و سریع برای خروجی گرفتن دادهها از جدولهای MariaDB، استفاده از دستور SELECT ... INTO OUTFILE است. این روش به شما امکان میدهد نتایج یک کوئری را مستقیماً در یک فایل CSV ذخیره کنید و بدون نیاز به ابزارهای جانبی، دادهها را به فرمت استاندارد انتقال دهید.
در این مقاله، مراحل کامل انجام کار را بهصورت عملی و همراه با مثال اجرا شده روی یک MariaDB واقعی توضیح میدهیم.
1. ورود به MariaDB
mysql -u root
اگر همهچیز درست باشد، پیام ورود MariaDB نمایش داده میشود.
2. مشاهده دیتابیسها
| 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
);
(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');
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 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';
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 بسیار ساده و قابل اتکا خواهد بود.