YCSB and TPC-C on MySQL(避免重复load)

一、编译安装MySQL

下载mysql5.7.28源码

https://downloads.mysql.com/archives/community/

Select Operating System 选择 Source Code

Select OS version 选择 All Operating Systems

选择带有boost的版本

安装系统包

bash 复制代码
apt -y install make cmake gcc g++ perl bison libaio-dev libncurses5 libncurses5-dev libnuma-dev libssl-dev

这里可能需要安装低版本的openssl

1、下载源码包:

bash 复制代码
wget http://www.openssl.org/source/openssl-1.1.0g.tar.gz   

2、安装到/usr/local/ssl/目录下:

bash 复制代码
tar zxvf openssl-1.1.0g.tar.gz    

cd openssl-1.1.0g

./config --prefix=/usr/local/ssl 

这里可能报错:

在 Configure文件和 test/build.info这个文件

bash 复制代码
 use if $^O ne "VMS", 'File::Glob' => qw/glob/;

改成

bash 复制代码
 use if $^O ne "VMS", 'File::Glob' => qw/:glob/;
bash 复制代码
make -j8
make install -j8 

mv -f /usr/bin/openssl /usr/bin/openssl.old

mv -f /usr/include/openssl /usr/include/openssl.old

ln  -s /usr/local/ssl/bin/openssl /usr/bin/openssl    #修改软链,指向新版本的openssl路径

ln -s /usr/local/ssl/include/openssl /usr/include/openssl

echo "/usr/local/ssl/lib">>/etc/ld.so.conf 

#添加so库的路径,添加完成之后,运行ldconfig ,将新增的so 文件缓存到/etc/ld.so.cache中;

ldconfig -v    

openssl version -a   #确认版本是否为1.1.0g

添加mysql用户

bash 复制代码
groupadd mysql
useradd -r -g mysql mysql

预制一些目录

bash 复制代码
mkdir -p /mnt/install  # 存放安装后的软件
mkdir -p /mnt/data  # 存放数据
mkdir -p /mnt/log  # 存放日志
chown -R mysql:mysql /mnt

解压

bash 复制代码
tar -zxf mysql-boost-5.7.28.tar.gz

预编译

bash 复制代码
cmake -DMYSQL_UNIX_ADDR=/mnt/install -DMYSQL_UNIX_ADDR=/mnt/install/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1  -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/mnt/data -DMYSQL_TCP_PORT=3306  -DWITH_BOOST=boost -DWITH_SSL=/usr/local/ssl
# cmake -DMYSQL_UNIX_ADDR=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1  -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/mnt/data -DMYSQL_TCP_PORT=3306  -DWITH_BOOST=boost -DWITH_SSL=/usr/local/ssl

编译参数的参考文档:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html

编译

bash 复制代码
make -j8

安装

指定安装目录

bash 复制代码
vim cmake_install.cmake

修改AKE_INSTALL_PREFIX "/mnt/install"为目标目录

bash 复制代码
make install -j8

修改安装目录的所有者和所属组

bash 复制代码
chown -R mysql:mysql /mnt

初始化,生成一个临时的mysql root用户密码

bash 复制代码
/mnt/install/bin/mysqld --initialize --user=mysql
# /usr/local/mysql/bin/mysqld --initialize --user=mysql

打印初始密码:A temporary password is generated for root@localhost: Br-)u/%:=2:9

这个密码也会写入 /root/.mysql_secret中

启动mysql,修改root密码为123456

bash 复制代码
/mnt/install/support-files/mysql.server start # 启动后,按回车回到命令行 /usr/local/mysql/support-files/mysql.server start
/mnt/install/bin/mysql -u root -p  #/usr/local/mysql/bin/mysql -u root -p
Enter Password: # 这里输入刚才生成的密码
mysql> set password for root@localhost = password('123456');

这里可能会报错mysql.server: 259: cd: can't cd to /usr/local/mysql

解决方案:

修改 /mnt/install/support-files/mysql.server,将文件中的datadir和basedir路径配置成自定义的路径 即basedir=/mnt/install datadir=/mnt/data

目前不太方便,系统没有mysql这个命令

先停止mysql

bash 复制代码
/mnt/install/support-files/mysql.server stop
# /usr/local/mysql/support-files/mysql.server stop

启动mysql服务,注册成systemd服务

bash 复制代码
cp /mnt/install/support-files/mysql.server /etc/init.d/mysqld # cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
/etc/init.d/mysqld start # 这一步自动注册成systemd服务了,可以使用systemctl管理mysql了
chmod +x /etc/init.d/mysqld
systemctl stop mysqld
systemctl start mysqld

添加mysql、mysqldump、mysqlpump等一系列命令

bash 复制代码
vim /etc/profile

文件末尾追加

bash 复制代码
PATH=$PATH:/mnt/install/bin
# PATH=$PATH:/usr/local/mysql/bin

验证mysql命令

bash 复制代码
source /etc/profile
mysql -u root -p 
Enter password: 123456

修改配置文件

复制代码
vim /etc/mysql/my.cnf

修改为

bash 复制代码
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
innodb_flush_log_at_trx_commit=1
innodb_flush_method=fsync
!includedir /etc/mysql/conf.d/

重启服务

bash 复制代码
systemctl stop mysqld
systemctl start mysqld

二、YCSB-jdbc

下载打包好的YCSB

bash 复制代码
curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz
tar xfvz ycsb-0.17.0.tar.gz
cd ycsb-0.17.0

安装java

bash 复制代码
sudo apt install openjdk-8-jdk -y

