通过脚本将数据库中指定表的数据定期同步到远程服务器的数据库中

废话不多说,直接上代码

使用命令创建一个bash文件

vim /data/mysql-sync.sh

将下边的内容粘贴进去

#!/usr/bin/env bash

set -x

# 源数据库连接信息
SOURCE_DB_HOST="host"
SOURCE_DB_PORT="port"
SOURCE_DB_USER="username"
SOURCE_DB_PASS="pass"

# 目标数据库连接信息
TARGET_DB_HOST="host"
TARGET_DB_PORT="port"
TARGET_DB_USER="username"
TARGET_DB_PASS="pass"

# 数据库和表信息
SOURCE_DATABASE="源数据库名称"
TARGET_DATABASE="目标数据库名称"
TABLE1="表1"
TABLE2="表2"
TABLE3="。。。"

# 执行时间信息
TIME_FILE_NAME="/tmp/time_file.txt"

# 最后一次的执行时间
LAST_TIME=""

# 检查文件是否存在
if [ -f "$TIME_FILE_NAME" ]
then
    # 如果文件存在,使用cat命令读取文件内容
    content=$(cat $TIME_FILE_NAME)
    echo "文件内容为:"
    echo $content
	LAST_TIME = $content
else
    # 如果文件不存在,输出错误消息
    echo "文件不存在。"
	LAST_TIME="";
fi


# 临时文件路径和名称
TMP_FILE1="/tmp/sync_${TABLE1}.sql"
TMP_FILE2="/tmp/sync_${TABLE2}.sql"
TMP_FILE3="/tmp/sync_${TABLE3}.sql"



# 生成同步SQL语句
# 最后一次执行时间为空的时候代表第一次执行,此时不加条件全量生成

condition = "CREATE_TIME >= '${LAST_TIME AND}' CREATE_TIME < DATE_FORMAT(NOW(),'%Y-%m-%d')"
	
if [ -z "$LAST_TIME" ]
then
	
	# 执行同步SQL语句
	echo "Syncing data from source database to target database..."
	/data/mysql/bin/mysqldump -h "${SOURCE_DB_HOST}" -P ${SOURCE_DB_PORT} -u "${SOURCE_DB_USER}" -p"${SOURCE_DB_PASS}" "${SOURCE_DATABASE}" "${TABLE1}" --skip-add-locks --no-create-info --skip-triggers --compact --complete-insert --extended-insert=FALSE > "${TMP_FILE1}"
	/data/mysql/bin/mysqldump -h "${SOURCE_DB_HOST}" -P ${SOURCE_DB_PORT} -u "${SOURCE_DB_USER}" -p"${SOURCE_DB_PASS}" "${SOURCE_DATABASE}" "${TABLE2}" --skip-add-locks --no-create-info --skip-triggers --compact --complete-insert --extended-insert=FALSE > "${TMP_FILE2}"
	/data/mysql/bin/mysqldump -h "${SOURCE_DB_HOST}" -P ${SOURCE_DB_PORT} -u "${SOURCE_DB_USER}" -p"${SOURCE_DB_PASS}" "${SOURCE_DATABASE}" "${TABLE3}" --skip-add-locks --no-create-info --skip-triggers --compact --complete-insert --extended-insert=FALSE > "${TMP_FILE3}"
																																		 



else
  	# 执行同步SQL语句
	echo "Syncing data from source database to target database..."
	/data/mysql/bin/mysqldump -h "${SOURCE_DB_HOST}" -P ${SOURCE_DB_PORT} -u "${SOURCE_DB_USER}" -p"${SOURCE_DB_PASS}" "${SOURCE_DATABASE}" "${TABLE1}" --where="${condition}" --skip-add-locks --no-create-info --skip-triggers --compact --complete-insert --extended-insert=FALSE > "${TMP_FILE1}"
	/data/mysql/bin/mysqldump -h "${SOURCE_DB_HOST}" -P ${SOURCE_DB_PORT} -u "${SOURCE_DB_USER}" -p"${SOURCE_DB_PASS}" "${SOURCE_DATABASE}" "${TABLE2}" --where="${condition}" --skip-add-locks --no-create-info --skip-triggers --compact --complete-insert --extended-insert=FALSE > "${TMP_FILE2}"
	/data/mysql/bin/mysqldump -h "${SOURCE_DB_HOST}" -P ${SOURCE_DB_PORT} -u "${SOURCE_DB_USER}" -p"${SOURCE_DB_PASS}" "${SOURCE_DATABASE}" "${TABLE3}" --where="${condition}" --skip-add-locks --no-create-info --skip-triggers --compact --complete-insert --extended-insert=FALSE > "${TMP_FILE3}"

fi

sleep 10

# 读取 SQL 文件

SQL1=$(cat $TMP_FILE1)
SQL2=$(cat $TMP_FILE2)
SQL3=$(cat $TMP_FILE3)

# 连接数据库并插入数据
mysql -u ${TARGET_DB_USER} -p${TARGET_DB_PASS} --host ${TARGET_DB_HOST} ${TARGET_DATABASE} < "${TMP_FILE1}"

mysql -u ${TARGET_DB_USER} -p${TARGET_DB_PASS} --host ${TARGET_DB_HOST} ${TARGET_DATABASE} < "${TMP_FILE2}"

mysql -u ${TARGET_DB_USER} -p${TARGET_DB_PASS} --host ${TARGET_DB_HOST} ${TARGET_DATABASE} < "${TMP_FILE3}"

# 删除之前生成的时间文件
rm ${TIME_FILE_NAME}

# 获取当前日期并将其格式化为"年-月-日"的形式
date=$(date +"%Y-%m-%d")

# 将日期输出保存到文件中
echo $date > ${TIME_FILE_NAME}

# 删除临时文件
echo "Cleaning up..."
rm ${TMP_FILE1}
rm ${TMP_FILE2}
rm ${TMP_FILE3}

set +x

执行当前文件

sh /data/mysql-sync.sh

我们可以去目标数据库看下对应数据是否插入表中,之后设置定时任务

首先,在终端中输入以下命令来打开当前用户的crontab文件

crontab -e

在打开的文件中添加一行如下的代码:

0 1 */7 * * /path/to/your/script.sh

其中,/path/to/your/script.sh 是你要执行的脚本的路径,可以根据实际情况修改。

解释一下上面的代码:

  • 0 1 表示在凌晨1点执行脚本,0 表示分钟数为0,1 表示小时数为1。
  • */7 表示每7天执行一次。
  • * * 表示每个月、每一周都执行。
  • /path/to/your/script.sh 是你要执行的脚本的路径。

保存并退出crontab文件。

现在,每7天的凌晨1点,系统会自动执行你的脚本。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值