首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【数据库系列】环境治理之同步数据库

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

作者头像
用户9913368
发布2022-08-13 15:35:29
发布2022-08-13 15:35:29
1K00
代码可运行
举报
文章被收录于专栏:嘎嘎软件测试嘎嘎软件测试
运行总次数:0
代码可运行

1 环境治理之同步数据库

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

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

2 如何同步数据库

1、通过Navicat进行数据或者结构同步

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

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

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

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

2、通过命令行方式备份及还原数据库

代码语言:javascript
代码运行次数:0
运行
复制
##################################备份##################################
#注:如果账号密码有特殊字符,需用斜杠做转义,如: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同步数据库脚本,可供参考~

代码语言:javascript
代码运行次数:0
运行
复制
#!/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 总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嘎嘎软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 环境治理之同步数据库
  • 2 如何同步数据库
  • 3 定时同步数据库
  • 4 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档