导出线上mysql数据

导出线上数据到本地

导出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], 这样不会匹配到换行

注意

  1. 不要在命令行中明文输出数据库密码, 如果有人恶意登录服务器可以查看终端调用历史, 直接执行就进入数据库了; mysql -h ip -u user -P 3306 -p passwd这样的写法有安全问题
  2. 如果default-character-set使用 utf8 在 excel 打开中文会乱码

你可能感兴趣的:(导出线上mysql数据)