需求:定时同步mysql服务器上的表到另外个数据库内
解决方法:结合linux的contable和mysqldump命令完成该功能
Mysql&Shell
#!/bin/bash
PORT="3306" #端口号
USERNAME="bidbuser" #用户名
PASSWORD="!#1276983ert" #密码
DBNAME="testdb" #数据库名称
RUNDATE=`date +%Y-%m-%d`
HAVEORDER="0"
CLASSIFY="0"
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
####1 数据同步,生成相应推送数据
mysqldump -u'mysqluser' -p'test@ter' -h'192.168.128.15' smartyou tb_user tb_food tb_city >db.sql
mysql -u$USERNAME -p$PASSWORD -D$DBNAME < '/root/db.sql'
mysql -u$USERNAME -p$PASSWORD -D$DBNAME -P$PORT -e "call pro_gen_recomondcook ('${RUNDATE}')" 1>/root/sysc_test.log
####2 数据同步,生成相应推送数据
mysqldump -umytest2 -p'test2@123' -h'192.168.128.16' db_test tb_carry tb_good --set-gtid-purged=OFF>test.sql
mysql -u$USERNAME -p$PASSWORD -D$DBNAME < '/root/test.sql' 1>/root/sysc.log
mysql -u$USERNAME -p$PASSWORD -D$DBNAME -P$PORT -e "call pro_gen_recomondcomm (${HAVEORDER},${CLASSIFY},'${RUNDATE}')" 1>/root/sysc_test.log
crontab –l
0 */12 * * * /root/mysqlsync.sh >/root/sync_recom.log2>&1
代码解读:
1) 定义常用变量,如DBNAME、USERNAME,指定时间RUNDATE,这里通过date +%Y-%m-%d获取时间会保证每次调度时时间会生成新的
2) 重新指定环境变量 PATH=…
3) mysqldump –u用户名 –p密码 –h服务器 数据库名表名 表名>db.sql文件名,作用是将指定数据库里的表以sql的形式导出,这里有建表语句和insert into语句
4) mysql –u用户名 –p密码 –D数据库 –P端口号 –e执行的语句,这里可以调用存储过程并且可以传参数
5)crontab里的意思是每隔12小时跑一次