dbsync

package
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 18, 2023 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const AppURL = "https://github.com/hidu/mysql-schema-sync/"

AppURL site

View Source
const Version = "0.3.2"

Version version

Variables

This section is empty.

Functions

func CheckSchemaDiff

func CheckSchemaDiff(cfg *Config)

CheckSchemaDiff 执行最终的diff

func RemoveTableSchemaConfig

func RemoveTableSchemaConfig(schema string) string

删除表创建引擎信息,编码信息,分区信息,已修复同步表结构遇到分区表异常退出问题,对于分区表,只会同步字段,索引,主键,外键的变更

Types

type AlterIgnoreTable

type AlterIgnoreTable struct {
	Column []string `json:"column"`
	Index  []string `json:"index"`

	// 外键
	ForeignKey []string `json:"foreign"`
}

AlterIgnoreTable table's ignore info

type Config

type Config struct {
	// SourceDSN 同步的源头
	SourceDSN string `json:"source"`

	// DestDSN 将被同步
	DestDSN string `json:"dest"`

	// AlterIgnore 忽略配置, eg:   "tb1*":{"column":["aaa","a*"],"index":["aa"],"foreign":[]}
	AlterIgnore map[string]*AlterIgnoreTable `json:"alter_ignore"`

	// Tables 同步表的白名单,若为空,则同步全库
	Tables []string `json:"tables"`

	// TablesIGNORE 不同步的表
	TablesIGNORE []string `json:"tables_ignore"`

	// Email 完成同步后发送同步信息的邮件账号信息
	Email      *EmailStruct `json:"email"`
	ConfigPath string

	// Sync 是否真正的执行同步操作
	Sync bool

	// Drop 若目标数据库表比源头多了字段、索引,是否删除
	Drop bool

	// SingleSchemaChange 生成sql ddl语言每条命令只会进行单个修改操作
	SingleSchemaChange bool `json:"single_schema_change"`

	Logger ILogger
}

Config config struct

func LoadConfig

func LoadConfig(confPath string) *Config

LoadConfig load config file

func (*Config) Check

func (cfg *Config) Check()

Check check config

func (*Config) CheckMatchIgnoreTables

func (cfg *Config) CheckMatchIgnoreTables(name string) bool

CheckMatchIgnoreTables check table_Ignore is match

func (*Config) CheckMatchTables

func (cfg *Config) CheckMatchTables(name string) bool

CheckMatchTables check table is match

func (*Config) IsIgnoreField

func (cfg *Config) IsIgnoreField(table string, name string) bool

IsIgnoreField isIgnore

func (*Config) IsIgnoreForeignKey

func (cfg *Config) IsIgnoreForeignKey(table string, name string) bool

IsIgnoreForeignKey 检查外键是否忽略掉

func (*Config) IsIgnoreIndex

func (cfg *Config) IsIgnoreIndex(table string, name string) bool

IsIgnoreIndex is index ignore

func (*Config) SendMailFail

func (cfg *Config) SendMailFail(errStr string)

SendMailFail send fail mail

func (*Config) String

func (cfg *Config) String() string

type DbIndex

type DbIndex struct {
	IndexType indexType
	Name      string
	SQL       string

	// 相关联的表
	RelationTables []string
}

DbIndex db index

func (*DbIndex) String

func (idx *DbIndex) String() string

type EmailStruct

type EmailStruct struct {
	SendMailAble bool   `json:"send_mail"`
	SMTPHost     string `json:"smtp_host"`
	From         string `json:"from"`
	Password     string `json:"password"`
	To           string `json:"to"`
}

EmailStruct email conf info

func (*EmailStruct) SendMail

func (m *EmailStruct) SendMail(cfg *Config, title string, body string)

SendMail send mail

type ILogger added in v0.0.2

type ILogger interface {
	Printf(format string, v ...interface{})
	Println(v ...interface{})
	AlwaysPrintln(v ...interface{})
	Print(v ...interface{})
}

type MyDb

type MyDb struct {
	Db *sql.DB
	// contains filtered or unexported fields
}

MyDb db struct

func NewMyDb

func NewMyDb(dsn string, dbType string) *MyDb

NewMyDb parse dsn

func (*MyDb) GetTableNames

func (mydb *MyDb) GetTableNames() []string

GetTableNames table names

func (*MyDb) GetTableSchema

func (mydb *MyDb) GetTableSchema(name string) (schema string)

GetTableSchema table schema

func (*MyDb) Query

func (mydb *MyDb) Query(query string, args ...interface{}) (*sql.Rows, error)

Query execute sql query

type MySchema

type MySchema struct {
	SchemaRaw  string
	Fields     *orderedmap.OrderedMap
	IndexAll   map[string]*DbIndex
	ForeignAll map[string]*DbIndex
}

MySchema table schema

func ParseSchema

func ParseSchema(schema string) *MySchema

ParseSchema parse table's schema

func (*MySchema) GetFieldNames

func (mys *MySchema) GetFieldNames() []string

GetFieldNames table names

func (*MySchema) RelationTables

func (mys *MySchema) RelationTables() []string

func (*MySchema) String

func (mys *MySchema) String() string

type SchemaDiff

type SchemaDiff struct {
	Table  string
	Source *MySchema
	Dest   *MySchema
}

func (*SchemaDiff) RelationTables

func (sdiff *SchemaDiff) RelationTables() []string

type SchemaSync

type SchemaSync struct {
	Config   *Config
	SourceDb *MyDb
	DestDb   *MyDb
}

SchemaSync 配置文件

func NewSchemaSync

func NewSchemaSync(config *Config) *SchemaSync

NewSchemaSync 对一个配置进行同步

func (*SchemaSync) GetNewTableNames

func (sc *SchemaSync) GetNewTableNames() []string

GetNewTableNames 获取所有新增加的表名

func (*SchemaSync) GetTableNames

func (sc *SchemaSync) GetTableNames() []string

合并源数据库和目标数据库的表名

func (*SchemaSync) SyncSQL4Dest

func (sc *SchemaSync) SyncSQL4Dest(sqlStr string, sqls []string) error

SyncSQL4Dest sync schema change

type StdLogger added in v0.0.2

type StdLogger struct{}

func (*StdLogger) AlwaysPrintln added in v0.0.3

func (logger *StdLogger) AlwaysPrintln(v ...interface{})

func (*StdLogger) Print added in v0.0.2

func (logger *StdLogger) Print(v ...interface{})

func (*StdLogger) Printf added in v0.0.2

func (logger *StdLogger) Printf(format string, v ...interface{})

func (*StdLogger) Println added in v0.0.2

func (logger *StdLogger) Println(v ...interface{})

type TableAlterData

type TableAlterData struct {
	Table      string
	Type       alterType
	SQL        []string
	SchemaDiff *SchemaDiff
}

TableAlterData 表的变更情况

func (*TableAlterData) String

func (ta *TableAlterData) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL