美文网首页
shell 读取一台mysql数据到另一台mysql中。

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

作者: Toyouy | 来源:发表于2018-03-22 13:38 被阅读0次

    • 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;" 命令来查看当前支持的引擎!

    相关文章

      网友评论

          本文标题:shell 读取一台mysql数据到另一台mysql中。

          本文链接:https://www.haomeiwen.com/subject/ojfaqftx.html