概述
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