Documentation ¶
Overview ¶
go-mysqlbinlog: a simple binlog tool to sync remote MySQL binlog. go-mysqlbinlog supports semi-sync mode like facebook mysqlbinlog. see http://yoshinorimatsunobu.blogspot.com/2014/04/semi-synchronous-replication-at-facebook.html
Index ¶
- Constants
- Variables
- func BootstrapSession(store kv.Storage) (*domain.Domain, error)
- func Compile(ctx context.Context, sctx sessionctx.Context, stmtNode ast.StmtNode) (ast.Statement, error)
- func DialPumpClientWithRetry(binlogSocket string, maxRetries int, dialerOpt grpc.DialOption) (*grpc.ClientConn, error)
- func Exist(filename string) bool
- func GetDataTypeBase(dataType string) string
- func GetDataTypeLength(dataType string) []int
- func GetDomain(store kv.Storage) (*domain.Domain, error)
- func GetErrorLevel(code ErrorCode) uint8
- func GetErrorMessage(code ErrorCode, lang string) string
- func GetRows4Test(ctx context.Context, sctx sessionctx.Context, rs ast.RecordSet) ([]chunk.Row, error)
- func GetTimeValue(ctx sessionctx.Context, v interface{}, tp byte, fsp int) (d types.Datum, err error)
- func HTMLEscape(w io.Writer, b []byte)
- func HTMLEscapeString(s string) string
- func IsCurrentTimestampExpr(e ast.ExprNode) bool
- func IsNumeric(val interface{}) bool
- func IsQuery(sql string) bool
- func Max(x, y int) int
- func Max64(x, y int64) int64
- func Max8(x, y uint8) uint8
- func Min(x, y int) int
- func NewInception() *session
- func NewStore(path string) (kv.Storage, error)
- func Parse(ctx sessionctx.Context, src string) ([]ast.StmtNode, error)
- func RegisterStore(name string, driver kv.Driver) error
- func Reverse(arr []string) []string
- func SetSchemaLease(lease time.Duration)
- func SetStatsLease(lease time.Duration)
- func StringStorageReq(dataType string, charset string) int
- func ToCamel(s string) string
- func ToLowerCamel(s string) string
- type ChanOscData
- type DBInfo
- type ErrExprLoc
- type ErrorCode
- type ExplainInfo
- type FieldInfo
- type IndexInfo
- type LevelSets
- type MaskingFieldInfo
- type MasterStatus
- type MyRecordSets
- type PartitionInfo
- type PrintSets
- type ProcessListSets
- type Record
- type Rewrite
- type SQLError
- type Session
- type SourceOptions
- type SplitSets
- type StmtHistory
- type TableInfo
- type TxnState
- func (st *TxnState) Commit(ctx context.Context) error
- func (st *TxnState) Delete(k kv.Key) error
- func (st *TxnState) Get(k kv.Key) ([]byte, error)
- func (st *TxnState) Rollback() error
- func (st *TxnState) Seek(k kv.Key) (kv.Iterator, error)
- func (st *TxnState) SeekReverse(k kv.Key) (kv.Iterator, error)
- func (st *TxnState) Set(k kv.Key, v []byte) error
- func (st *TxnState) String() string
- func (st *TxnState) Valid() bool
- type VariableSets
Constants ¶
const ( // CreateUserTable is the SQL statement creates User table in system db. CreateUserTable = `` /* 1365-byte string literal not displayed */ // CreateDBPrivTable is the SQL statement creates DB scope privilege table in system db. CreateDBPrivTable = `` /* 1127-byte string literal not displayed */ // CreateTablePrivTable is the SQL statement creates table scope privilege table in system db. CreateTablePrivTable = `` /* 379-byte string literal not displayed */ // CreateColumnPrivTable is the SQL statement creates column scope privilege table in system db. CreateColumnPrivTable = `` /* 299-byte string literal not displayed */ // CreateGloablVariablesTable is the SQL statement creates global variable table in system db. // TODO: MySQL puts GLOBAL_VARIABLES table in INFORMATION_SCHEMA db. // INFORMATION_SCHEMA is a virtual db in TiDB. So we put this table in system db. // Maybe we will put it back to INFORMATION_SCHEMA. CreateGloablVariablesTable = `` /* 147-byte string literal not displayed */ // CreateTiDBTable is the SQL statement creates a table in system db. // This table is a key-value struct contains some information used by TiDB. // Currently we only put bootstrapped in it which indicates if the system is already bootstrapped. CreateTiDBTable = `` /* 160-byte string literal not displayed */ // CreateHelpTopic is the SQL statement creates help_topic table in system db. // See: https://dev.mysql.com/doc/refman/5.5/en/system-database.html#system-database-help-tables CreateHelpTopic = `` /* 392-byte string literal not displayed */ // CreateStatsMetaTable stores the meta of table statistics. CreateStatsMetaTable = `` /* 270-byte string literal not displayed */ // CreateStatsColsTable stores the statistics of table columns. CreateStatsColsTable = `` /* 521-byte string literal not displayed */ // CreateStatsBucketsTable stores the histogram info for every table columns. CreateStatsBucketsTable = `` /* 349-byte string literal not displayed */ // CreateGCDeleteRangeTable stores schemas which can be deleted by DeleteRange. CreateGCDeleteRangeTable = `` /* 390-byte string literal not displayed */ // CreateGCDeleteRangeDoneTable stores schemas which are already deleted by DeleteRange. CreateGCDeleteRangeDoneTable = `` /* 400-byte string literal not displayed */ // CreateStatsFeedbackTable stores the feedback info which is used to update stats. CreateStatsFeedbackTable = `` /* 216-byte string literal not displayed */ )
const ( DBTypeMysql = iota DBTypeMariaDB DBTypeTiDB )
数据库类型
const ( StageOK byte = iota StageCheck StageExec StageBackup )
审核阶段
const ( StatusAuditOk byte = iota StatusExecFail StatusExecOK StatusBackupFail StatusBackupOK )
审核状态
const ( TABLE_COMMENT_MAXLEN = 2048 COLUMN_COMMENT_MAXLEN = 1024 INDEX_COMMENT_MAXLEN = 1024 TABLE_PARTITION_COMMENT_MAXLEN = 1024 )
const ( // ErrExprInSelect is in select fields for the error of ErrFieldNotInGroupBy ErrExprInSelect = "SELECT list" // ErrExprInOrderBy is in order by items for the error of ErrFieldNotInGroupBy ErrExprInOrderBy = "ORDER BY" )
Variables ¶
var ( StageList = [4]string{"RERUN", "CHECKED", "EXECUTED", "BACKUP"} StatusList = [5]string{"Audit Completed", "Execute failed", "Execute Successfully", "Execute Successfully\nBackup failed", "Execute Successfully\nBackup Successfully"} )
var ( ErrWrongValueForVar = terror.ClassVariable.New(mysql.ErrWrongValueForVar, mysql.MySQLErrName[mysql.ErrWrongValueForVar]) ErrTruncatedWrongValue = terror.ClassVariable.New(mysql.ErrTruncatedWrongValue, mysql.MySQLErrName[mysql.ErrTruncatedWrongValue]) ErrWrongTypeForVar = terror.ClassVariable.New(mysql.ErrWrongTypeForVar, mysql.MySQLErrName[mysql.ErrWrongTypeForVar]) )
var ( // All the exported errors are defined here: ErrIncorrectParameterCount = terror.ClassExpression.New(mysql.ErrWrongParamcountToNativeFct, mysql.MySQLErrName[mysql.ErrWrongParamcountToNativeFct]) ErrDivisionByZero = terror.ClassExpression.New(mysql.ErrDivisionByZero, mysql.MySQLErrName[mysql.ErrDivisionByZero]) ErrRegexp = terror.ClassExpression.New(mysql.ErrRegexp, mysql.MySQLErrName[mysql.ErrRegexp]) ErrOperandColumns = terror.ClassExpression.New(mysql.ErrOperandColumns, mysql.MySQLErrName[mysql.ErrOperandColumns]) ErrCutValueGroupConcat = terror.ClassExpression.New(mysql.ErrCutValueGroupConcat, mysql.MySQLErrName[mysql.ErrCutValueGroupConcat]) )
var ErrorsChinese = map[ErrorCode]string{}/* 172 elements not displayed */
var ErrorsDefault = map[ErrorCode]string{}/* 180 elements not displayed */
var IntegerOrderedMaps = map[string]int{
"bit": 1,
"tinyint": 2,
"smallint": 3,
"mediumint": 4,
"int": 5,
"bigint": 6,
}
int类型map(用以数值列类型变更审核)
var IntegerOrderedMaps2 = map[byte]int{ mysql.TypeBit: 1, mysql.TypeTiny: 2, mysql.TypeShort: 3, mysql.TypeInt24: 4, mysql.TypeLong: 5, mysql.TypeLonglong: 6, }
int类型map(用以数值列类型变更审核)
var Keywords = map[string]bool{}/* 767 elements not displayed */
Keywords 数据库关键字
var SchemaChangedWithoutRetry bool
SchemaChangedWithoutRetry is used for testing.
var URL string
Functions ¶
func BootstrapSession ¶
BootstrapSession runs the first time when the TiDB server start.
func Compile ¶
func Compile(ctx context.Context, sctx sessionctx.Context, stmtNode ast.StmtNode) (ast.Statement, error)
Compile is safe for concurrent use by multiple goroutines.
func DialPumpClientWithRetry ¶
func DialPumpClientWithRetry(binlogSocket string, maxRetries int, dialerOpt grpc.DialOption) (*grpc.ClientConn, error)
DialPumpClientWithRetry tries to dial to binlogSocket, if any error happens, it will try to re-dial, or return this error when timeout.
func GetDataTypeBase ¶
GetDataTypeBase 获取dataType中的数据类型,忽略长度
func GetDataTypeLength ¶
GetDataTypeLength 获取dataType中的数据类型长度
func GetErrorLevel ¶
func GetErrorMessage ¶
GetErrorMessage 获取审核信息,默认为英文
func GetRows4Test ¶
func GetRows4Test(ctx context.Context, sctx sessionctx.Context, rs ast.RecordSet) ([]chunk.Row, error)
GetRows4Test gets all the rows from a RecordSet, only used for test.
func GetTimeValue ¶ added in v1.2.3
func GetTimeValue(ctx sessionctx.Context, v interface{}, tp byte, fsp int) (d types.Datum, err error)
GetTimeValue gets the time value with type tp.
func HTMLEscape ¶
HTMLEscape writes to w the escaped HTML equivalent of the plain text data b.
func HTMLEscapeString ¶
HTMLEscapeString returns the escaped HTML equivalent of the plain text data s.
func IsCurrentTimestampExpr ¶ added in v1.2.3
IsCurrentTimestampExpr returns whether e is CurrentTimestamp expression.
func NewInception ¶ added in v1.2.3
func NewInception() *session
func NewStore ¶
NewStore creates a kv Storage with path.
The path must be a URL format 'engine://path?params' like the one for session.Open() but with the dbname cut off. Examples:
goleveldb://relative/path boltdb:///absolute/path
The engine should be registered before creating storage.
func RegisterStore ¶
RegisterStore registers a kv storage with unique name and its associated Driver.
func SetSchemaLease ¶
SetSchemaLease changes the default schema lease time for DDL. This function is very dangerous, don't use it if you really know what you do. SetSchemaLease only affects not local storage after bootstrapped.
func SetStatsLease ¶
SetStatsLease changes the default stats lease time for loading stats info.
func StringStorageReq ¶
StringStorageReq String Type Storage Requirements return bytes count
func ToLowerCamel ¶ added in v1.3.0
ToLowerCamel converts a string to lowerCamelCase
Types ¶
type ChanOscData ¶
type ChanOscData struct {
// contains filtered or unexported fields
}
type ErrExprLoc ¶ added in v1.2.3
ErrExprLoc is for generate the ErrFieldNotInGroupBy error info
type ErrorCode ¶ added in v1.0.1
type ErrorCode int
const ( ER_ERROR_FIRST ErrorCode = iota ER_NOT_SUPPORTED_YET ER_SQL_NO_SOURCE ER_SQL_NO_OP_TYPE ER_SQL_INVALID_OP_TYPE ER_PARSE_ERROR ER_SYNTAX_ERROR ER_REMOTE_EXE_ERROR ER_SHUTDOWN_COMPLETE ER_WITH_INSERT_FIELD ER_WITH_INSERT_VALUES ER_WRONG_VALUE_COUNT_ON_ROW ER_BAD_FIELD_ERROR ER_FIELD_SPECIFIED_TWICE ER_BAD_NULL_ERROR ER_NO_WHERE_CONDITION ER_NORMAL_SHUTDOWN ER_FORCING_CLOSE ER_CON_COUNT_ERROR ER_INVALID_COMMAND ER_SQL_INVALID_SOURCE ER_WRONG_DB_NAME ER_NO_DB_ERROR ER_WITH_LIMIT_CONDITION ER_WITH_ORDERBY_CONDITION ER_SELECT_ONLY_STAR ER_ORDERY_BY_RAND ER_ID_IS_UPER ErrUnknownCharset ER_UNKNOWN_COLLATION ER_INVALID_DATA_TYPE ER_NOT_ALLOWED_NULLABLE ER_DUP_FIELDNAME ER_WRONG_COLUMN_NAME ER_WRONG_AUTO_KEY ER_TABLE_CANT_HANDLE_AUTO_INCREMENT ER_FOREIGN_KEY ER_TOO_MANY_KEY_PARTS ER_TOO_LONG_IDENT ER_UDPATE_TOO_MUCH_ROWS ER_INSERT_TOO_MUCH_ROWS ER_CHANGE_TOO_MUCH_ROWS ER_WRONG_NAME_FOR_INDEX ER_TOO_MANY_KEYS ER_NOT_SUPPORTED_KEY_TYPE ER_WRONG_SUB_KEY ER_WRONG_KEY_COLUMN ER_TOO_LONG_KEY ER_MULTIPLE_PRI_KEY ER_DUP_KEYNAME ER_TOO_LONG_INDEX_COMMENT ER_DUP_INDEX ER_TEMP_TABLE_TMP_PREFIX ER_TABLE_PREFIX ER_TABLE_CHARSET_MUST_UTF8 ER_TABLE_CHARSET_MUST_NULL ER_TABLE_MUST_HAVE_COMMENT ER_COLUMN_HAVE_NO_COMMENT ER_TABLE_MUST_HAVE_PK ER_PARTITION_NOT_ALLOWED ER_USE_ENUM ER_USE_TEXT_OR_BLOB ER_COLUMN_EXISTED ER_COLUMN_NOT_EXISTED ER_CANT_DROP_FIELD_OR_KEY ER_INVALID_DEFAULT ER_USERNAME ER_HOSTNAME ER_NOT_VALID_PASSWORD ER_WRONG_STRING_LENGTH ER_BLOB_USED_AS_KEY ER_TOO_LONG_BAKDB_NAME ER_INVALID_BACKUP_HOST_INFO ER_BINLOG_CORRUPTED ER_NET_READ_ERROR ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE ER_SLAVE_RELAY_LOG_WRITE_FAILURE ER_INCORRECT_GLOBAL_LOCAL_VAR ER_START_AS_BEGIN ER_OUTOFMEMORY ER_HAVE_BEGIN ER_NET_READ_INTERRUPTED ER_BINLOG_FORMAT_STATEMENT ER_ERROR_EXIST_BEFORE ER_UNKNOWN_SYSTEM_VARIABLE ER_UNKNOWN_CHARACTER_SET ER_END_WITH_COMMIT ER_DB_NOT_EXISTED_ERROR ER_TABLE_EXISTS_ERROR ER_INDEX_NAME_IDX_PREFIX ER_INDEX_NAME_UNIQ_PREFIX ER_AUTOINC_UNSIGNED ER_VARCHAR_TO_TEXT_LEN ER_CHAR_TO_VARCHAR_LEN ER_KEY_COLUMN_DOES_NOT_EXITS ER_INC_INIT_ERR ER_WRONG_ARGUMENTS ER_SET_DATA_TYPE_INT_BIGINT ER_TIMESTAMP_DEFAULT ER_CHARSET_ON_COLUMN ER_AUTO_INCR_ID_WARNING ER_ALTER_TABLE_ONCE ER_BLOB_CANT_HAVE_DEFAULT ER_END_WITH_SEMICOLON ER_NON_UNIQ_ERROR ER_TABLE_NOT_EXISTED_ERROR ER_UNKNOWN_TABLE ER_INVALID_GROUP_FUNC_USE ER_INDEX_USE_ALTER_TABLE ER_WITH_DEFAULT_ADD_COLUMN ER_TRUNCATED_WRONG_VALUE ER_TEXT_NOT_NULLABLE_ERROR ER_WRONG_VALUE_FOR_VAR ER_TOO_MUCH_AUTO_TIMESTAMP_COLS ER_INVALID_ON_UPDATE ER_DDL_DML_COEXIST ER_SLAVE_CORRUPT_EVENT ER_COLLATION_CHARSET_MISMATCH ER_NOT_SUPPORTED_ALTER_OPTION ER_CONFLICTING_DECLARATIONS ER_IDENT_USE_KEYWORD ER_VIEW_SELECT_CLAUSE ER_OSC_KILL_FAILED ER_NET_PACKETS_OUT_OF_ORDER ER_NOT_SUPPORTED_ITEM_TYPE ER_INVALID_IDENT ER_INCEPTION_EMPTY_QUERY ER_PK_COLS_NOT_INT ER_PK_TOO_MANY_PARTS ER_REMOVED_SPACES ER_CHANGE_COLUMN_TYPE ER_CANT_DROP_TABLE ER_CANT_DROP_DATABASE ER_WRONG_TABLE_NAME ER_CANT_SET_CHARSET ER_CANT_SET_COLLATION ER_CANT_SET_ENGINE ER_MUST_AT_LEAST_ONE_COLUMN ER_MUST_HAVE_COLUMNS ErrColumnsMustHaveIndex ErrColumnsMustHaveIndexTypeErr ER_PRIMARY_CANT_HAVE_NULL ErrCantRemoveAllFields ErrNotFoundTableInfo ErrMariaDBRollbackWarn ErrNotFoundMasterStatus ErrNonUniqTable ErrWrongUsage ErrDataTooLong ErrCharsetNotSupport ErrCollationNotSupport ErrTableCollationNotSupport ErrJsonTypeSupport ErrEngineNotSupport ErrMixOfGroupFuncAndFields ErrFieldNotInGroupBy ErCantChangeColumnPosition ErCantChangeColumn ER_DATETIME_DEFAULT ER_TOO_MUCH_AUTO_DATETIME_COLS ErrFloatDoubleToDecimal ErrIdentifierUpper ErrIdentifierLower ErrWrongAndExpr ErrCannotAddForeign ErrWrongFkDefWithMatch ErrFkDupName ErrJoinNoOnCondition ErrImplicitTypeConversion ErrUseValueExpr ErrUseIndexVisibility ErrViewSupport ErrViewColumnCount ErrIncorrectDateTimeValue ErrSameNamePartition ErrRepeatConstDefinition ErrPartitionNotExisted ErrMaxVarcharLength ErrMaxColumnCount ER_ERROR_LAST )
type ExplainInfo ¶
type ExplainInfo struct { SelectType string `gorm:"Column:select_type"` Table string `gorm:"Column:table"` Partitions string `gorm:"Column:partitions"` Type string `gorm:"Column:type"` PossibleKeys string `gorm:"Column:possible_keys"` Key string `gorm:"Column:key"` KeyLen string `gorm:"Column:key_len"` Ref string `gorm:"Column:ref"` Rows int64 `gorm:"Column:rows"` Filtered float32 `gorm:"Column:filtered"` Extra string `gorm:"Column:Extra"` // TiDB的Explain预估行数存储在Count中 Count string `gorm:"Column:count"` // TiDB (v4.0及之后)的Explain预估行数存储在Count中 EstRows string `gorm:"Column:estRows"` }
ExplainInfo 执行计划信息
type FieldInfo ¶
type FieldInfo struct { Table string `gorm:"-"` Field string `gorm:"Column:Field"` Type string `gorm:"Column:Type"` Collation string `gorm:"Column:Collation"` Null string `gorm:"Column:Null"` Key string `gorm:"Column:Key"` Default *string `gorm:"Column:Default"` Extra string `gorm:"Column:Extra"` Privileges string `gorm:"Column:Privileges"` Comment string `gorm:"Column:Comment"` IsDeleted bool `gorm:"-"` IsNew bool `gorm:"-"` Tp *types.FieldType `gorm:"-"` // contains filtered or unexported fields }
FieldInfo 字段信息
func (*FieldInfo) IsGenerated ¶ added in v1.2.5
IsGenerated 是否为计算列
type IndexInfo ¶
type IndexInfo struct { gorm.Model Table string `gorm:"Column:Table"` NonUnique int `gorm:"Column:Non_unique"` IndexName string `gorm:"Column:Key_name"` Seq int `gorm:"Column:Seq_in_index"` ColumnName string `gorm:"Column:Column_name"` IndexType string `gorm:"Column:Index_type"` IsDeleted bool `gorm:"-"` }
IndexInfo 索引信息
type LevelSets ¶ added in v1.0.1
type LevelSets struct {
// contains filtered or unexported fields
}
func NewLevelSets ¶ added in v1.0.1
type MaskingFieldInfo ¶ added in v1.2.5
type MaskingFieldInfo struct { Index uint16 `json:"index"` Field string `json:"field"` Type string `json:"type"` Table string `json:"table"` Schema string `json:"schema"` Alias string `json:"alias"` }
MaskingFieldInfo 脱敏功能的字段信息
func Convert ¶ added in v1.2.5
func Convert(schema, table string, fs []FieldInfo) []MaskingFieldInfo
type MasterStatus ¶
type MasterStatus struct { gorm.Model File string `gorm:"Column:File"` Position int `gorm:"Column:Position"` BinlogDoDB string `gorm:"Column:Binlog_Do_DB"` BinlogIgnoreDB string `gorm:"Column:Binlog_Ignore_DB"` ExecutedGtidSet string `gorm:"Column:Executed_Gtid_Set"` }
MasterStatus 主库状态信息,包括当前日志文件,位置等
type MyRecordSets ¶
func NewRecordSets ¶
func NewRecordSets() *MyRecordSets
func (*MyRecordSets) All ¶
func (s *MyRecordSets) All() []*Record
func (*MyRecordSets) Append ¶
func (s *MyRecordSets) Append(r *Record)
func (*MyRecordSets) Next ¶
func (s *MyRecordSets) Next() *Record
func (*MyRecordSets) Rows ¶
func (s *MyRecordSets) Rows() []sqlexec.RecordSet
type PartitionInfo ¶ added in v1.2.4
type PartitionInfo struct { gorm.Model Table string `gorm:"Column:Table"` PartName string `gorm:"Column:PARTITION_NAME"` PartMethod string `gorm:"Column:PARTITION_METHOD"` PartExpression string `gorm:"Column:PARTITION_EXPRESSION"` PartDescription string `gorm:"Column:PARTITION_DESCRIPTION"` TableRows int `gorm:"Column:TABLE_ROWS"` IsDeleted bool `gorm:"-"` }
PartitionInfo 分区信息
type PrintSets ¶ added in v0.7.1
type PrintSets struct {
// contains filtered or unexported fields
}
func NewPrintSets ¶ added in v0.7.1
func NewPrintSets() *PrintSets
type ProcessListSets ¶
type ProcessListSets struct {
// contains filtered or unexported fields
}
func NewOscProcessListSets ¶
func NewOscProcessListSets(count int, hideCommand bool) *ProcessListSets
func NewProcessListSets ¶
func NewProcessListSets(count int) *ProcessListSets
func (*ProcessListSets) Rows ¶
func (s *ProcessListSets) Rows() []sqlexec.RecordSet
type Record ¶
type Record struct { // 阶段 RERUN EXECUTED CHECKED Stage byte // 阶段说明 Execute Successfully / 审核完成 / 失败... // Audit completed // Execute failed // Execute Successfully // Execute Successfully,Backup successfully // Execute Successfully,Backup failed StageStatus byte // 审核级别,0为成功,1为警告,2为错误 ErrLevel uint8 // 错误/警告信息 ErrorMessage string Sql string // 受影响行 AffectedRows int64 // 备份库的库名 BackupDBName string // 执行用时 ExecTime string // 备份用时 BackupCostTime string // sql的hash值,osc使用 Sqlsha1 string Buf *bytes.Buffer Type ast.StmtNode // 备份相关 ExecTimestamp int64 StartFile string StartPosition int EndFile string EndPosition int ThreadId uint32 SeqNo int DBName string TableName string TableInfo *TableInfo // ddl回滚 DDLRollback string OPID string ExecComplete bool // update多表时,记录多余的表 // update多表时,默认set第一列的表为主表,其余表才会记录到该处 // 仅在发现多表操作时,初始化该参数 MultiTables map[string]*TableInfo // contains filtered or unexported fields }
type Rewrite ¶ added in v1.0.1
Rewrite 用于重写SQL
func NewRewrite ¶ added in v1.0.1
NewRewrite 返回一个*Rewrite对象,如果SQL无法被正常解析,将错误输出到日志中,返回一个nil
func (*Rewrite) RewriteDML2Select ¶ added in v1.0.1
RewriteDML2Select dml2select: DML 转成 SELECT,兼容低版本的 EXPLAIN
func (*Rewrite) TestSelect2Count ¶ added in v1.1.4
type SQLError ¶
SQLError records an error information, from executing SQL.
func NewErr ¶
NewErr generates a SQL error, with an error code and default format specifier defined in MySQLErrName.
type Session ¶
type Session interface { sessionctx.Context Status() uint16 // Flag of current status, such as autocommit. LastInsertID() uint64 // LastInsertID is the last inserted auto_increment ID. AffectedRows() uint64 // Affected rows by latest executed stmt. Execute(context.Context, string) ([]sqlexec.RecordSet, error) // Execute a sql statement. ExecuteInc(context.Context, string) ([]sqlexec.RecordSet, error) // Execute a sql statement. String() string // String is used to debug. CommitTxn(context.Context) error RollbackTxn(context.Context) error // PrepareStmt executes prepare statement in binary protocol. PrepareStmt(sql string) (stmtID uint32, paramCount int, fields []*ast.ResultField, err error) // ExecutePreparedStmt executes a prepared statement. ExecutePreparedStmt(ctx context.Context, stmtID uint32, param ...interface{}) (sqlexec.RecordSet, error) DropPreparedStmt(stmtID uint32) error SetClientCapability(uint32) // Set client capability flags. SetConnectionID(uint64) SetCommandValue(byte) SetProcessInfo(string, time.Time, byte) SetTLSState(*tls.ConnectionState) SetCollation(coID int) error SetSessionManager(util.SessionManager) Close() Auth(user *auth.UserIdentity, auth []byte, salt []byte) bool ShowProcess() util.ProcessInfo // PrePareTxnCtx is exported for test. PrepareTxnCtx(context.Context) // FieldList returns fields list of a table. FieldList(tableName string) (fields []*ast.ResultField, err error) // 用以测试 GetAlterTablePostPart(sql string, isPtOSC bool) string InitDisableTypes() LoadOptions(opt SourceOptions) error Audit(ctx context.Context, sql string) ([]Record, error) RunExecute(ctx context.Context, sql string) ([]Record, error) }
Session context
func CreateSession ¶
CreateSession creates a new session environment.
type SourceOptions ¶ added in v1.2.3
type SourceOptions struct { Host string Port int User string Password string Check bool Execute bool Backup bool IgnoreWarnings bool // 打印语法树功能 Print bool // 语法树v2功能,以列方式返回query涉及的字段列表 Masking bool // 使用count(*)计算受影响行数 RealRowCount bool // contains filtered or unexported fields }
SourceOptions 线上数据库信息和审核或执行的参数
type SplitSets ¶ added in v1.0.1
type SplitSets struct {
// contains filtered or unexported fields
}
func NewSplitSets ¶ added in v1.0.1
func NewSplitSets() *SplitSets
type StmtHistory ¶
type StmtHistory struct {
// contains filtered or unexported fields
}
StmtHistory holds all histories of statements in a txn.
func GetHistory ¶
func GetHistory(ctx sessionctx.Context) *StmtHistory
GetHistory get all stmtHistory in current txn. Exported only for test.
func (*StmtHistory) Add ¶
func (h *StmtHistory) Add(stmtID uint32, st ast.Statement, stmtCtx *stmtctx.StatementContext, params ...interface{})
Add appends a stmt to history list.
func (*StmtHistory) Count ¶
func (h *StmtHistory) Count() int
Count returns the count of the history.
type TableInfo ¶
type TableInfo struct { Schema string Name string // 表别名,仅用于update,delete多表 AsName string Fields []FieldInfo // 索引 Indexes []*IndexInfo // 分区信息 Partitions []*PartitionInfo // 是否已删除 IsDeleted bool // 备份库是否已创建 IsCreated bool // 表是否为新增 IsNew bool // 列是否为新增 IsNewColumns bool AlterCount int // 是否已清除已删除的列[解析binlog时会自动清除已删除的列] IsClear bool // 表大小.单位MB TableSize uint // 字符集&排序规则 Collation string // contains filtered or unexported fields }
TableInfo 表结构. 表结构实现了快照功能,在表结构变更前,会复制快照,在快照上做变更 在解析binlog时,基于执行时的快照做binlog解析,以实现删除列时的binlog解析
func (*TableInfo) EffectiveFieldCount ¶ added in v1.2.5
EffectiveFieldCount 有效列数,会移除已删除列和生成列
func (*TableInfo) ValidFieldCount ¶ added in v1.3.0
ValidFieldCount 可用列
type TxnState ¶
type TxnState struct { // States of a TxnState should be one of the followings: // Invalid: kv.Transaction == nil && txnFuture == nil // Pending: kv.Transaction == nil && txnFuture != nil // Valid: kv.Transaction != nil && txnFuture == nil kv.Transaction // contains filtered or unexported fields }
TxnState wraps kv.Transaction to provide a new kv.Transaction. 1. It holds all statement related modification in the buffer before flush to the txn, so if execute statement meets error, the txn won't be made dirty. 2. It's a lazy transaction, that means it's a txnFuture befort StartTS() is really need.
func (*TxnState) SeekReverse ¶
SeekReverse overrides the Transaction interface.
type VariableSets ¶
type VariableSets struct {
// contains filtered or unexported fields
}
func NewVariableSets ¶
func NewVariableSets(count int) *VariableSets
func (*VariableSets) Append ¶
func (s *VariableSets) Append(name string, value string)
func (*VariableSets) Rows ¶
func (s *VariableSets) Rows() []sqlexec.RecordSet