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;
相关推荐
qq_5298353527 分钟前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New3 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6753 小时前
数据库基础1
数据库
我爱松子鱼3 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo3 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser4 小时前
【SQL】多表查询案例
数据库·sql
Galeoto4 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)5 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231115 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白5 小时前
PostgreSQL:更新字段慢
数据库·postgresql