使用Shell进行Mysql间数据以文本形式传输及注意事项
2016-12-07 20:54
549 查看
1、程序目录结构
2、进行Mysql数据卸装Shell程序
[root@master etl_script]# cat user_profile.sh
3、说明及注意事项
3.1、关于中文乱码问题
导出时出现乱码,需要在命令行前添加【set character_set_results=utf8;】;导入时出现乱码,需要添加load data选项【character set utf8】放在into table与fileds中间。
3.2、Mysql分表的导出
导出Mysql分表,采用如例所示的到Mysql字典中查找的方法,循环逐个导出追加数据文件的方式。
3.3、源表字段格式的查找
源表字段列部分采用通过Sql进行拼脚本的方式,但要注意,需要手动去除所得结果的【,'|'】,但最后的括号不去除。
-- 取源表字段的SQL:
结果示例:
CONCAT(ifnull(\`id\`,''),'|',ifnull(\`uid\`,''),'|',ifnull(\`type\`,''),'|',ifnull(\`target_key\`,''),'|',ifnull(\`state\`,''),'|',ifnull(\`created_time\`,''),'|',ifnull(\`updated_time\`,''),'|')
3.4、表结构说明
例子中要求源、目标表结构相同;如若选取源的部分字段装载到目标表中,则可以在[3.3]的Sql中过滤对应的字段进行筛选。
[root@master timeline]# pwd /root/timeline [root@master timeline]# tree . ├── data │ ├── jellyfish_user.user_profile.dat │ └── jellyfish_user.user_profile.list └── etl_script └── user_profile.sh 2 directories, 3 files
2、进行Mysql数据卸装Shell程序
[root@master etl_script]# cat user_profile.sh
#!/bin/bash rm -rf /root/timeline/data/jellyfish_user.user_profile.dat /usr/bin/mysql -hsrc-ip -Psrc-port -usrc-user -psrc-passwd -N -e"select table_name from information_schema.tables where table_schema='jellyfish_user' and table_name like 'user_profile%';" > /root/timeline/data/jellyfish_user.user_profile.list i=1 for tab in $(cat /root/timeline/data/jellyfish_user.user_profile.list) do col_num=$i tab_name=$(awk -F "|" 'NR=='$col_num' {print $1}' /root/timeline/data/jellyfish_user.user_profile.list) echo $tab_name #user_profile data proc ... /usr/bin/mysql -hsrc-ip -Psrc-port -usrc-user -psrc-passwd -N -e"set character_set_results=utf8;select CONCAT(ifnull(\`uid\`,''),'|',ifnull(\`nickname\`,''),'|',ifnull(\`avatar\`,''),'|',ifnull(\`signature\`,''),'|',ifnull(\`gender\`,''),'|',ifnull(\`type\`,''),'|',ifnull(\`source\`,''),'|',ifnull(\`phone_num_verified\`,''),'|',ifnull(\`id_card_verified\`,''),'|',ifnull(\`state\`,''),'|',ifnull(\`last_login_time\`,''),'|',ifnull(\`created_time\`,''),'|',ifnull(\`updated_time\`,'')) from jellyfish_user.$tab_name;" >> /root/timeline/data/jellyfish_user.user_profile.dat : $(( i++ )) done /usr/bin/mysql -htgt-ip -utgt-user -ptgt-passwd -e "set character_set_results=utf8;use timeline;truncate table user_profile;load data local infile '/root/timeline/data/jellyfish_user.user_profile.dat' into table user_profile character set utf8 fields terminated by '|' enclosed by '' lines terminated by '\n' ignore 0 lines;"
3、说明及注意事项
3.1、关于中文乱码问题
导出时出现乱码,需要在命令行前添加【set character_set_results=utf8;】;导入时出现乱码,需要添加load data选项【character set utf8】放在into table与fileds中间。
3.2、Mysql分表的导出
导出Mysql分表,采用如例所示的到Mysql字典中查找的方法,循环逐个导出追加数据文件的方式。
3.3、源表字段格式的查找
源表字段列部分采用通过Sql进行拼脚本的方式,但要注意,需要手动去除所得结果的【,'|'】,但最后的括号不去除。
-- 取源表字段的SQL:
select CONCAT('CONCAT(',GROUP_CONCAT(concat('ifnull(\\`',b.COLUMN_NAME,'\\`,\'\')',',\'|\'')),')') from information_schema.`TABLES` a left join information_schema.`COLUMNS` b on a.TABLE_NAME=b.TABLE_NAME and a.TABLE_SCHEMA=b.TABLE_SCHEMA where a.table_NAME='time_line';
结果示例:
CONCAT(ifnull(\`id\`,''),'|',ifnull(\`uid\`,''),'|',ifnull(\`type\`,''),'|',ifnull(\`target_key\`,''),'|',ifnull(\`state\`,''),'|',ifnull(\`created_time\`,''),'|',ifnull(\`updated_time\`,''),'|')
3.4、表结构说明
例子中要求源、目标表结构相同;如若选取源的部分字段装载到目标表中,则可以在[3.3]的Sql中过滤对应的字段进行筛选。
相关文章推荐
- mysql索引类型-方法-形式-使用时机-不足之处--注意事项
- C++使用CInternetSession请求url下载jason数据,并且进行解析。以及注意事项
- 使用josn数据进行数据传输时需要注意字符编码
- 文本文件数据导入mysql注意事项
- 使用ArcGIS Runtime 100 进行本地GIS数据处理的注意事项
- MySQL使用JDBC Load Data InFile导入数据注意事项
- 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(04) 索引使用的注意事项
- 使用MySQL MySqldump命令导出数据时的注意事项
- 【原创】使用SqlServer的DTS进行Oracle数据导入的注意事项
- 关于使用while(!filePCloud.eof())判断文件结尾进行数据输入装换时注意事项
- MySQL的MYISAM格式的库,进行大批量删除数据注意事项
- MySQL使用AUTO_INCREMENT列的表注意事项之delete数据篇
- 使用MySQL MySqldump命令导出数据时的注意事项,mysqlmysqldump
- 使用MySQL MySqldump命令导出数据时的注意事项
- 使用shell进行mysql数据统计并上传
- mysql权限和使用注意事项及mysql 数据类型详解和innodb,myisam区别
- 使用 JSON 进行数据传输
- 在服务器上安装、使用MySQL的注意事项(1)
- 使用 JSON 进行数据传输
- 掌握 Ajax,第 10 部分: 使用 JSON 进行数据传输