• 隐藏侧边栏
  • 展开分类目录
  • 关注微信公众号
  • 我的GitHub
  • QQ:1753970025
Chen Jiehua

Infobright入门 

目录

Infobright是一个基于MySQL开发的开源数据仓库(Data Warehouse)软件,可作为MySQL的一个存储引擎。

infobright社区版:http://www.infobright.org

优点:

  • 查询性能高:百万、千万、亿级记录数条件下,同等的SELECT查询语句,速度比MyISAM、InnoDB等普通的MySQL存储引擎快5~60倍,测试时,仅用了原来时间的四分之一;
  • 存储数据量大:TB级数据大小,几十亿条记录;
  • 高压缩比:在我使用的项目中为17:1,极大地节省了数据存储空间;
  • 基于列存储:无需建索引,无需分区;
  • 适合复杂的分析性SQL查询:SUM, COUNT, AVG, GROUP BY;

不足:

  • 不支持数据更新:社区版Infobright只能使用“LOAD DATA INFILE”的方式导入数据,不支持INSERT、UPDATE、DELETE;
  • 不支持高并发:只能支持10-18多个并发查询;

安装:

从官网下载infobright的社区版本

$ wget https://www.infobright.org/downloads/ice/infobright-4.0.7-0-x86_64-ice.deb
$ sudo dpkg -i infobright-4.0.7-0-x86_64-ice.deb
# 默认安装在 /usr/local/infobright
$ cd /usr/local/infobright
$ sudo ./postconfig.sh
# 然后会提示是否在线注册,可以选择N
# 配置文件默认在/etc/my-ib.conf,可以根据自己的需要修改配置文件
$ sudo vim /etc/my-ib.conf

启动与停止服务

$ sudo service mysqld-ib start
$ sudo service mysqld-ib stop
$ sudo service mysqld-ib restart
$ sudo service mysqld-ib status

连接infobright

Infobright默认的数据库引擎为Brighthouse,绑定端口为5029; Infobright自身带有mysql-ib,所以即使没有安装mysql也不会影响使用。

# 第一次使用设置密码
$ mysqladmin -uroot -h127.0.0.1 password "root"
$ mysql-ib -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.40 build number (revision)=IB_4.0.7_r16961_17249(ice) (static)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

因为我电脑之前已经安装了MySQL, 所以也可以用mysql来连接Infobright;

默认 `mysql -uroot -p` 连接的是localhost:3306,然而指定了-P 5029之后,还是没法连接上infobright,参考官方文档:

On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a –port or -P option is given to specify a port number. To ensure that the client makes a TCP/IP connection to the local server, use –host or -h to specify a host name value of 127.0.0.1, or the IP address or name of the local server. You can also specify the connection protocol explicitly, even for localhost, by using the –protocol=TCP option.

所以还需要指定-h host参数….

$ mysql -uroot -p -h127.0.0.1 -P5029
mysql>...

设置远程连接

添加用户权限

$ sudo mysql -uroot -p -h127.0.0.1 -P5029
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql>flush privileges;

修改配置文件 /etc/my-ib.conf

$ sudo vim /etc/my-ib.conf
# 在mysqld段添加
bind-address = 0.0.0.0
# 在没有设置skip-name-resolve选项的情况下, 我从其他主机连接时总是提示错误:Lost connection to MySQL Server at 'reading initial communication packet', system error:0
skip-name-resolve
$ sudo service mysqld-ib restart

关于skip-name-resolve

skip-name-resolve的作用是禁用dns解析,因此在mysql的授权表中就不能使用主机名了,只能使用IP 。通过添加”SKIP-NAME-RESOLVE”的参数设置,可以使得客户端在登录服务器的时候不通过主机解析的步骤,直接登陆,以此来提高登录速度。

然而这里使用不当也会造成很大的困扰.

在没有设置该参数的时候,客户端在登陆请求发出后,服务器要解析请求者是谁,经过解析,发现登录者是从另外的电脑登录的,也就是说不是服务器本机, 那么, 服务器会到mysql.user表中去查找是否有这个用户,假设服务器IP是192.168.0.1,而客户机的IP是192.168.0.2;那么查询 的顺序是先找‘root’@’192.168.0.2′这 个user是否存在,若存在,则匹配这个用户登陆,并加载权限列表。若没有该用户,则查找‘root’@’%’这个用户是否存在,若存在,则加载权限列表。

在设置了SKIP-NAME-RESOLVE参数后,客户端的登录请求的解析式同上面一样的,但是在服务器本机的解析过程却发生了改变:服务器会把在本机 登录的用户自动解析为‘root’@’127.0.0.1′; 而不是‘root’@’localhost’;这样 一来就坏了,因为我们在服务器上登录是为了进行一些维护操作,但是显然,‘root’@’127.0.0.1′这个用户是被默认为‘root’@’%’这个用户的,这个用户还没有足够得权限去执行一些超 级管理员‘root’@’localhost’才能 执行的大作。因为未分配权限。

所以结论是:加入你在服务器本机上登录mysql服务器的话,要么先取消SKIP-NAME-RESOLVE的参数设置,重新启动服务器再登陆,设置完成 后,再设置上该参数;要么就给‘root’@’127.0.0.1′分 配超级管理员权限,但这么做显然是不明智的,因为任何人在任何机器上都可以用这个用户执行管理员操作,前提是知道了密码。

(参考:http://lijichao.blog.51cto.com/67487/577610)

创建数据库&表

CREATE DATABASE IF NOT EXISTS `log`  CHARACTER SET utf8 COLLATE utf8_unicode_ci;
USE `log`;

DROP TABLE IF EXISTS `log20151020`;
CREATE TABLE IF NOT EXISTS `log20151020` (
`drt` tinyint(4) NOT NULL DEFAULT '0',
`pid` tinyint(4) NOT NULL DEFAULT '0',
`app` int(11) NOT NULL DEFAULT '0',
`prv` tinyint(4) NOT NULL DEFAULT '0',
`brd` smallint(6) NOT NULL DEFAULT '0',
`tc` tinyint(4) NOT NULL DEFAULT '0',
`apn` tinyint(4) NOT NULL DEFAULT '0',
`count` int(11) NOT NULL DEFAULT '0'
) ENGINE=brighthouse CHARSET=utf8 COLLATE=utf8_unicode_ci;

查看数据占用空间

相应的数据均可以在information_schema数据库中找到

$  mysql -uroot -p -h127.0.0.1 -P5029
mysql> select table_name, table_rows, data_length from information_schema.tables where table_schema='log';
+-------------+------------+-------------+
| table_name  | table_rows | data_length |
+-------------+------------+-------------+
| log20151014 |    1703841 |     2738585 |
| log20151015 |    1716874 |     2754729 |
| log20151016 |    1800415 |     2851225 |
| log20151017 |    2060787 |     3249786 |
| log20151018 |    2005249 |     3183324 |
| log20151019 |    1692868 |     2692864 |
+-------------+------------+-------------+
6 rows in set (0.00 sec)

其中:table_rows是数据表的行数,data_length是表的大小,单位:字节。

码字很辛苦,转载请注明来自ChenJiehua《Infobright入门》

评论