mysql8 导入导出工具类,支持windows 和linux

发布于:2024-07-08 ⋅ 阅读:(45) ⋅ 点赞:(0)

概述

1)导入导出工具类 支持windows 和linux,详见第3部分
2)导入、导出参数在 dbeaver 中应用,详见第4部分
整理原因:

1)中文乱码
--default-character-set=utf8 
2)BLOB 导出后,导入失败
--hex-blob

1、mysql 导出参数

这些参数组合在一起,旨在生成一个完整、高效、可靠的导出文件,适用于备份和迁移数据库。

参数:--skip-lock-tables --routines --add-drop-table --disable-keys --extended-insert --default-character-set=utf8 --hex-blob

1、--skip-lock-tables:
此选项在导出表时不锁定它们。这可以避免在导出过程中阻止其他会话的操作,但可能会导致导出数据的一致性问题,特别是如果表在导出过程中发生了更改。

2、--routines:
导出存储过程和函数。这对于备份数据库中所有的逻辑非常重要。

3、--add-drop-table:
在导出文件中包含 DROP TABLE 语句。这意味着在导入导出文件时,会先删除表,然后再重新创建它们。这对于确保目标数据库中的表结构与源数据库一致非常有用。

4、--disable-keys:
在导出文件中包含 ALTER TABLE ... DISABLE KEYS 和 ALTER TABLE ... ENABLE KEYS 语句。这在导入过程中会暂时禁用并重新启用索引,从而加速导入速度。

5、--extended-insert:
使用扩展插入语句。这意味着多个行的数据会被合并到一个 INSERT 语句中,从而减少导出文件的大小并加快导入速度。

6、--default-character-set=utf8:
指定导出文件的默认字符集为 UTF-8。这可以确保字符数据在导入时不会出现乱码。

7、--hex-blob:
将 BLOB 字段的数据以十六进制格式导出。这对于确保二进制数据在传输和存储过程中不被损坏非常有用。

2、mysql 导入参数

导入参数:
1、--default-character-set=utf8
指定导入过程中使用的默认字符集。例如:--default-character-set=utf8。

下面为非必须
1、--force:
在发生错误时继续执行。这对于导入过程中遇到错误但希望继续导入剩余数据的情况很有用。

2、--verbose:
启用详细模式,会输出更多的导入过程信息。

3、--show-warnings:
显示警告信息。启用此选项可以在导入过程中看到警告。

4、--comments:
保留 SQL 文件中的注释。

5、--ignore-errors:
忽略指定的错误类型。

3、导入、导出工具类

支持windows 和linux

package com.xxx;

import cn.hutool.core.util.StrUtil;
import cn.hutool.system.SystemUtil;

import java.util.HashMap;

public class DatabaseUtil {

  
    /**
     * 获取mysql备份命令
     *
     * @param dbHost
     * @param dbName
     * @param username
     * @param pwd
     * @return
     */
    public static String mysqlBackLinuxCmd(String dbHost, String dbName, String username, String pwd, String saveSqlFile) {
        return String.format("mysqldump --skip-lock-tables --routines" +
                        " --add-drop-table --disable-keys --extended-insert" +
                        " --default-character-set=utf8 --hex-blob" +
                        " -h%s -u%s -p%s -R %s > %s", dbHost,
                username, pwd, dbName, saveSqlFile);
    }

    /**
     * 获取mysql备份命令
     * 切换磁盘需要添加,并奇幻盘符下命令执行
     *
     * @param dbHost
     * @param dbName
     * @param username
     * @param pwd
     * @return
     */
    public static String mysqlBackWindowsCmd(String dbHost, String dbName, String username, String pwd, String saveSqlFile) {
        return String.format("d: && cd D:/Program Files/MySQL/MySQL Server 8.0/bin && .\\mysqldump.exe --skip-lock-tables " +
                        " --routines --add-drop-table --disable-keys --extended-insert --default-character-set=utf8 --hex-blob" +
                        " -h%s -u%s -p%s -R %s > %s", dbHost,
                username, pwd, dbName, saveSqlFile);
    }

    /**
     * 获取mysql备份恢复命令
     *
     * @param dbHost
     * @param dbName
     * @param username
     * @param pwd
     * @return
     */
    public static String mysqlRecoveryWindowsCmd(String dbHost, String dbName, String username, String pwd, String sqlPath) {
        return String.format("d: && cd D:/Program Files/MySQL/MySQL Server 8.0/bin && .\\mysql.exe --default-character-set=utf8 -h%s -u%s -p%s %s < %s", dbHost,
                username, pwd, dbName, sqlPath);
    }


    /**
     * 获取mysql备份恢复命令
     *
     * @param dbHost
     * @param dbName
     * @param username
     * @param pwd
     * @return
     */
    public static String mysqlRecoveryLinuxCmd(String dbHost, String dbName, String username, String pwd, String sqlPath) {
        return String.format("mysql --default-character-set=utf8 -h%s -u%s -p%s %s < %s", dbHost,
                username, pwd, dbName, sqlPath);
    }
}

4、命令在 dbeaver 中 应用

导出:
1、工具导出添加参数 --default-character-set=utf8
2、工具导出勾选如下选项
在这里插入图片描述
导入:
1、工具导入添加参数 --default-character-set=utf8
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到