外部数据导入新增MySql数据库

由于前方项目需求,之前参与的工程中可以导入外部数据,进行数据分析,目前已经支持的数据库包括oracle、Hive、Postgre,周一组会经过讨论,需要新增Mysql数据库,下面就来梳理一下这两天所做的事情。

既然要测试外部数据库,肯定需要在linux上安装Mysql了,我的Linux是RedHat,首先在上面安装Mysql数据库。

首先打开mysql官网:https://dev.mysql.com/downloads/mysql/5.7.html?os=src
下载指定版本的数据库包

安装mysql

外部数据导入新增MySql数据库_第1张图片
1.如果之前已经安装过别的版本的mysql,可以先行卸载以前安装过的mysql文件

rpm -qa | grep -i mysql

rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64

2.然后,把我们刚才下载的数据包上传并解压文件

上传我们用的是xshell的ftp文件传输,然后进行解压

tar xvf mysql-5.7.25-1.el6.x86_64.rpm-bundle.tar

3.安装对应的包(必须按照顺序)

 rpm -ivh mysql-community-common-5.7.25-1.el6.x86_64.rpm 

 rpm -ivh mysql-community-libs-5.7.25-1.el6.x86_64.rpm 

 rpm -ivh mysql-community-devel-5.7.25-1.el6.x86_64.rpm 

 rpm -ivh mysql-community-client-5.7.25-1.el6.x86_64.rpm 

 rpm -ivh mysql-community-server-5.7.25-1.el6.x86_64.rpm 

4.启动mysql

 service mysqld start

5.获取mysql初始化密码

grep 'temporary password' /var/log/mysqld.log

6.修改mysql密码

mysqladmin -u root -p password

7.数据库查看编码

mysql>SHOW VARIABLES LIKE '%char%';

外部数据导入新增MySql数据库_第2张图片
发现字符编码有latin1

8.修改/etc/my.cnf (默认在这个目录)

[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8

9.重启mysql

service mysqld restart

修改成功!

最后,赋予任何主机访问数据的权限

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>  Flush privileges;
设计架构

外部数据导入新增MySql数据库_第3张图片

主要函数和功能点
数据库连接测试功能

调用函数TestConn,Bool型,使用MysqlConnection实例化一个新对象进行测试连接,测试连接超时设置为8000毫秒。

SQL执行函数功能

完成函数Query,使用 MysqlCommand进行操作,该对象有影响行数的属性,可以用来判断是否执行成功。使用MysqlDataReader储存返回的结果。因为有大文件的存在,故不设置连接超时。

获取数据库名功能

重写接口函数GetUserSQL

查询表名功能

继承函数GetTables,重写接口函数GetTablesSQL

表内容获取功能

继承函数GetTableContentString和GetTableContent,重写接口函数GetTableContentSQl函数。

表结构获取功能

继承函数GetTableColumnNames,重写接口函数GetColNameByTableSQL。

预览表结构功能

继承函数FillDGVWithTbSchema,重写接口函数GetColNameByTableSQL。

预览表内容功能

继承函数FillDGVWithTbContent,重写接口函数GetTableContentSQL。

算子计算结果生成功能

重写ExecuteSQL函数。使用while循环切换行,for循环切换列来读取query返回的datareader中的数据,手动添加换行符并加入到StringBuilder中,每一行读取完成后都使用writeline写入数据流的缓冲区中一次,在最后一行数据写入缓冲区后调用close方法清除缓冲区并一次性将所有数据写入文件中。 保存文件地址为结果挂件的FilePath属性。

持久化功能

在左侧面板添加数据库连接时调用GenLinkButton函数。通过修改LinkButton的属性来使用mysql的图标。

SQL算子执行SQL语句功能

继承函数FillDGVWithSQL,调用Query函数进行SQL语句执行。

SQL算子一键查询功能

直接沿用原有SQL语句,无需修改

SQL算子结果挂件图表生成

直接读取【算子计算结果生成功能】中生成的运行结果文件,无需再次查询。

代码部分

涉及私密,就不贴出来了,有需求的小伙伴可以一起交流。

总结

由于之前不怎么熟悉数据库导入的一些步骤,比如需要添加MySql.Data.dll连接数据库,还有就是SQL语句对information_schema 数据库的调用,才能实现对表、列、数据库的统一调用。

参考文献
  • linux安装mysql-5.7.25-1.el6.x86_64.rpm-bundle.tar步骤
  • Linux RedHat安装mysql
  • 关于C#连接MySql数据库
  • MySQL 中的 information_schema 数据库

你可能感兴趣的:(c#)