Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go 备份数据库表

Go 备份数据库表的实现示例

作者:hujun8610

备份mysql数据库的方法有很多,常用的可以登录mysql活着使用mysqldump命令进行备份,本文提供golang的方式来备份mysql数据库,下面就来详细的介绍一下

简介

常见数据库备份方法

  1. 登录mysql数据库,执行mysql命令进行备份。
SELECT * FROM account_auth INTO OUTFILE 'yourpath' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'

以上命令将查询结果导出为csv文件。

  1. 使用mysqldump命令备份指定的表
mysqldump -h host -Pyourport -u yourdatabase -p'youpassword' --fields-terminated-by=',' --fields-enclosed-by='"' --fields-escaped-by='\\' --tab=/yourpath database table;

以上两种方式要求登录数据库的账号拥有数据导出权限,否则导出会失败。

go实现mysql数据库导出

package database  
import (  
"fmt"  
"os"  
"strings"  
)  
//var log = logger.GetLogger()  
func Backup(sql string, backupFile string) {  
log.WithField("sql", sql).WithField("backupFilename", backupFile).Info("begin to backup sql")  
if !strings.Contains(sql, "limit") {  
if strings.Contains(sql, ";") {  
strings.Replace(sql, ";", " ", -1)  
}  
sql = fmt.Sprintf("%s %s", sql, "limit 10;")  
}  
sqlDB, err := GetDB().DB()  
defer func() {  
err = CloseDB()  
if err != nil {  
log.Fatalf("close database failed %s", dsn)  
}  
}()  
if err != nil {  
log.Fatalf("get sql db failed")  
}  
rows, err := sqlDB.Query(sql)  
if err != nil {  
log.Fatalf("query database failed", err)  
}  
defer rows.Close()  
columns, _ := rows.Columns()
//values用于存储数据库的查询结果
values := make([]interface{}, len(columns))
//valuePtrs用于存储scan指针
valuePtrs := make([]interface{}, len(columns))  
for i := range columns {  
valuePtrs[i] = &values[i]  
}  
var content string  
for rows.Next() {  
//columns, _ := rows.Columns()  
err := rows.Scan(valuePtrs...)  
if err != nil {  
log.Fatalf("get data from rows failed ", err)  
}  
rowData := make([]string, len(columns))  
for i, val := range values {  
if val == nil {  
rowData[i] = "NULL"  
} else {  
//将查询结果转成string,否则输出为asicc码
rowData[i] = fmt.Sprintf("%s", val)  
}  
}  
result := strings.Join(rowData, ",")  
result += "\n"  
log.Info("the row result: %s", result)  
content += result  
}  
err = os.WriteFile(backupFile, []byte(content), 0644)  
if err != nil {  
log.Fatalf("backup file failed ", backupFile)  
}  
}

到此这篇关于Go 备份数据库表的实现示例的文章就介绍到这了,更多相关Go 备份数据库表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文