暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【数据库系列】环境治理之同步数据库

嘎嘎软件测试 2021-12-13
302

1 环境治理之同步数据库

在环境治理的环节中必不可少的就是数据库的管理,数据库管理的环节中很重要的一点就是数据库的同步。

测试数据是需求测试中非常重要的资产,那么做好数据的备份和同步就是非常重要的,接下来我就来讲讲如何做一个数据的同步及备份吧。

2 如何同步数据库

1、通过Navicat进行数据或者结构同步
工具 > 数据同步:同步结构及数据,选择源连接、源数据库和目标连接、目标数据库。

注:一定要确定源和目标,千万不要反向同步!

工具 > 结构同步:仅同步结构,不同步数据,选择源连接、源数据库和目标连接、目标数据库。

注:一定要确定源和目标,千万不要反向同步!

2、通过命令行方式备份及还原数据库
##################################备份##################################
#注:如果账号密码有特殊字符,需用斜杠做转义,如:qwe\!
#1.1、备份单个数据库dbname到目录/tmp下面,并指定名称为dbname(dbname可任意更改)
mysqldump -h127.0.0.1 -uroot -ppassword dbname > /tmp/dbname.sql;


#1.2、备份数据库中的某个表t_a_table t_b_table,注:表名之间是空格
mysqldump -h127.0.0.1 -uroot -ppassword dbname t_a_table t_b_table > /tmp/dbname.sql;


#1.3、备份多个数据库a_dbname b_dbname,注:加上--databases参数,数据dbname之间是空格
mysqldump -h127.0.0.1 -uroot -ppassword --databases a_dbname b_dbname > /tmp/dbname.sql;


#1.4、备份数据库并压缩
mysqldump -h127.0.0.1 -uroot -ppassword dbname | gzip > /tmp/dbname.sql.gz;




##################################还原##################################
#2.1、还原数据库
mysql -h127.0.0.1 -uroot -ppassword dbname < /tmp/dbname.sql;


#2.2、解压数据库并还原
gunzip < /tmp/dbname.sql.gz | mysql -h127.0.0.1 -uroot -ppassword dbname;


#2.3、source还原数据库
mysql -h127.0.0.1 -uroot -ppassword
mysql>use dbname #数据库
mysql>source /tmp/dbname.sql #然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
复制


3 定时同步数据库

通过上面介绍,我们了解到如何备份及还原数据库了,那么需求来了,我们需要按天备份源数据库,并且同步到目标数据库前需把目标数据库进行备份,最后才进行同步。

注意,做任何同步之前都要先做好备份,有备无患!

下面是一个实现同步数据库demo,再结合crontab定时任务执行脚本,crontab  -e  编辑crontab服务文件,

举例:* 23 * * *  /bin/sh /tmp/synchronize_database_data.sh。

查看定时任务:crontab -l。

以下是synchronize_database_data.sh同步数据库脚本,可供参考~

#!/bin/bash


time1=`date +%Y-%m-%d`
time2=`date +%Y-%m-%d_%H:%M:%S`


# 注:数据库位置一定要对应!!!src_dbname_list=(dbname_a dbname_b)
dst_dbname_list=(dbname_a dbname_b)


# 1、根据当天时间创建目录, -p:如果不存在该目录则创建
create_dir(){
mkdir -p /tmp/src_dbname/${time1}
mkdir -p /tmp/dst_dbname/${time1}
}


# 2、源数据库压缩备份
bak_scr(){
mysqldump -h127.0.0.1 -P3306 -uroot -ppassword ${src_dbname_list[$i]} | gzip > /tmp/src_dbname/${time1}/${src_dbname_list[$i]}.sql.gz
echo -e "\033[32m${time2} ${src_dbname_list[$i]} 源数据库压缩备份成功 路径:/tmp/src_dbname/${time1}/${src_dbname_list[$i]}.sql.gz\n\033[0m"
}


# 3、目标数据库备份+源数据库同步到目标数据库
sync_dst(){
mysqldump -h127.0.0.1 -P3306 -uroot -ppassword ${dst_dbname_list[$j]} | gzip > /tmp/dst_dbname/${time1}/${dst_dbname_list[$j]}.sql.gz
echo -e "\033[32m${time2} ${dst_dbname_list[$j]} 目标数据库压缩备份成功 路径:/tmp/dst_dbname/${time1}/${dst_dbname_list[$j]}.sql.gz\n\033[0m"


gunzip < /tmp/src_dbname/${time1}/${src_dbname_list[$i]}.sql.gz | mysql -uroot -ppassword ${dst_dbname_list[$j]}
echo -e "\033[32m${time2} ${src_dbname_list[$i]} to ${dst_dbname_list[$j]} 数据同步成功\n\033[0m"
}




for i in ${!src_dbname_list[@]}
do
create_dir
bak_scr
for j in ${!dst_dbname_list[@]}
do
# $i -eq $j :表示参数i和参数j的位置相同, 注:数据库位置一定要对应!!!if [ $i -eq $j ];then
sync_dst
fi
done
done
复制


4 总结

要对数据库有敬畏之心,无论生产还是测试,做好数据备份是基本功!


文章转载自嘎嘎软件测试,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论