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 ...
随机推荐
- 基于WebSocket的modbus通信(一)- 客户端
上一篇已经实现了ModbusTcp服务器和8个主要的功能码,只是还没有实现错误处理功能. 但是在测试客户端时却发现了上一篇的一个错误,那就是写数据成功,服务器不需要响应. 接下来要做的就是实现Modb ...
- OpenTelemetry agent 对 Spring Boot 应用的影响:一次 SPI 失效的案例
背景 前段时间公司领导让我排查一个关于在 JDK21 环境中使用 Spring Boot 配合一个 JDK18 新增的一个 SPI(java.net.spi.InetAddressResolverPr ...
- react css-in-js
CSS-in-JS是一种技术,而不是一个具体的库实现.简单来说CSS-in-JS就是将应用的CSS样式写在JavaScript文件里面,而不是独立为一些css,scss或less之类的文件,这样你就可 ...
- 使用 JavaScript 脚本来进行复杂的查询改写
有这么一个需求: 网关里怎样对跨集群搜索进行支持的呢?我想实现: 输入的搜索请求是 lp:9200/index1/_search 这个索引在 3 个集群上,需要跨集群检索,也就是网关能否改成 lp:9 ...
- vmware 虚拟WIN10 chrome核心浏览器部分菜单花掉
解决方法:在vmware 显示器设置中,关闭"加速 3D 图形".
- web框架及Django简介
WEB框架 Web框架是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法. web框架已经实现了很多功能 ...
- 构建SaaS能力,加速数字化转型!猪齿鱼将在华为云快成长直播间开讲!
时代的浪潮驱动着企业数字化转型.伴随着新基建.云计算成为国家战略的重要环节之一,"千行百业"开始专注于数字化转型,企业纷纷使用软件提升研发.销售.市场.消费者等不同场景下的效率,S ...
- hbase的优缺点
一. 一个关于hbase介绍全面的博客地址 https://www.csdn.net/gather_22/MtTaEgysNjYwOS1ibG9n.html 优点: 1,方便高效的压缩数据. 2,支持 ...
- 记录一次BoxedApp Packer脱壳解包的记录
收到朋友的一个求助,一个硬件配套的上位机软件,无法联系到供应商,没有授权,在新电脑安装后无法使用. 简单的记录下过程 首先打开发过来的软件的目录下,一个配置工具,从图片可以判断,是.net winfo ...
- python sweetviz_数据分析及解决报告图表中文乱码
python sweetviz_数据分析 python 做数据分析,传入数据进去,就可以使用python现有的插件,进行数据分析,生成数据分析的报表,可以将复杂的数据,通过图表的形式,清晰将数据展示出 ...