shell 读取一台mysql数据到另一台mysql中。

2018-03-22  本文已影响0人  Toyouy

#mysql 连接信息
host=
port=
username=root
pwd=
database=

#接受变量值,用于查询条件
createTime=$1

# 连接mysql信息
MYSQL="mysql -h${host} -p${port} -u${username} -p${pwd} ${database} --default-character-set=utf8 -A -N"

#查询sql(是用concat函数用于,将每列的值用逗号分隔符进行隔离)
select="select CONCAT(pr_id,',',pr_userName,',',pr_uid,',',pr_pwd,',',pr_orgId,',',pr_email,',',IFNULL(pr_mobile,''),',',pr_status,
',',pr_createTime,',',pr_modifyTime,',',pr_creator,',',pr_usertype,',',pr_usertypeId,',',pr_eid,',',pr_pinyin,',',IFNULL(pr_workNo,'')
,',',IFNULL(pr_domain,'')) 
from pr_employee where pr_createTime > '$createTime'"

#打印sql
echo "查询${createTime}之前的用户数据sql:-->"$select

#开始连接mysql及执行sql
result="$($MYSQL -e "$select")"

#将查询出来的值导入到txt格式文本中
dump_data=/data/transfer/data.user.txt
>$dump_data

echo "导出文件成功!"

#mysql 连接信息
host=
port=
username=
pwd=
database=

#需要读取文本的路径
file=""

#判断文件是否为空  或者 文本包含 “NULL”
grep -q "NULL" $file
if [ ! -s ${file} ] || [ "$?" -eq "0" ]; then
        echo "导入文件为空"
        exit;
else
        echo "执行导入"
fi

#临时设置默认分隔符为逗号
IFS=","
OLF_IFS=$IFS

cat $file | while read pr_id pr_userName pr_uid pr_pwd pr_orgId pr_email pr_mobile pr_status pr_createTime pr_modifyTime pr_creator pr_usertype pr_usertypeId pr_eid pr_pinyin pr_workNo pr_domain
do

        sql="insert into pr_employee(pr_id,pr_userName,pr_uid,pr_pwd,pr_orgId,pr_sex,pr_email,pr_mobile,pr_status,pr_createTime,pr_modifyTime,pr_creator,pr_usertype,pr_usertypeId,pr_eid,pr_workNo,pr_domain)
                select '${pr_id}','${pr_userName}','${pr_uid}','${pr_pwd}','${pr_orgId}','1','${pr_email}','${pr_mobile}','${pr_status}','${pr_createTime}','${pr_modifyTime}','${pr_creator}','${pr_usertype}','${pr_usertypeId}','${pr_eid}','${pr_workNo}','${pr_domain}'
                from dual where not EXISTS (select pr_id from pr_employee where pr_id = '${pr_id}')"

        sql2="insert into pr_sysroleuser(pr_id,pr_sysroleId,pr_userId,pr_eid)
                select UUID_SHORT(),'1000000001','${pr_id}','paraview' from dual where not EXISTS (select pr_userId from pr_sysroleuser WHERE pr_userId= '${pr_id}')"

      
        #echo $MYSQL"$sql"
#这里用这种是因为,设置了分隔符为逗号,如果用“$MYSQL"$sql"”这种命令,会导致命令无法识别
#所以使用这种
mysql -h${host} -p${port} -u${username} -p${pwd} ${database}  <<EOF
  $sql;$sql2;
EOF

done

总结

    第一次编写shell脚本,这个比较简单。主要用于查询一台mysql的数据出来,新增到另一台服务器的mysql库中。

    本地MySQL数据库要访问远程mysql数据库的表中的数据, 还可以通过FEDERATED存储引擎来实现。 

    这个就不做具体演示。提示下,首页要看本地及远程mysql数据库是否支持FEDERATED存储引擎,可以使用"show engines;" 命令来查看当前支持的引擎!
上一篇下一篇

猜你喜欢

热点阅读