导出线上数据到本地
导出sql
遇到一个临时需求, 导出指定条件的线上数据到excel文件, 首先写好sql, 在终端登录, 执行sql, 查询无误后, 再执行
select xxx from table into outfile '/tmp/file_name.csv';
返回结果: error 1045 access denied, 说明无权限执行导出;
更换导出操作:
mysql -h ip -u user_name -P 3306 --database="数据库名称" --default-character-set=utf8 -e "select xxx from table" > /tmp/file_name.csv -p
执行成功
cd /tmp
sz /tmp/file_name.csv # 选择保存路径, 保存到本地
说明
此操作绕过了mysql用户的写权限检查, 使用的是linux用户的写权限做导出, mysql用户在这里只负责查询
查看导出文件, 发现导出的格式并不是逗号分隔的csv, 需要手动处理 ; 正则匹配连续空格, 替换为逗号 , 匹配内容 [^\S\n], 这样不会匹配到换行
注意
- 不要在命令行中明文输出数据库密码, 如果有人恶意登录服务器可以查看终端调用历史, 直接执行就进入数据库了;
mysql -h ip -u user -P 3306 -p passwd
这样的写法有安全问题 - 如果default-character-set使用 utf8 在 excel 打开中文会乱码