基于mysql版本下载

我的是5.7的用的mysql-connector-java-5.1.38-bin.jar

修改ycsb配置

bash 复制代码
vim ycsb-0.17.0/jdbc-binding/conf/db.properties
bash 复制代码
db.driver=com.mysql.jdbc.Driver
# jdbc.fetchsize=20
db.url=jdbc:mysql://127.0.0.1:3306/ycsb?useSSL=false
db.user=root
db.passwd=123456

安装python2

bash 复制代码
sudo apt install python2
#设置软连接
ln -s  /usr/bin/python2  /usr/bin/python

三、运行YCSB on MySQL

创建数据库

bash 复制代码
mysql -u root -p
CREATE DATABASE ycsb;
USE ycsb;
CREATE TABLE usertable (YCSB_KEY VARCHAR(255) PRIMARY KEY, FIELD0 TEXT, FIELD1 TEXT, FIELD2 TEXT, FIELD3 TEXT, FIELD4 TEXT, FIELD5 TEXT, FIELD6 TEXT, FIELD7 TEXT, FIELD8 TEXT, FIELD9 TEXT);

load数据

bash 复制代码
bin/ycsb load jdbc -P workloads/workloada -P ./jdbc-binding/conf/db.properties -cp ./jdbc-binding/lib/mysql-connector-java-5.1.38-bin.jar

可能会报错,jdk问题:Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate

解决办法:

bash 复制代码
cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-1.el8_3.x86_64/jre/lib/security    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-1.el8_3.x86_64/jre/lib/security.bak
vim /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-1.el8_3.x86_64/jre/lib/security

删除SSLv3, TLSv1, TLSv1.1

复制data目录

为了方便后续测试不再重新load,可以选择将/mnt/data目录copy到其他地方做备份,

当重新测试时, 先关闭mysql

bash 复制代码
sudo systemctl stop mysqld

删除/mnt/data/

然后复制回之前的版本,并修改所属者

bash 复制代码
sudo chown -R mysql:mysql /mnt/data

然后重启mysql

bash 复制代码
sudo systemctl start mysqld

run测试

bash 复制代码
bin/ycsb run jdbc -P workloads/workloada -P ./jdbc-binding/conf/db.properties -cp ./jdbc-binding/lib/mysql-connector-java-5.1.38-bin.jar

如果要更换数据集,重建表即可

bash 复制代码
mysql -u root -p
mysql > drop database ycsb;
mysql > create database ycsb;
mysql > USE ycsb;
mysql > CREATE TABLE usertable (YCSB_KEY VARCHAR(255) PRIMARY KEY, FIELD0 TEXT, FIELD1 TEXT, FIELD2 TEXT, FIELD3 TEXT, FIELD4 TEXT, FIELD5 TEXT, FIELD6 TEXT, FIELD7 TEXT, FIELD8 TEXT, FIELD9 TEXT);

四、TPCC安装

下载源码

bash 复制代码
git clone https://github.com/Percona-Lab/tpcc-mysql.git
cd tpcc-mysql/src/

编译

bash 复制代码
sudo apt-get install libmysqlclient-dev
make

五、运行TPC-C on MySQL

配置数据库

bash 复制代码
cd ..
mysql -u root -p
mysql > create database tpcc1000
mysql > exit

也可以运行mysqladmin来创建数据库:

bash 复制代码
mysqladmin create tpcc1000

可能的问题:sudo: mysqladmin: command not found

解决办法:

直接输入命令mysql或mysqladmin会发现提示命令不存在,这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。

首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/usr/local/mysql/bin/mysql,我们则可以这样执行命令:

bash 复制代码
ln -s /usr/local/mysql/bin/mysql /usr/bin
ln -s /usr/local/mysql/bin/mysqladmin /usr/bin

当提示mysqldump: command not found时同样可以通过此方法来解决。

bash 复制代码
#设置表
mysql -u root -p tpcc1000 < create_table.sql
mysql -u root -p tpcc1000 < add_fkey_idx.sql

load 数据

bash 复制代码
./tpcc_load -h 127.0.0.1 -P 3306 -d tpcc1000 -u root -p "123456" -w 10

复制data目录

为了方便后续测试不再重新load,可以选择将/mnt/data目录copy到其他地方做备份,

当重新测试时, 先关闭mysql

bash 复制代码
sudo systemctl stop mysqld

删除/mnt/data/

然后复制回之前的版本,并修改所属者

bash 复制代码
sudo chown -R mysql:mysql /mnt/data

然后重启mysql

bash 复制代码
sudo systemctl start mysqld

run测试

bash 复制代码
./tpcc_start -h 127.0.0.1 -P 3306 -d tpcc1000 -u root -p "123456" -w 10 -c 4 -r 10 -l 100

如果要更换数据集,重建表即可

bash 复制代码
mysql -u root -p
mysql > drop database tpcc1000;
相关推荐
JSON_L4 分钟前
Fastadmin中实现敏感词管理
数据库·php·fastadmin
不是起点的终点1 小时前
【实战】Python 一键生成数据库说明文档(对接阿里云百炼 AI,输出 Word 格式)
数据库·python·阿里云
2301_813599553 小时前
Go语言怎么做秒杀系统_Go语言秒杀系统实战教程【实用】
jvm·数据库·python
NCIN EXPE8 小时前
redis 使用
数据库·redis·缓存
MongoDB 数据平台8 小时前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
极客on之路8 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家8 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE8 小时前
开启mysql的binlog日志
数据库·mysql
yejqvow128 小时前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
oLLI PILO8 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库