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 ...
随机推荐
- 授权调用: 介绍 Transformers 智能体 2.0
简要概述 我们推出了 Transformers 智能体 2.0! ⇒ 在现有智能体类型的基础上,我们新增了两种能够 根据历史观察解决复杂任务的智能体. ⇒ 我们致力于让代码 清晰.模块化,并确保最终提 ...
- zabbix笔记_006 zabbix web监控
web监控 web监控是对http网站服务进行监控,模拟用户访问网站,对特定的结果进行告警,通知管理员网站状态. web监控是运维必备知识点,通过实验能够熟悉配置和了解zabbix是如何监控web站点 ...
- Python缺失值处理实现
在数据处理相关工作中,读取的数据中常常会有缺失值的情况,为顺利进行后续的操作,需要首先对缺失值进行处理,处理的方式一般为删除或填充,Python中提供了专门的工具包,可以方便地进行实现.读取操作可 ...
- 鼠标悬浮显示鼠标停留数据的内容 elementui + vue
先看效果图 直接上代码 <el-tabs v-model="activeName" @tab-click="handleClick"> <el ...
- docker容器单机编排
随着网站架构的升级,容器也使用的越发频繁,应用服务和容器间的关系也越发复杂. 这就要求研发人员能够更好的方法去管理数量较多的容器服务,而不能手动的去挨个管理. 例如一个LNMP的架构,就得部署web服 ...
- vitepress使用createContentLoader时遇到["vitepress" resolved to an ESM file. ESM file cannot be loaded by `require`.]报错
在使用vitepress构建一个所有博客的概览页的时候,使用到了createContentLoader这个api,但是在index.data.ts中定义并导出后,在md文件中调用遇到了下面这个问题: ...
- 重学前端 - react 项目第一节:创建react 项目
重学前端 - react 项目第一节:创建react 项目 简介:之前一直使用的都是 vue 全家桶开发项目,现在在新的项目上开始使用react开发. 现在开始在重新学习一下 react 相关技术. ...
- Linux安全审计之audit安装与使用
场景 安全最重要的一步是内部安全,如何监控用户的行为是一个永恒不变的话题. audit可以详细监控用户的行为,详细到查看或修改了某个文件.这些都可以在日志中查看到. 安装 小贴士: CentOS默认已 ...
- CLR via C# 笔记 -- 异常和状态管理(20)
1. 异常是指成员没有完成它的名称所宣称的行动,异常类继承System.Exception. 2. .Net Framework 异常处理机制是用Microsoft windows提供的结构化异常处理 ...
- 我的 ZYNQ 系列总结
我的 ZYNQ 系列总结 背景 ZYNQ平台是我接触认识比较久的平台,还算不错,是工控.音视频各行业都可以使用中高端平台. 本文以ZYNQ-7000为例,其实更高级的MPSOC也是一样的. 先看看我自 ...