shell 读取一台mysql数据到另一台mysql中。
2018-03-22 本文已影响0人
Toyouy
- 1、shell 连接mysql查询并导入到文本
#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 "导出文件成功!"
- 2、读取文本数据,导入到另外一台服务器mysql表中
#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;" 命令来查看当前支持的引擎!