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;
相关推荐
我要升天!3 小时前
QT-- 理解项目文件
开发语言·数据库·qt
冉冰学姐4 小时前
SSM基于WEB的教学质量评价系统的设计与实现p9ak6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架·教学质量评价·多角色管理、
liliangcsdn4 小时前
sql中left join和inner join的区别
数据库·sql
l1t4 小时前
DeepSeek辅助编写转换DuckDB json格式执行计划到PostgreSQL格式的Python程序
数据库·python·postgresql·json·执行计划
TDengine (老段)4 小时前
TDengine 字符串函数 LIKE_IN_SET 用户手册
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
星光一影4 小时前
Java版社交系统/聊天系统/im/即时通信/社交通讯
java·spring boot·mysql·交友
q***82914 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
q***31894 小时前
数据库操作与数据管理——Rust 与 SQLite 的集成
数据库·rust·sqlite
元亓亓亓5 小时前
考研408--操作系统--day4--进程同步&互斥&信息量机制
java·数据库·考研·操作系统·408
武子康5 小时前
Java-169 Neo4j CQL 实战速查:字符串/聚合/关系与多跳查询
java·开发语言·数据库·python·sql·nosql·neo4j