在centos环境下编译安装myrocksdb
rocksdb()是脸书(facebook)公司开源的一个key-value存储引擎,基于leveldb开发。rocksdb使用的是lsm存储引擎,纯c++编写。rocksdb具有很好的读写性能。但是rocksdb的实际操作需要很好的阅读rocksdb api文档,很多实现要自己编写代码来执行,还要考虑诸如线程安全等问题。myrocks是rocksdb和mysql结合的结果,它将mysql的innodb引擎替换为rocksdb引擎,剥离实际操作底层rocksdb的方式,通过熟悉的操作mysql的方式进行数据库的连接、数据的存储读取等操作,方便很多。
参考页面
1. 执行前两步安装必要的包
sudo yum install cmake gcc-c++ bzip2-devel libaio-devel bison \ zlib-devel snappy-devel sudo yum install gflags-devel readline-devel ncurses-devel \ openssl-devel lz4-devel gdb git
2. 下载facebook的mysql-5.6源码包
初始化init和更新submodule因为很耗时间,我采用在本地(windows)下载和执行。
git clone https://github.com/facebook/mysql-5.6.git cd mysql-5.6 git submodule init git submodule update
执行过后将这些文件上传至centos,我设置的接收目录是/usr/local/myrocksdb。
3. 处理dos文件(*)
如果上一步都在linux中执行,则可以忽略这一步。
这一步执行的原因是git在windows上执行上一步的一系列操作之后,执行/产生的文件是dos文件格式,和centos 的unix文件格式存在不同,不执行的话,会出现一系列未知错误。
通过如下命令对mysql-5.6中的所有文件进行转码:
cd /usr/local/myrocksdb/mysql-5.6 find . -type f -exec dos2unix {} \;
如果不存在dos2unix命令,执行:
yum install –y dos2unix
4. 安装zstd
zstd是zstandard数据压缩工具,由facebook开发。该工具如果不安装,执行第14步时会提示缺少zstd的问题。
参考页面:
执行如下几步:
cd /usr/local git clone https://github.com/facebook/zstd.git cd zstd make sudo make install
编译和安装(make install)后的zstd文件产生的文件在 /usr/local/lib 下,我们需要将该目录下的文件拷贝至 /usr/lib64 目录下。
cd /usr/local/lib cp * /usr/lib64
5. 下载googletest-release-1.8.0.zip文件
到 页面下下载googletest-release-1.8.0.zip文件。
将该文件存放到如下目录,
/usr/local/myrocksdb/mysql-5.6/source_downloads/
6. 安装boost
boost是c++的标准库,编译过程中会用到。
yum install boost yum install boost-devel yum install boost-doc
7. 执行make操作
7.1. cmake操作
在 /usr/local/myrocksdb/mysql-5.6 目录下执行,
cmake . -dcmake_build_type=relwithdebinfo -dwith_ssl=system \ -dwith_zlib=bundled -dmysql_maintainer_mode=0 -denabled_local_infile=1 \ -denable_dtrace=0 -dcmake_cxx_flags="-march=native"
出现如下结果表示执行成功。
7.2. make操作
make -j8
这一步要求centos环境至少要有3g的内存,而且执行时间很长,出现以下结果表示执行成功。
8. 添加压缩软件库(*)
这一步没怎么看明白,也可以不执行。
# assume libsnappy.a is located at /usr/lib/ export with_snappy=/usr cmake ... make ...
9. 执行mtr 测试(*)
这一步是对mysql数据库做一个测试,也可以不执行。
cd mysql-test ./mysql-test-run.pl --mem --async-client --parallel=16 --fast \ --max-test-fail=1000 --retry=0 --force --mysqld=--rocksdb \ --mysqld=--default-storage-engine=rocksdb --mysqld=--skip-innodb \ --mysqld=--default-tmp-storage-engine=myisam --suite=rocksdb
出现如下结果,表示mtr测试执行完毕。
10. 安装linkbench(*)
linkbench是对mysql进行性能测试的一个工具,这里可以不安装。
确保安装jdk 和maven,如果没有要安装上,如下,
sudo apt-get install openjdk-7-jdk maven git clone https://github.com/facebook/linkbench.git cd linkbench; mvn clean package -p fast-test
出现如下结果表示执行成功。
11. 安装mysql数据库
执行以下命令安装数据库。
make install
出现以下结果表示执行安装完成。
成功之后会在 /usr/local/ 目录下生成 /mysql 文件,这个就是我们熟知的mysql安装目录。
12.创建mysql用户并赋权
useradd -d /home/mysql -m mysql
将mysql目录的权限赋给mysql用户。
cd /usr/localchown -r mysql:mysql mysql
13. 创建my.cnf文件
对mysql的配置文件 /etc/my.cnf 填入以下内容。
[client] default-character-set=utf8 [mysqld] #skip-grant-tables character_set_server=utf8 basedir=/usr/local/mysql datadir=/usr/local/mysql/data user=mysql port=3306 default_authentication_plugin=mysql_native_password rocksdb default-storage-engine=rocksdb skip-innodb default-tmp-storage-engine=myisam collation-server=utf8_bin log-bin binlog-format=row
14. 初始化数据库服务
cd /usr/local/mysql/scripts ./mysql_install_db --user=mysql --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
出现如下结果表示执行成功。
15. 启动数据库服务
切换到 /usr/local/mysql/bin 目录下,执行mysql服务的启动。
cd /usr/local/mysql/bin ./mysqld_safe --defaults-file=/usr/local/mysql/my.cnf &
通过 ps -ef | grep mysql 命令查看,出现mysql的启动进程表示启动成功。
16. mysql的登录和赋权。
在 /usr/local/mysql/bin 目录下,执行,
use mysql; insert into mysql.user(host,user,password) values ("%","root",password("123456")); grant all privileges on *.* to root@'%' identified by '123456'; flush privileges;
17.开放防火墙端口
这里防火墙是cetos默认的firewall防火墙。
打开设置的端口,重启防火墙。
firewall-cmd --zone=public --add-port=3306/tcp --permanent systemctl restart firewalld.service
18. 尝试创建库和表
创建数据库
create database myrocks;
创建表
create table `linktable` ( `id1` bigint(20) unsigned not null default '0', `id1_type` int(10) unsigned not null default '0', `id2` bigint(20) unsigned not null default '0', `id2_type` int(10) unsigned not null default '0', `link_type` bigint(20) unsigned not null default '0', `visibility` tinyint(3) not null default '0', `data` varchar(255) not null default '', `time` bigint(20) unsigned not null default '0', `version` int(11) unsigned not null default '0', primary key (link_type, `id1`,`id2`) comment 'cf_link_pk', key `id1_type` (`id1`,`link_type`,`visibility`,`time`,`version`,`data`) comment 'rev:cf_link_id1_type' ) engine=rocksdb default collate=utf8_bin;
推荐阅读
-
nginx 0.8.54/1.0.0 在cygwin环境下的编译(包括 nginx_mod_h264_streaming-2.2.7)
-
在CentOS 7下安装Redis和MongoDB教程
-
在lnmp环境中的nginx编译安装
-
Qt最新版5.12.2在Win10环境静态编译安装和部署的完整过程(VS2017)
-
CentOS6.5 编译安装lnmp环境
-
CentOS 6.4系统下编译安装LNMP和配置PHP环境具体步骤
-
JavaWeb入门——在Windows环境下安装Tomcat服务器
-
在centos下安装rar解压.rar压缩包
-
Linux+php+apache+oracle环境搭建之CentOS下安装Oracle数据库
-
centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)