golang 实现的零依赖、高性能、并发 mysqldump 工具。
mysqldump
golang 中实现的零依赖、高性能、并发 mysqldump 工具。
项目地址: https://github.com/dengjiawen8955/mysqldump/blob/master/README-zh.md
文章地址: https://bmft.tech/#/2-program/0325-golang-implements-mysqldump
Features
- 自定义 Writer: 如本地文件、多文件储存、远程服务器、云存储等。(默认控制台输出)。
- 支持所有 MYSQL 数据类型.
- 支持 INSERT Merge, 大幅提升数据恢复性能
QuickStart
Create Table and Insert Test Data
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`char_col` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`varchar_col` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`binary_col` binary(10) DEFAULT NULL,
`varbinary_col` varbinary(255) DEFAULT NULL,
`tinyblob_col` tinyblob,
`tinytext_col` tinytext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
`text_col` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
`blob_col` blob,
`mediumtext_col` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
`mediumblob_col` mediumblob,
`longtext_col` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
`longblob_col` longblob,
`enum_col` enum('value1','value2','value3') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`set_col` set('value1','value2','value3') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`bit_col` bit(8) DEFAULT NULL,
`tinyint_col` tinyint NOT NULL DEFAULT '0',
`bool_col` tinyint(1) NOT NULL DEFAULT '0',
`boolean_col` tinyint(1) NOT NULL DEFAULT '0',
`smallint_col` smallint NOT NULL DEFAULT '0',
`mediumint_col` mediumint NOT NULL DEFAULT '0',
`int_col` int NOT NULL DEFAULT '0',
`integer_col` int NOT NULL DEFAULT '0',
`bigint_col` bigint NOT NULL DEFAULT '0',
`float_col` float(8,2) NOT NULL DEFAULT '0.00',
`double_col` double(8,2) NOT NULL DEFAULT '0.00',
`decimal_col` decimal(10,2) NOT NULL DEFAULT '0.00',
`dec_col` decimal(10,2) NOT NULL DEFAULT '0.00',
`date_col` date DEFAULT NULL,
`datetime_col` datetime DEFAULT NULL,
`timestamp_col` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`time_col` time DEFAULT NULL,
`year_col` year DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO `test` VALUES (1,'abc','def',0x61626300000000000000,0x646566,0x74696E79626C6F62,'Hello','World',0x776F726C64,'Medium Text',0x4D656469756D426C6F62,'Long Text',0x4C6F6E67426C6F62,'value2','value1,value3',0x66,-128,1,0,-32768,-8388608,-2147483648,-2147483648,-9223372036854775808,1234.56,1234.56,1234.56,1234.56,'2023-03-17','2023-03-17 10:00:00','2023-03-17 14:04:46','10:00:00',2023);
Dump SQL
import (
"os"
"github.com/dengjiawen8955/mysqldump"
)
func main() {
dns := "root:rootpasswd@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai"
f, _ := os.Create("dump.sql")
_ = mysqldump.Dump(
dns, // DNS
mysqldump.WithDropTable(), // Option: Delete table before create (Default: Not delete table)
mysqldump.WithData(), // Option: Dump Data (Default: Only dump table schema)
mysqldump.WithTables("test"), // Option: Dump Tables (Default: All tables)
mysqldump.WithWriter(f), // Option: Writer (Default: os.Stdout)
mysqldump.WithDBs("dc3"), // Option: Dump Dbs (Default: db in dns)
)
}
Output File dump.sql
-- ----------------------------
-- MySQL Database Dump
-- Start Time: 2023-03-17 16:07:47
-- ----------------------------
DROP TABLE IF EXISTS `test`;
-- ----------------------------
-- Table structure for test
-- ----------------------------
CREATE TABLE `test` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`char_col` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`varchar_col` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`binary_col` binary(10) DEFAULT NULL,
`varbinary_col` varbinary(255) DEFAULT NULL,
`tinyblob_col` tinyblob,
`tinytext_col` tinytext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
`text_col` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
`blob_col` blob,
`mediumtext_col` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
`mediumblob_col` mediumblob,
`longtext_col` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
`longblob_col` longblob,
`enum_col` enum('value1','value2','value3') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`set_col` set('value1','value2','value3') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`bit_col` bit(8) DEFAULT NULL,
`tinyint_col` tinyint NOT NULL DEFAULT '0',
`bool_col` tinyint(1) NOT NULL DEFAULT '0',
`boolean_col` tinyint(1) NOT NULL DEFAULT '0',
`smallint_col` smallint NOT NULL DEFAULT '0',
`mediumint_col` mediumint NOT NULL DEFAULT '0',
`int_col` int NOT NULL DEFAULT '0',
`integer_col` int NOT NULL DEFAULT '0',
`bigint_col` bigint NOT NULL DEFAULT '0',
`float_col` float(8,2) NOT NULL DEFAULT '0.00',
`double_col` double(8,2) NOT NULL DEFAULT '0.00',
`decimal_col` decimal(10,2) NOT NULL DEFAULT '0.00',
`dec_col` decimal(10,2) NOT NULL DEFAULT '0.00',
`date_col` date DEFAULT NULL,
`datetime_col` datetime DEFAULT NULL,
`timestamp_col` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`time_col` time DEFAULT NULL,
`year_col` year DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (1,'abc','def',0x61626300000000000000,0x646566,0x74696E79626C6F62,'Hello','World',0x776F726C64,'Medium Text',0x4D656469756D426C6F62,'Long Text',0x4C6F6E67426C6F62,'value2','value1,value3',0x66,-128,1,0,-32768,-8388608,-2147483648,-2147483648,-9223372036854775808,1234.56,1234.56,1234.56,1234.56,'2023-03-17','2023-03-17 10:00:00','2023-03-17 14:04:46','10:00:00',2023);
-- ----------------------------
-- Dumped by mysqldump2
-- Cost Time: 7.364804ms
-- ----------------------------
Source SQL
import (
"os"
"github.com/dengjiawen8955/mysqldump"
)
func main() {
dns := "root:rootpasswd@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai"
f, _ := os.Open("dump.sql")
_ = mysqldump.Source(
dns,
f,
mysqldump.WithMergeInsert(1000),// Option: Merge insert 1000 (Default: Not merge insert)
)
}
golang 实现的零依赖、高性能、并发 mysqldump 工具。的更多相关文章
- golang []byte和string的高性能转换
golang []byte和string的高性能转换 在fasthttp的最佳实践中有这么一句话: Avoid conversion between []byte and string, since ...
- 使用 ACE 库框架在 UNIX 中开发高性能并发应用
使用 ACE 库框架在 UNIX 中开发高性能并发应用来源:developerWorks 中国 作者:Arpan Sen ACE 开放源码工具包可以帮助开发人员创建健壮的可移植多线程应用程序.本文讨论 ...
- Awesomplete - 零依赖的简单自动完成插件
Awesomplete 是一款超轻量级的,可定制的,简单的自动完成插件,零依赖,使用现代化标准构建.你可以简单地添加 awesomplete 样式,让它自动处理(你仍然可以通过指定 HTML 属性配置 ...
- golang 标准库间依赖的可视化展示
简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内 ...
- Golang Gin 项目包依赖管理 godep 使用
Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...
- LM_ReadImgMode.js PC单页轮播读图模式组件,零依赖!
LM_ReadImgMode.js PC单页轮播读图模式组件,零依赖! github:http://dtdxrk.github.io/LM-ReadImgMode/ TXT 1.全新的2.0版本,脱离 ...
- Golang入门(4):并发
摘要 并发程序指同时进行多个任务的程序,随着硬件的发展,并发程序变得越来越重要.Web服务器会一次处理成千上万的请求,这也是并发的必要性之一.Golang的并发控制比起Java来说,简单了不少.在Go ...
- MariaDB/MySQL备份和恢复(一):mysqldump工具用法详述
本文目录:1.备份分类2.备份内容和备份工具3.mysqldump用法详述 3.1 语法选项 3.1.1 连接选项 3.1.2 筛选选项 3.1.3 DDL选项 3.1.4 字符集选项 3.1.5 复 ...
- MySQL/MariaDB数据库的mysqldump工具备份还原实战
MySQL/MariaDB数据库的mysqldump工具备份还原实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.mysqldump概述 1>.逻辑备份工具 mysq ...
- MySQL备份--xtrabackup与mysqldump工具使用
MySQL备份----xtrabackup与mysqldump工具的使用 一.Xtrabackup8.0: 一个用于MySQL数据库物理热备的备份工具,支持MySQL.Percona server和M ...
随机推荐
- 关于@synchronized
一.结论 1)@synchronized内部使用的是recursive_mutex_lock,也就是递归锁,对于统一线程来说,@synchronized加锁的方法可以重复加锁. 比如代码: - (vo ...
- NOIP模拟89(多校22)
T1 谜之阶乘 解题思路 二分答案,发现 \(a-b\) 至多为 19,毕竟 \(20!\) 已经大于 \(10^{18}\) 了. 对于每一种可能的差值,每一次二分 \(b+1\) 直接枚举乘积进行 ...
- Aqua 专为自动化测试打造的IDE
JetBrains是一家全球知名的软件开发公司,他们公司推出的IDE几乎是编程语言的首选,IntelliJ IDEA 之于Java,PyCharm之于Python,以及GoLand之于go等. 5月2 ...
- (拼多多)pdd的Anti-Content
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...
- 初入JavaScript
js是轻量级 弱类型 脚本语言 html是 超文本 标记语言 脚本语言和标记语言的主要区别 标记语言,可以通过浏览器直接执行 脚本语言,必须要通过编译,浏览器内核的编译,才能正常运行 简单理解,脚本语 ...
- minos 0 前(废)言(话)
- 首发公号:Rand_cs minos 0 前(废)言(话) 从今天开始开启一个新的系列,讲述虚拟化的那些事儿.时隔上次发文又隔了好几个月了,主要是平时工作比较忙,没太多时间精力维护博客之类的. 前 ...
- 推荐十个优秀的ASP.NET Core第三方中间件,你用过几个?
ASP.NET Core 作为一个强大的.跨平台的.高性能的开源框架,为开发者提供了丰富的功能和灵活的扩展性.其中,中间件(Middleware)是 ASP.NET Core 架构中的核心组件之一,它 ...
- 小米红米手机应用APP字体太小
小米红米手机应用APP字体太小 调整了手机显示大小,只能解决一点点,还是有点小,比如B站.微博. 调整了系统字体大小,B站.微博又不受系统字体大小控制. 只能通过修改最小宽度来解决. 1.打开开发者选 ...
- 什么是 MyBatis 的接口绑定,有什么好处?
接口映射就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑定,我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可以有更加灵活的选择和设置.
- StringUtils.join()方法使用
* StringUtils.join()方法使用 打印输出: * 使用 StringBuilder 进行拼接:张三,李四,王五 * 使用 StringUtils.join 进行拼接:张三,李四,王五 ...