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;
相关推荐
阿里小阿希5 小时前
Vue3 + Element Plus 项目中日期时间处理的最佳实践与数据库设计规范
数据库·设计规范
且行志悠5 小时前
Mysql的使用
mysql
白鹭5 小时前
MySQL源码部署(rhel7)
数据库·mysql
666和7776 小时前
Struts2 工作总结
java·数据库
还听珊瑚海吗6 小时前
SpringMVC(一)
数据库
星期天要睡觉7 小时前
MySQL 综合练习
数据库·mysql
Y4090017 小时前
数据库基础知识——聚合函数、分组查询
android·数据库
JosieBook8 小时前
【数据库】MySQL 数据库创建存储过程及使用场景详解
数据库·mysql