前言:周末临时接到一个任务说要去铁岭做数据抽取 首先:用户给了一台centos7的物理机器,良好的网络环境(外网以及内网连接) 目标:将数据从->sqlserver2000数据库中抽取到新给的物理机中 准备:数据库选择的Mysql8.0、抽取工具选择的kettle(界面虽然丑了一点,但功能还是挺好用的)
分析:1、因为是新服务器,需要安装各种各样的东西,比如配置地址、安装ssh、语言包等等等等: ? ? ? ? ? 2、任务目标需要准备的环境:mysql8.0(yum安装)、jdk1.8(yum安装-kettle是java开发的需要java环境)、kettle压缩包(网上下载然后手动放到服务器上)
物理机到手: 0、安装centos7系统 用这个(UltraISO)工具制作u盘启动项,u盘启动, 安装超时问题: ?再启动盘中的这个位置/isolinux/isolinux.cfg ?找到 Install CentOS 7 把这个标签改成这样:inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 安装系统的时候:选择 Install CentOS 7 ,然后修改 按 e 键,进入修改状态,将 hd:LABEL= 修改为U盘的标签,或者修改为当前 U盘在安装机的具体路径,一般为 /dev/hda4(这个地方可以先安装失败一次就能看到具体的名字了) 等,栗子:“hd:LABEL=/dev/hda4”,然后按 Ctrl+x (我用的F10)开始执行安装。
1、Linux中各种 command not found问题 原因是环境变量没有配置好,这里一般有两种解决方法: 第一:可以切换到root用户执行命令,第二种,就是配置用户的环境变量,其指令如下: export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 接着来查看ens33网卡的配置:vi /etc/sysconfig/network-scripts/ifcfg-ens33 注意vi后面加空格 设置ONBOOT=no 然后重启网络服务: sudo service network restart
2、设置IP地址(正式运行的时候一定要设置固定ip,否则地址一变,就谁都连不上了) 先用:ip addr 查看有几个网卡已经网卡 然后:编辑对应网卡的配置文件,vi /etc/sysconfig/network-scripts/ifcfg-ens33,将其中ONGOOT=yes 还有IPADDR=‘固定ip’等等(这个地方网上有很多就不多写了) 最后用重启网络服务:sudo service network restart(不重启一定不要用-不过我建议关机重启-因为我吃过这个亏): 重启linux:shutdown -r now 关闭linux:shutdown -h now 登出linux:logout 设置网卡开机启动:vi /etc/rc.d/rc.local ? ? 加入 ifup 网卡名
3、安装ssh(远程服务器用) 安装没什么说的yum安装就行,值得一说的是/etc/ssh/sshd_config中的配置文件,有几个地方需要更改,不让无法连接(而且新创建的子用户不用设置太多东西就能练,root用户要连的化还需要额外的设置一些东西) ssh连接提示密码错误(明明没错误解):就是配置文件的这个值需要更改一下UsePAM=yes 重启ssh服务:service sshd restart、systemctl restart sshd.service
ssh端口打穿防火墙:firewall-cmd --zone=public --add-port=22/tcp --permanent 切换到cd ?/etc/firewalld/zones ?(查看防火墙中对外公开的端口的配置文件-有22接口-成功)
4、新建子用户:新建一个用户,再新建一个用户组,把用户放在这个组里(否则登录不了) 创建组:groupadd admin 创建用户并分配组:useradd –g 组名 用户名 直接创建用户不分配组:useradd admin77 设置密码:passwd 123456
#给用户777设置admin77下的所有读写权限(admin77用户名|admin用户组) chown -R admin77:admin /home/admin77
5、安装jdk yum安装,安装完配置也默认就好了,很顺利
6、安装mysql yum安装,这个需要设置一下允许远程连接: mysql -u root -p ? 登录到mysql中 use mysql select host from user where user = 'root' update user set host = '%' where user = 'root'放开远程连接限制 flush privilegs;刷新配置
数据库端口打穿防火墙:firewall-cmd --zone=public --add-port=3306/tcp --permanent(添加一个3306端口永久生效。 切换到cd ?/etc/firewalld/zones ?(查看防火墙中对外公开的端口的配置文件-有3306接口-成功)
7、数据抽取工具(kettle) 简介:kettle是一个很好用的数据抽取工具,可以将一个数据库中的数据查询并插入到另一个数据库中。
(1)下载一个安装包(windows/linux通用,只不过启动文件不一样:windowd->spoon.bat | linux->spoon.sh) ?(2)按照网上的教程安装各种东西(linux图形界面等等相关的工具) ? ? ?xmanager(可以接受linux中弹出的kettle图形界面,方便操作kettle)
问题总结: (1)linux环境下部署 Kettle界面中文乱码问题:需要安装语言包 (2)kettle连不上mysql库:kettle不支持mysql8.几的驱动-换成5.几的就可以了 (3)sqlserver的时间查询问题:sqlservr不支持时间直接比较,要这么写->where DATEDIFF(hour,convert(varchar(50),sqlserver时间自段,20),'${传过来的参数}') ?< 0 (4)kettle增量抽取数据:先创建一个转换,再转换里查询抽取目标的最新时间,然后set参数;然后令一个转换里get参数,然后查询,查询的时候选中替换参数;出入的时候由于sqlserver和mysql的时间格式不一样,需要将字段转换(参数也可以转换-注意参数的大小写) (5)网上说要连sqlserver,需要打sp4补丁,这个我没遇到。
8、定时任务(创建一个sh文件,让系统定时调用)
创建.sh文件都需要付权限,否则用户无法执行:chmod u+x *.sh(.sh文件时作业的一个路径文件-可以再不启动kettle的图形界面情况下直接启动作业)
设置crond服务开机自启动 设置crond定时任务服务开机自启,在 /etc/rc.d/rc.local脚本中加入 /sbin/service crond start
定时任务 admin77用户下执行 ? ?crond -e ? 加入下面一行 */30 * * * * /home/admin77/kettle/data-integration/start.sh >> /home/admin77/kettle/data-integration/start.log
|