最近项目需要改动比较大,数据库结构也有所改变,这时就需要转移旧数据到新库中
第一时间想到的是用代码操作,由于两个库表结构不同,实体什么的得需要重新生成
并编写转移代码,这将是很大的工作量;
然后就想着
用脚本解决问题,方式如下:
先编写脚本
#!/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 " ">>${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分钟看执行结果了