SELECT ... INTO OUTFILE and mysql -e commands let you write table data directly to a comma-separated file.
The fastest server-side method is SELECT ... INTO OUTFILE. It streams the result set straight to a file on the MySQL host, avoiding client round-trips.
Run a normal SELECT with INTO OUTFILE, then define field and line delimiters:
SELECT *
INTO OUTFILE '/var/lib/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM Orders;
MySQL must have FILE privilege and write access to the target directory.
Use FIELDS TERMINATED BY, ENCLOSED BY, and ESCAPED BY to match downstream requirements. Example: TAB-separated with no quotes.
... FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '' ...
Yes. List needed columns and add WHERE:
SELECT id, customer_id, total_amount
INTO OUTFILE '/var/lib/mysql-files/big_orders.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
FROM Orders
WHERE total_amount > 500;
Run the query from the mysql client and redirect STDOUT locally:
mysql -u user -p -h prod \
-e "SELECT * FROM Orders" ecommerce \
--batch --silent > orders.csv
--batch produces tab-separated output; pipe through sed to replace tabs with commas if needed.
UNION a header row above the data:
(SELECT 'id','customer_id','order_date','total_amount')
UNION ALL
SELECT id, customer_id, order_date, total_amount
FROM Orders
INTO OUTFILE '/var/lib/mysql-files/orders_header.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
Create a dedicated EXPORT_ROLE with only SELECT and FILE privileges. Write exports to /var/lib/mysql-files, then move files via a privileged script to the final destination.
No. INTO OUTFILE refuses to overwrite or append for safety. Write to a new file and concatenate externally.
UNION a single-row SELECT of literal header values above the main SELECT before INTO OUTFILE.
Set LINES TERMINATED BY '\r\n' to produce CRLF endings compatible with Windows tools.