最近项目需要改动比较大,数据库结构也有所改变,这时就需要转移旧数据到新库中
第一时间想到的是用代码操作,由于两个库表结构不同,实体什么的得需要重新生成
并编写转移代码,这将是很大的工作量;
然后就想着
用脚本解决问题,方式如下:
先编写脚本
#!/bin/bash
# Define log
TIMESTAMP=`date +%Y%m%d%H%M%S`
LOG=call_sql_${TIMESTAMP}.log
echo "Start execute sql statement at `date`." >>${LOG}
# execute sql stat
mysql -u**** -p**** -e "
tee /home/credit_back/temp.log
#转移用户登录表
INSERT IGNORE INTO credit_db.c_user_login_info(username, password, enabled, realname, phone, company, registration_time, last_login_time, dk_id, channel_id) SELECT username, password, enabled, realname, phone, company, registration_time, last_login_time, dk_id, channel_id FROM credit.c_user_login_info;
#更新注册来源,账号状态
UPDATE credit_db.c_user_login_info SET register_source='h5',account_status=1 WHERE register_source is null;
notee
quit" echo -e "\n">>${LOG}
echo "below is output result.">>${LOG}
cat /home/credit_back/temp.log>>${LOG}
echo "script executed successful.">>${LOG}
exit;
然后写定时任务执行该脚本
链接数据库服务器,输入命令
crontab -e
编写定时任务
#定时调用脚本,每小时执行一次
0 */1 * * * /bin/sh /home/credit_back/credit_db_backup.sh
查看定时任务
crontab -l
这种方式是可以解决问题,但是脚本中需要数据库密码,为了安全我
采用navcat编写定时任务
首先,打开navcat,查询定时任务是否开启
show variables like '%sche%';
此时是关闭的,需要开启
set global event_scheduler = ON
定时任务开启后,开始编写存储过程
如何编写可以搜一下,下面是我的存储过程
最后编写定时任务,右击新建事件
即调用刚才写的存储过程
CALL TransferData()
设置定时计划,为了测试,每分钟执行一次
下面就等待1分钟看执行结果了