Commit 0d084e3e authored by 黎博's avatar 黎博

同步数据功能修改

parent 00573257
......@@ -87,3 +87,12 @@ export function synDataBase(dataInfo) {
params: dataInfo
})
}
// 新同步数据库接口
export function dbsyncNew(data) {
return holmesRequest({
url: '/dbsync/new',
method: 'post',
data
})
}
......@@ -162,6 +162,15 @@ export function dbsync(data) {
})
}
// 新同步数据库接口
export function dbsyncNew(data) {
return request({
url: '/dbsync/new',
method: 'post',
data
})
}
// jenkins构建控制台信息获取
export function dbsyncQuery(queryInfo) {
return request({
......
......@@ -2,32 +2,33 @@
<div>
<el-alert :closable="false" title="同步说明" type="info" style="font-size: 13px;" show-icon>
<slot name="description">
<p>1. 同步是与线上库同步表结构和配置数据;</p>
<p>2. 同步表结构会将线上比本地多的表、字段、索引同步到本地,对于本地比线上多的表、字段、索引则不会删除。如果要删除本地多出的表结构,可以手动删除,或者取消【保留业务数据】后进行同步;</p>
<p>3. 同步配置数据会将线上比本地多的配置数据同步到本地,对于本地比上线多的配置数据则不会删除,对于本地被更新的配置数据,同步后会根据主键覆盖成线上配置;</p>
<p>4. 哪些表是配置数据参见 https://qa2.liangkebang.com/dbconfig/manager 中的Tables列;</p>
<p>5. 有特殊的配置数据需求可以联系测试组(比如需要将某个渠道的MD5 key修改成一个特殊值)。</p>
<p>1. 同步数据库是将线上的表结构和配置数据同步到测试库;</p>
<p>2. 保留业务数据的意思是仅将线上的表结构同步到测试库,但仍保留测试环境的业务数据;</p>
</slot>
</el-alert>
<div class="app-container" style="width:1000px; margin:0 auto;">
<el-form ref="dataForm" :rules="rules" :model="temp" label-width="150px" style="margin-bottom:15px">
<el-form-item label="Namespace" prop="namespace">
<el-select v-model="temp.namespace" placeholder="要同步数据库的环境" filterable clearable style="width: 300px">
<el-select v-model="temp.namespace" placeholder="要同步的数据库所在环境" filterable clearable style="width: 300px">
<el-option v-for="item in namespaceList" :value="item.name" :label="item.name" :key="item.name" />
</el-select>
</el-form-item>
<el-form-item label="数据库名称" prop="dbName">
<el-select v-model="temp.dbName" filterable clearable style="width: 300px" placeholder="要同步表结构及配置数据的数据库名称">
<el-form-item label="数据库名" prop="dbName">
<el-select v-model="temp.dbName" filterable clearable style="width: 300px" placeholder="要同步的数据库名称"
@change="dbChange">
<el-option v-for="item in dbNameList" :value="item" :label="item" :key="item" />
</el-select>
</el-form-item>
<el-form-item label="保留业务数据">
<el-form-item label="表名:" prop="tableName">
<el-select v-model="temp.tableName" placeholder="要同步的表名" style="width:300px" filterable clearable>
<el-option v-for="item in tableList" :key="item" :label="item" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="是否保留业务数据">
<el-switch v-model="temp.notDeleteBusinessData" style="margin-right:280px" />
<span 是否保留当前已经存在的测试数据 />
</el-form-item>
<el-form-item label="使用备份数据">
<el-switch v-model="temp.useCache" />
</el-form-item>
</el-form>
<div style="margin-left:420px">
......@@ -45,8 +46,8 @@
</template>
<script>
import { getNamespaceList, dbsync, dbsyncQuery } from '@/api/k8s'
import { getDataBaseList } from '@/api/effect'
import { getNamespaceList, dbsyncQuery } from '@/api/k8s'
import { getDataBaseList, getTableByDataBase, dbsyncNew } from '@/api/effect'
import { getFormData } from '@/utils/tool'
export default {
data() {
......@@ -54,25 +55,30 @@ export default {
namespaceList: [],
// 数据库同步接口参数
syncData: {
dbName: '',
host: '',
port: '',
replaceDomain: false,
notDeleteBusinessData: true,
useCache: true
namespace: '',
targetHost: '',
targetPort: '',
database: '',
table: '',
businessData: ''
},
temp: {
namespace: '',
dbName: '',
notDeleteBusinessData: true,
useCache: true
tableName: '',
notDeleteBusinessData: false
},
desc: '',
dbNameList: [],
tableList: [],
rules: {
namespace: [{ required: true, message: '请选择环境', trigger: 'blur' }],
dbName: [
{ required: true, message: '请输入数据库名称', trigger: 'blur' }
],
tableName: [{ required: true, message: '请输入表名', trigger: 'blur' }],
notDeleteBusinessData: [
{ required: true, message: '请选择是否保留业务数据', trigger: 'blur' }
]
},
buildNum: undefined,
......@@ -104,22 +110,35 @@ export default {
getDatabases() {
getDataBaseList().then((resp) => {
this.dbNameList = resp.data.data
this.dbNameList.unshift('all')
})
},
// 数据库变更时
dbChange() {
this.tableList = []
if (this.temp.dbName === 'all') {
this.tableList.push('all')
} else {
getTableByDataBase({ dbName: this.temp.dbName }).then((resp) => {
this.tableList = resp.data.data
})
}
},
// 同步数据库
sync() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
this.syncData.namespace = this.temp.namespace
this.namespaceList.forEach((namespace) => {
if (namespace.name === this.temp.namespace) {
this.syncData.host = namespace.mysqlHost
this.syncData.port = namespace.mysqlPort
this.syncData.targetHost = namespace.mysqlHost
this.syncData.targetPort = namespace.mysqlPort
}
})
this.syncData.dbName = this.temp.dbName
this.syncData.notDeleteBusinessData = this.temp.notDeleteBusinessData
this.syncData.useCache = this.temp.useCache
dbsync(getFormData(this.syncData)).then((resp) => {
this.syncData.database = this.temp.dbName
this.syncData.table = this.temp.tableName
this.syncData.businessData = this.temp.notDeleteBusinessData
dbsyncNew(getFormData(this.syncData)).then((resp) => {
this.descVisible = true
if (resp.data.data !== 0) {
this.buildNum = resp.data.data
......@@ -137,7 +156,7 @@ export default {
// 查询数据库同步进度
syncQuery() {
dbsyncQuery({
jobName: 'sync_database_schema',
jobName: 'db_sync',
buildNum: this.buildNum
}).then((resp) => {
if (resp.data.data.status === 'SUCCESS') {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment