1. 直接导出文件方法
1.1 基本语法
-- 将查询结果导出到文件
SELECT count(1) FROM table
INTO OUTFILE '/tmp/test.xls';
1.2 常见权限问题
# 检查MySQL数据目录权限
sudo ls -l /var/lib/mysql
# 修改目录权限
sudo chown -R mysql:mysql /data
1.3 完整导出示例
-- 导出完整数据
SELECT * FROM table
INTO OUTFILE '/tmp/export.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
2. 交互式导出方法
-- 设置输出重定向
mysql> pager cat > /tmp/test.txt
-- 执行查询(结果将写入文件)
mysql> SELECT * FROM table;
-- 恢复默认输出
mysql> nopager
-- 使用less查看输出
mysql> pager less
-- 使用more查看输出
mysql> pager more
3. 命令行导出方法
3.1 基本导出命令
# 直接导出到文件
mysql -h 127.0.0.1 -u root -p \
-e "SELECT * FROM table" > /tmp/export.txt
# 带密码的导出
mysql -h 127.0.0.1 -u root -pPASSWORD \
database_name -e "SELECT * FROM table" > /tmp/export.txt
3.2 高级导出选项
# 指定分隔符
mysql -h host -u user -p \
-B -N -e "SELECT * FROM table" \
--silent \
--skip-column-names \
--raw > /tmp/export.txt
4. 大数据量导出建议
4.1 CSV格式导出
# 使用mysqldump导出CSV
mysqldump -u root -p \
--fields-terminated-by=',' \
--fields-enclosed-by='"' \
--lines-terminated-by='\n' \
database_name table_name > /tmp/export.csv
4.2 分批导出大表
-- 使用LIMIT分批导出
SELECT * FROM large_table
WHERE id > last_exported_id
LIMIT 10000
INTO OUTFILE '/tmp/export_part.csv';
5. 安全和性能注意事项
5.1 权限控制
- 使用专门的导出用户
- 限制导出用户权限
- 避免导出敏感数据
5.2 性能优化
- 避免在生产高峰期导出大量数据
- 使用索引优化导出查询
- 考虑使用压缩格式
- 对大表使用分批导出
5.3 常见错误处理
# 权限问题
ERROR 1 (HY000): Can't create/write to file
# 解决方案
sudo chown mysql:mysql /export/path
sudo chmod 755 /export/path
6. 实用导出脚本示例
#!/bin/bash
# 数据库导出脚本
DB_USER="root"
DB_PASS="password"
DB_NAME="mydb"
EXPORT_DIR="/backup/mysql"
# 创建时间戳目录
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
EXPORT_PATH="${EXPORT_DIR}/${TIMESTAMP}"
mkdir -p $EXPORT_PATH
# 导出所有表
mysqldump -u $DB_USER -p$DB_PASS \
--single-transaction \
--routines \
--triggers \
$DB_NAME > "${EXPORT_PATH}/full_backup.sql"
# 压缩备份
tar -czvf "${EXPORT_PATH}.tar.gz" $EXPORT_PATH
echo "数据库备份完成:${EXPORT_PATH}"
7. 推荐工具
- Navicat
- MySQL Workbench
- phpMyAdmin
- DBeaver