GBase 8s
备份恢复
问答

数据库内指定的表备份以及恢复脚本如何编写

发表于2024-06-25 16:48:59157次浏览7个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:8s

【操作系统】:linux

【CPU】:

【问题描述】*:如题,数据库内将指定表备份以及恢复脚本应该如何编写

评论

登录后才可以发表评论
9527发表于 2年前
1.备份时,使用dbschema 导出具体表结构,unload命令导出表中数据。
2.还原时,先恢复表结构,然后使用dbload进行数据导入。
GBase用户17261发表于 2年前
@9527:#!/bin/sh
dbname=$1
username=$2
password=$3
tablename=$4
filename=$5
tablename=${tablename//,/ }
if [ $dbname == "mysql" ]; then
/usr/local/mysql/bin/mysqldump -u${username} -p${password} kms ${tablename} > ${filename}.sql
elif [ $dbname == "oceanbase" ]; then
/root/.oceanbase-all-in-one/obclient/u01/obclient/bin/mysqldump -u${username} -p${password} kms ${tablename} > ${filename}.sql
能不能以类似上面的脚本进行备份以及恢复呢
用户头像
wty发表于 2年前
导出可以用dbaccess执行SQL
unload to 文件 select * from tabname;
导入同样用dbaccess执行SQL
load from 文件 insert into tabname;

如果担心数据一致性问题,可以在导出之前先手动锁表
lock table tabname in share mode; (共享锁)
lock table tabname in exclusive mode; (排他锁)
导入导出完成之后解锁表
unlock table tabnale;

如果有CLOB/BLOB会存到导出文件之外的其他文件里,需要一起存起来
GBase用户17261发表于 2年前
@wty:#!/bin/sh
dbname=$1
username=$2
password=$3
tablename=$4
filename=$5
tablename=${tablename//,/ }
if [ $dbname == "mysql" ]; then
/usr/local/mysql/bin/mysqldump -u${username} -p${password} kms ${tablename} > ${filename}.sql
elif [ $dbname == "oceanbase" ]; then
/root/.oceanbase-all-in-one/obclient/u01/obclient/bin/mysqldump -u${username} -p${password} kms ${tablename} > ${filename}.sql
能不能以类似上面的脚本进行备份以及恢复呢?
用户头像
wty发表于 2年前
@GBase用户17261:echo "你的sql" > dbaccess dbname
可以这样在shell里执行SQL,其他逻辑按你自己的需求写吧
最佳回答
GBase用户17261发表于 2年前
@wty:好的,我试试,感谢