Mysql-数据同步脚本

Mysql-数据同步脚本

用mysqldump同步两个数据库

结构

1
2
3
4
5
├── db.lst                   ## 数据库对照表
├── ignore-table.lst ## 只同步结构,不同步数据的表
├── mysql_sync.sh ## 主程序
├── source.lst ## 源数据库的配置信息
└── target.lst ## 目标数据库的配置信息

配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# cat db.lst
##sourcedb|targetdb
telematics|telematics
iot_sit|iot
baseinfo_sit|base_info

# cat ignore-table.lst
#sourcedb.table
farm_sit.t_task_machinery_msg_log_20220511
smart_farm_test.t_ag_machinery_work_log
farm_sit.t_task_machinery_msg_log
smart_farm_test.um_user_action_log
farm_sit.t_synergy_task_realtime_info
smart_farm_test.t_drainirrigate_eq_log

# cat source.lst
[client]
user=super
password=123456
host=172.31.40.125
port=3306

# cat target.lst
[client]
user=root
password=123456
host=localhost
port=3306

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
for db in $(cat db.lst|grep -v ^#)
do
sdb=$(echo $db|awk -F\| '{print $1}')
tdb=$(echo $db|awk -F\| '{print $2}')

date
echo "sync $sdb --> $tdb "

echo "drop database if exists \`$tdb\`;"|mysql --defaults-extra-file=target.lst
echo "create database \`$tdb\`;"|mysql --defaults-extra-file=target.lst

if grep -q $x ^$sdb ignore-table.lst
then
for row in $(grep ^$sdb ignore-table.lst)
do
row1=$(echo row |awk -F\. '{print $2}')
row2=$row
str1=$str1" "$row1
str2=$str2" --ignore-table "$row2
done
echo $str1 $str2
mysqldump --defaults-extra-file=source.lst --opt $sdb --tables $str1 --no-data| mysql --defaults-extra-file=target.lst -C $tdb
fi

mysqldump --defaults-extra-file=source.lst --opt $sdb $str2 | mysql --defaults-extra-file=target.lst -C $tdb

## no data
#mysqldump --defaults-extra-file=source.lst --opt $sdb $str2 --no-data | mysql --defaults-extra-file=target.lst -C $tdb
done