• 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的版本
    在这里插入图片描述

    安装系统包

    apt -y install make cmake gcc g++ perl bison libaio-dev libncurses5 libncurses5-dev libnuma-dev libssl-dev
    
    • 1

    这里可能需要安装低版本的openssl
    1、下载源码包:

    wget http://www.openssl.org/source/openssl-1.1.0g.tar.gz   
    
    • 1

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

    tar zxvf openssl-1.1.0g.tar.gz    
    
    cd openssl-1.1.0g
    
    ./config --prefix=/usr/local/ssl 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这里可能报错:
    在 Configure文件和 test/build.info这个文件

     use if $^O ne "VMS", 'File::Glob' => qw/glob/;
    
    • 1

    改成

     use if $^O ne "VMS", 'File::Glob' => qw/:glob/;
    
    • 1
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    添加mysql用户

    groupadd mysql
    useradd -r -g mysql mysql
    
    • 1
    • 2

    预制一些目录

    mkdir -p /mnt/install  # 存放安装后的软件
    mkdir -p /mnt/data  # 存放数据
    mkdir -p /mnt/log  # 存放日志
    chown -R mysql:mysql /mnt
    
    • 1
    • 2
    • 3
    • 4

    解压

    tar -zxf mysql-boost-5.7.28.tar.gz
    
    • 1

    预编译

    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
    
    • 1
    • 2

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

    编译

    make -j8
    
    • 1

    安装

    指定安装目录

    vim cmake_install.cmake
    
    • 1

    修改AKE_INSTALL_PREFIX "/mnt/install"为目标目录
    在这里插入图片描述

    make install -j8
    
    • 1

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

    chown -R mysql:mysql /mnt
    
    • 1

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

    /mnt/install/bin/mysqld --initialize --user=mysql
    # /usr/local/mysql/bin/mysqld --initialize --user=mysql
    
    • 1
    • 2

    打印初始密码:A temporary password is generated for root@localhost: Br-)u/%:=2:9
    这个密码也会写入 /root/.mysql_secret中

    启动mysql,修改root密码为123456

    /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');
    
    • 1
    • 2
    • 3
    • 4

    这里可能会报错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

    /mnt/install/support-files/mysql.server stop
    # /usr/local/mysql/support-files/mysql.server stop
    
    • 1
    • 2

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    vim /etc/profile
    
    • 1

    文件末尾追加

    PATH=$PATH:/mnt/install/bin
    # PATH=$PATH:/usr/local/mysql/bin
    
    • 1
    • 2

    验证mysql命令

    source /etc/profile
    mysql -u root -p 
    Enter password: 123456
    
    • 1
    • 2
    • 3

    修改配置文件

    vim /etc/mysql/my.cnf
    
    • 1

    修改为

    [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/
    
    • 1
    • 2
    • 3
    • 4
    • 5

    重启服务

    systemctl stop mysqld
    systemctl start mysqld
    
    • 1
    • 2

    二、YCSB-jdbc

    下载打包好的YCSB

    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
    
    • 1
    • 2
    • 3

    安装java

    sudo apt install openjdk-8-jdk -y
    
    • 1

    基于mysql版本下载

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

    修改ycsb配置

    vim ycsb-0.17.0/jdbc-binding/conf/db.properties
    
    • 1
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    安装python2

    sudo apt install python2
    #设置软连接
    ln -s  /usr/bin/python2  /usr/bin/python
    
    • 1
    • 2
    • 3

    三、运行YCSB on MySQL

    创建数据库

    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);
    
    • 1
    • 2
    • 3
    • 4

    load数据

    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
    
    • 1

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

    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
    
    • 1
    • 2

    删除SSLv3, TLSv1, TLSv1.1
    在这里插入图片描述

    复制data目录

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

    sudo systemctl stop mysqld
    
    • 1

    删除/mnt/data/
    然后复制回之前的版本,并修改所属者

    sudo chown -R mysql:mysql /mnt/data
    
    • 1

    然后重启mysql

    sudo systemctl start mysqld
    
    • 1

    run测试

    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
    
    • 1

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

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    四、TPCC安装

    下载源码

    git clone https://github.com/Percona-Lab/tpcc-mysql.git
    cd tpcc-mysql/src/
    
    • 1
    • 2

    编译

    sudo apt-get install libmysqlclient-dev
    make
    
    • 1
    • 2

    五、运行TPC-C on MySQL

    配置数据库

    cd ..
    mysql -u root -p
    mysql > create database tpcc1000
    mysql > exit
    
    • 1
    • 2
    • 3
    • 4

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

    mysqladmin create tpcc1000
    
    • 1

    可能的问题:sudo: mysqladmin: command not found
    解决办法:
    直接输入命令mysql或mysqladmin会发现提示命令不存在,这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。
    首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/usr/local/mysql/bin/mysql,我们则可以这样执行命令:

    ln -s /usr/local/mysql/bin/mysql /usr/bin
    ln -s /usr/local/mysql/bin/mysqladmin /usr/bin
    
    • 1
    • 2

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

    #设置表
    mysql -u root -p tpcc1000 < create_table.sql
    mysql -u root -p tpcc1000 < add_fkey_idx.sql
    
    • 1
    • 2
    • 3

    load 数据

    ./tpcc_load -h 127.0.0.1 -P 3306 -d tpcc1000 -u root -p "123456" -w 10
    
    • 1

    复制data目录

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

    sudo systemctl stop mysqld
    
    • 1

    删除/mnt/data/
    然后复制回之前的版本,并修改所属者

    sudo chown -R mysql:mysql /mnt/data
    
    • 1

    然后重启mysql

    sudo systemctl start mysqld
    
    • 1

    run测试

    ./tpcc_start -h 127.0.0.1 -P 3306 -d tpcc1000 -u root -p "123456" -w 10 -c 4 -r 10 -l 100
    
    • 1

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

    mysql -u root -p
    mysql > drop database tpcc1000;
    
    • 1
    • 2
  • 相关阅读:
    java八股文面试[JVM]——什么情况下会抛出OOM
    数据结构实验6 :图的存储与遍历(邻接矩阵的深度优先遍历DFS和邻接表的广度优先遍历BFS)
    应广单片机使用IHRC校准ILRC--附带产物随机数产生器
    ES语法以及ajax相关操作
    Gateway服务网关
    递归是会更秀strtok
    MATLAB table数据结构 首篇
    【Java面试】离谱!面试官竟想用分布式和微服务干掉大批面试者,结果遇到面试八股文大师后......
    好的详细设计文档是可以降本增效的
    Android官方推荐 无需向应用授予的照片选择器工具
  • 原文地址:https://blog.csdn.net/wenj12/article/details/133934475