由于clickhouse的发布比较频繁,目前版本为20.7 尚未支持与mysql同步,故编译了git上最新的版本 20200909--版本号为20.9。
环境信息
代码语言:javascript复制系统版本:Red Hat Enterprise Linux Server release 7.7 (Maipo)
uname -a:3.10.0-1062.el7.x86_64服务器配置:32c 250g 1T(使用8c16g虚拟机编译失败,原因为内存不足导致编译进程OOM)
mysql版本:8.0.19
gcc版本:9.3.0
cmake版本:3.14.5
ninja版本:1.9.0
一.安装前检查
代码语言:javascript复制grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
二.安装依赖包
代码语言:javascript复制yum install git cmake ninja-build libicu-devel clang libicu-devel readline-devel mysql-devel openssl-devel unixODBC_devel bzip2 -y
三.源码获取
代码语言:javascript复制git clone --recursive https://github.com/ClickHouse/ClickHouse
四.安装高版本 gcc
- 下载安装包
ftp://gnu.mirror.iweb.com/gcc/gcc-9.3.0/gcc-9.3.0.tar.xz
- 解压
tar xvf gcc-9.3.0.tar.xz
- 安装
cd gcc-9.3.0
./contrib/download_prerequisites
此步骤会下载依赖包,如无无法连接外网可通过链接下载
代码语言:javascript复制链接:https://pan.baidu.com/s/1JHv1WAS43S89LXA6PkevTg 提取码:nb35
包名如下
代码语言:javascript复制gmp-6.1.0.tar.bz2mpfr-3.1.4.tar.bz2
mpc-1.0.3.tar.gzisl-0.18.tar.bz2
使用方式: 将包cp到gcc-9.3.0目录下即可
然后执行
代码语言:javascript复制./contrib/download_prerequisites ---与上一步相同无需重复执行
mkdir build
cd build../configure --prefix=/opt/gcc9 --enable-languages=c,c --disable-multilib
export THREADS=$(grep -c ^processor /proc/cpuinfo)
make -j $THREADS
make install
编译所需时间较长=。=
- 后续操作 由于gcc 升级之后会造成类似如下报错
ninja: /lib64/libstdc .so.6: version `GLIBCXX_3.4.21' not found (required by ninja)
解决办法如下
代码语言:javascript复制find / -name "libstdc .so.6*"
找到系统中版本最高的gcc目录,例如此前的安装目录
代码语言:javascript复制/opt/gcc9/lib64/libstdc .so.6.0.28
/opt/gcc9/lib64/libstdc .so.6
/opt/gcc9/lib64/libstdc .so.6.0.28-gdb.py
备份报错的 libstdc .so
代码语言:javascript复制mv /lib64/libstdc .so.6 /lib64/libstdc .so.6_bak
将高版本的libstdc 复制到/lib64目录下
代码语言:javascript复制cp /opt/gcc9/lib64/libstdc .so.6 /lib64/libstdc .so.6
ln -s /opt/gcc9/lib64/libstdc .so.6.0.28 /lib64/libstdc .so.6 ----(一般执行上一步就可以了)
验证
代码语言:javascript复制[root@mini test]# ./ninja --version
1.9.0
五.安装cmake 3版本
安装cmake 3,保留替换系统默认的 准备软件
代码语言:javascript复制wget https://cmake.org/files/v3.14/cmake-3.14.5-Linux-x86_64.tar.gz
tar zxvf cmake-3.14.5-Linux-x86_64.tar.gz -C /opt
ln -s cmake-3.14.5-Linux-x86_64 cmake
添加环境变量
代码语言:javascript复制vim /etc/profile
export CMAKE_HOME=/opt/cmake
export PATH=$CMAKE_HOME/bin:$PATH
source /etc/profile
验证
代码语言:javascript复制[root@mini test]# cmake --version
cmake version 3.14.5
CMake suite maintained and supported by Kitware (kitware.com/cmake).
六.安装ninja-1.9.0
下载
代码语言:javascript复制wget https://github.com/ninja-build/ninja/releases/download/v1.9.0/ninja-linux.zip
unzip ninja-linux.zip -d /usr/local/bin/
添加环境变量
测试版本:
代码语言:javascript复制# ninja --version
1.9.0
报错处理:
代码语言:javascript复制[root@mini test]# ./ninja
./ninja: /lib64/libstdc .so.6: version `GLIBCXX_3.4.21' not found (required by ./ninja)
./ninja: /lib64/libstdc .so.6: version `GLIBCXX_3.4.20' not found (required by ./ninja)
处理方法见:gcc 9.3.0编译安装
七.源码安装Clickhouse
代码语言:javascript复制cd ClickHouse
mkdir build
cd build
export CC=gcc-9
export CXX=g -9
cmake ..ninja
该过程耗时大概3小时
安装成功后,将clickhouse命令以及参数文件拷贝到指定目录
代码语言:javascript复制mkdir -p /usr/local/clickhouse/etccd /tools/ClickHouse/programs/server ---其中/tools/ClickHouse 为clickhouse git文件根目录
cp config.xml /usr/local/clickhouse/etc
cp users.xml /usr/local/clickhouse/etc
将clickhouse执行文件copy 到/usr/local/clickhouse/bin
代码语言:javascript复制mkdir -p /usr/local/clickhouse/bin
cp /tools/ClickHouse/build/programs/clickhouse /usr/local/clickhouse/bin
配置环境变量
代码语言:javascript复制vim /etc/profile添加:/usr/local/clickhouse/bin
source /etc/profiel
启动clickhouse-server,注意启动之前设置配置文件中PATH目录(clickhouse数据目录 并给对应目录赋权)
代码语言:javascript复制nohup clickhouse server --config-file=/usr/local/clickhouse/etc/config.xml > /tmp/clickhouse.log 2>&1 &
启动客户端
代码语言:javascript复制clickhouse client
输出:
代码语言:javascript复制ClickHouse client version 20.9.1.1.
Connecting to localhost:9000 as user default.
to ClickHouse server version 20.9.1 revision 54439.
XXXXXXXX :)
至此clickhouse编译安装完成,以下为搭建mysql复制过程
准备一套与clickhouse服务器网络通畅的mysql,本文使用的MySQL版本为8.0.19
一.创建复制用户(需要的最小权限未测试)
代码语言:javascript复制mysql> create user clickhouse@'%' identified WITH mysql_native_password by 'rpl_user';
mysql> grant ALL PRIVILEGES on *.* to clickhouse@'%';
二.调整clickhouse参数
代码语言:javascript复制clickhouse :) SET allow_experimental_database_materialize_mysql=1;
clickhouse创建复制(目前以 database 为单位进行复制,不同的 database 可以来自不同的 MySQL master,这样就可以实现多个 MySQL 源数据同步到一个 ClickHouse 做 OLAP 分析功能。)
代码语言:javascript复制CREATE DATABASE sbtest ENGINE = MaterializeMySQL(
'MYSQL_IP:MYSQL_PORT', 'DATABASE_NAME', 'USER_NAME', 'PASSWORD');
CREATE DATABASE sbtest ENGINE = MaterializeMySQL(
'XXXXXXXX:3306', 'clickhouse', 'clickhous', 'rpl_user');
如报错
代码语言:javascript复制Received exception from server (version 20.9.1):Code: 537. DB::Exception: Received from localhost:9000. DB::Exception: Illegal MySQL variables, the MaterializeMySQL engine requires default_authentication_plugin='mysql_native_password'.
在MYSQL端调整改参数并重启(read_only参数)default_authentication_plugin='mysql_native_password'
三.创建数据库和表,并写入数据
代码语言:javascript复制mysql> create database clickhouse;
mysql> use clickhouse;mysql> CREATE TABLE `sbtest1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k_1` (`k`))
ENGINE = InnoDB AUTO_INCREMENT = 5000001 DEFAULT CHARSET = utf8mb4 MAX_ROWS = 1000000;
mysql> INSERT INTO `sbtest1` VALUES (1,49929,...; ---sysbench数据
clickhouse> use sbtest;
clickhouse> show tables;SHOW TABLES
┌─name────┐
│ sbtest1 │
└─────────┘
1 rows in set. Elapsed: 0.002 sec.
clickhouse>select * from sbtest1;
SELECT *
FROM sbtest1
┌─id─┬─────k─┬─c───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─pad─────────────────────────────────────────────────────────┐
│ 12 │ 48776 │ 06636928111-91412549319-87017689961-79500497523-29051692073-64380774874-78643769852-73373361096-34215043106-34370178281 │ 89292458800-98111883088-45119613990-18776802947-72334127545 │
.......略
20 rows in set. Elapsed: 0.004 sec.
查看同步位点
看下 ClickHouse 的同步位点
代码语言:javascript复制cat /var/lib/clickhouse/metadata/clickhouse/.metadata
Version: 2
Binlog File: bin.000004
Executed GTID: 45b22def-f329-11ea-acf1-3497f600d5bb:1-69:1000068
Binlog Position: 10006
至此slave搭建成功。
| 作者简介
赵梓州 | 现职于甜橙金融(中国电信翼支付),数据库工程师。
主要负责 MySQL、Redis、MongoDB、TIDB等相关开源数据库运维工作。
喜欢学习分享技术,和大家共同提高!
全文完。
Enjoy ClickHouse :)