mysql5.7 备份指定字符开头的表,密码包含特殊字符

总结

1,解决mysql密码包含特殊字符的问题:
正常命令形如: mysqldump -u root -p 你的密码
包含特殊字符形如: mysqldump -u root --password='你的密码'
2,解决指定字符开头的问题和压缩问题:
压缩:mysqldump -u root --password='你的密码' 数据库名 $(mysql -u root --password='你的密码' 数据库名 -Bse "show tables like '指定开头的字符%'") | gzip > backup-$(date "+%Y-%m-%d").sql.gz
不压缩:mysqldump -u root --password='你的密码' 数据库名 $(mysql -u root --password='你的密码' 数据库名 -Bse "show tables like '指定开头的字符%'") > backup-$(date "+%Y-%m-%d").sql
3,java代码

public void backupDB() throws Exception {
        String[] cmd = new String[] {"/bin/sh", "-c", ""};
        try {
            StringBuilder arg = new StringBuilder();
            arg.append("mysqldump ");
            arg.append("-u root ");
            arg.append("--password='可带有特殊字符的密码' ");
            arg.append("--default-character-set=utf8 ");   // 指定字符集
            arg.append("--skip-opt ");  // 禁用将结果存入内存,否则大表会出现问题
            arg.append("--add-drop-database "); // 在CREATE DATABASE之前加 drop语句
            arg.append("--compress ");  // 压缩传输的信息
            arg.append("--databases 数据库名 ");  // 指定数据库
            arg.append("--tables $(mysql -u root --password='可带有特殊字符的密码' 数据库名 -Bse \"show tables like '指定开头的字符%'\") ");  // 指定表
            arg.append("--result-file /root/dbbackup/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() + ".sql"); // 文件路径+ 文件名
            cmd[2] = arg.toString();

            Process process = Runtime.getRuntime().exec(cmd);
            boolean exitValue = process.waitFor(20, TimeUnit.SECONDS); // 最多等待20s
            if (!exitValue) {
                throw new Exception("执行命令[" + JSON.toJSONString(cmd) + "]超时");
            }
        } catch (Throwable e) {
            log.error("执行命令[" + JSON.toJSONString(cmd) + "]失败. " + e);
            throw new Exception(e);
        }
    }

4,多个表的时候,如何处理

举例:show tables from stock_db where tables_in_stock_db like ‘biz_%’ or tables_in_stock_db like ‘st_%’

SHOW TABLES
FROM `<yourdbname>`
WHERE 
    `Tables_in_<yourdbname>` LIKE '%cms%'
    OR `Tables_in_<yourdbname>` LIKE '%role%';

一些参考:
1,mysqldump命令详解:https://www.jianshu.com/p/aaffa08e7853
2,Java程序在运行cmd命令mysqldump的时候失效的原因:https://blog.csdn.net/weixin_40920882/article/details/106362953
3,https://stackoverflow.com/questions/5609620/show-tables-statement-with-multiple-like-values

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值