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

  • Post author:
  • Post category:mysql


总结

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



版权声明:本文为javaStudyeye原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。