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

本文介绍了解决MySQL备份中遇到的特殊字符问题、指定字符开头的表备份及压缩方法,并提供了一个Java代码示例用于执行这些操作。

总结

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.youkuaiyun.com/weixin_40920882/article/details/106362953
3,https://stackoverflow.com/questions/5609620/show-tables-statement-with-multiple-like-values

<think>我们参考引用内容,特别是引用[3]和引用[5]提到了字符集配置。根据引用[3]:“Ubuntu 18.04 下MySQL数据库的安装、基本配置和完全卸载”中提到了字符集配置,引用[5]也提到了修改字符集的方法。 步骤: 1. 修改MySQL配置文件my.cnf(在Ubuntu中通常位于/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf) 2. 在[mysqld]部分添加字符集配置 3. 重启MySQL服务 4. 验证字符集是否修改成功 具体操作: 1. 使用文本编辑器打开MySQL的配置文件。根据引用[3]和引用[4]的提示,配置文件可能是`/etc/mysql/my.cnf`,但有时配置被包含在`/etc/mysql/mysql.conf.d/mysqld.cnf`中。我们可以尝试打开其中一个,通常我们修改`mysqld.cnf`。 2. 在[mysqld]部分添加以下配置: character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci 注意:MySQL 5.7默认可能使用utf8,但utf8在MySQL中并不是完整的UTF-8,推荐使用utf8mb4。 3. 同时,为了确保客户端和服务器的交互使用相同的字符集,我们可以在配置文件的[client]和[mysql]部分添加默认字符集(如果这些部分不存在,可以添加): [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 4. 保存配置文件后,重启MySQL服务: sudo systemctl restart mysql 5. 验证:登录MySQL,执行以下命令: mysql -u root -p SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; 注意:如果之前已经创建了数据库,那么修改配置文件只会影响之后创建的数据库。对于已有数据库,需要单独修改其字符集。 修改已有数据库字符集: ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 修改已有字符集(需要逐修改): ALTER TABLE 名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 注意:修改已有可能会影响现有数据,建议先备份。 另外,引用[5]中提到修改root密码的命令,但这里我们不需要。 如果遇到问题,请检查MySQL错误日志(通常位于/var/log/mysql/error.log)。 根据引用[3]:“Ubuntu 18.04 下MySQL数据库的安装、基本配置和完全卸载”中提到了字符集配置,我们可以参考其步骤。 但是,请注意,引用[4]中提到了在Windows下配置my.ini,而我们在Ubuntu下是配置my.cnf(或mysqld.cnf),所以不要混淆。 总结步骤: 1. 备份数据库(重要)。 2. 修改MySQL配置文件,添加字符集设置。 3. 重启MySQL服务。 4. 检查全局字符集设置。 5. 根据需要修改已有数据库字符集。 注意:在修改配置文件之前,建议先备份原配置文件。 相关问题: 1. 如何修改MySQL已有数据库字符集? 2. 在Ubuntu 18.04中,MySQL的配置文件通常位于哪些路径? 3. 如何查看MySQL当前使用的字符集? 4. 为什么推荐使用utf8mb4而不是utf8? 5. 修改MySQL字符集后,应用程序需要注意什么?</think>### Ubuntu 18.04 MySQL 5.7 字符集修改方法 #### 步骤 1:修改 MySQL 配置文件 1. **打开配置文件** MySQL 5.7 的主配置文件通常是 `/etc/mysql/mysql.conf.d/mysqld.cnf`: ```bash sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf ``` 2. **添加字符集配置** 在 `[mysqld]` 部分添加以下内容: ```ini [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect = 'SET NAMES utf8mb4' ``` - `utf8mb4` 支持完整的 Unicode 字符(如 emoji) - `init_connect` 确保新连接使用指定字符集[^3][^5] 3. **保存并退出** `Ctrl+O` → `Enter` → `Ctrl+X` #### 步骤 2:重启 MySQL 服务 ```bash sudo systemctl restart mysql ``` #### 步骤 3:验证字符集修改 1. 登录 MySQL: ```bash mysql -u root -p ``` 2. 执行查询命令: ```sql SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; ``` 正确结果应显示: ``` character_set_server | utf8mb4 collation_server | utf8mb4_unicode_ci ``` #### 步骤 4:修改现有数据库字符集(可选) 对已创建的数据库,需手动修改字符集: ```sql ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 注意事项 1. **配置文件位置** 如果 `/etc/mysql/my.cnf` 存在且包含 `!includedir` 指令,需确保修改的是实际加载的配置文件[^2][^4]。 2. **权限问题** 修改配置文件后若无法重启 MySQL,检查文件权限: ```bash sudo chown mysql:mysql /etc/mysql/mysql.conf.d/mysqld.cnf ``` 3. **数据兼容性** - 修改字符集前备份数据库:`mysqldump -u root -p --all-databases > backup.sql` - 已有需单独修改: ```sql ALTER TABLE 名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` --- ### 相关问题 1. 如何检查 MySQL 当前使用的字符集配置? 2. 修改字符集后出现乱码如何排查? 3. `utf8` 和 `utf8mb4` 有什么区别?为什么推荐后者? 4. 如何批量修改所有数据库字符集? 5. MySQL 字符集配置不生效的常见原因有哪些?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值