主机名 | ip | 必装软件 | 功能 | 举例用户 | 密码 | 操作系统 | Python版本 |
---|---|---|---|---|---|---|---|
CDBTune1 | 192.168.110.10 | sysbench1.0 | 网络训练,主动压测 | cheng | 123456 | Ubuntu16.04 | 2.7 |
CDBTune2 | 192.168.110.11 | mysql5.6 | 数据库服务器 | cheng | 123456 | Ubuntu16.04 | 2.7 |
-
将训练模型的项目AutoTuner放至两台服务器的用户cheng的home目录下,即目录为:/home/cheng/AutoTuner(项目名称请保持AutoTuner不变)。
-
在CDBTune1安装sysbench1.0,安装方法参考:Ubuntu安装sysbench1.0。
-
在CDBTune2安装mysql5.6(注意版本,是5.6!!!),root初始密码设置为123456。安装完成后,使用命令 sudo service mysql start 开启mysql服务。
如何彻底删除mysql参考:Ubuntu16.04彻底删除mysql
如何安装mysql5.6参考:Ubuntu安装mysql5.6
-
在CDBTune2上登录mysql,创建一个database,名为sbtest(名字可以随便取,只不过需要修改源码中的两个脚本的数据库名)。
-
给mysql的root用户开启远程访问权限。
如何给mysql的root用户开启远程访问权限参考:mysql给root开启远程访问权限
-
在mysql中,使用命令:
select name from innodb_metrics where status="enabled" order by name;
再使用如下命令将adaptive_hash_searches_btree这个向量开启:
set global innodb_monitor_enable = "adaptive_hash_searches_btree";
打开计数器即可。具体计数器打开/关闭/重置可以参考:mysql如何打开/关闭/重置计数器
-
在CDBTune1上使用sysbench对CDBTune2的sbtest进行初始化,使用的是/home/cheng/AutoTuner/scripts/prepare.sh脚本,首先用vim将prepare.sh中的script_path修改为:"/usr/share/sysbench/" (注意最后有一个”/”)。之后使用命令:
sh prepare.sh read 192.168.110.11 3306 123456
(当前在/home/cheng/AutoTuner/scripts目录下)对CDBTune2的sbtest数据库建了8张表,每张表1000000条数据(这一步耗时可能会有点长,耐心等待即可)。
-
对两台机器,都进行requirement.txt的安装(使用pip安装,注意不是pip3)。首先进入项目home目录,即/home/cheng/AutoTuner,再执行命令
pip install -r requirements.txt --user
若报错,可看报错解决。
-
在CDBTune2上安装pexpect,执行如下命令:
pip install pexpect --user
-
在CDBTune2的/home/cheng/AutoTuner/server目录下执行命令:
sh ./start_server.sh
-
在CDBTune2上输入命令:netstat -an | grep 20000 查看是否启动成功。
-
在CDBTune1的/home/cheng/AutoTuner/tuner仿照CDBTune2的start_server.sh脚本,写一个start_train.sh的脚本。内容如下:
#!/usr/bin/env bash nohup python train.py >> train.log &
-
在CDBTune1使用pip安装enum。命令:
pip install enum enum34
-
在CDBTune1的/home/cheng/AutoTuner/environment/configs.py中添加CDBTune2的mysql信息(仿造已有的mysql格式进行填写),如下:
instance_config = { 'mysql3': { 'host': '192.168.110.11', 'user': 'root', 'passwd': '123456', 'port': 3306, 'database': 'sbtest', 'memory': 34359738368 } }
-
在python2.x的环境安装sklearn,使用命令:
pip install -U scikit-learn==0.19
-
将CDBTune1的/home/cheng/AutoTuner/environment/mysql.py中的TEMP_FILES和PROJECT_DIR变量中的用户名改为”cheng”(服务器的用户名)。
-
将CDBTune1的/home/cheng/AutoTuner/scripts/run_sysbench.sh中的script_path修改为"/usr/share/sysbench/"。
-
需要自行设置environment模块下knobs.py文件中各个knob的默认值。
-
修改/etc/mysql/my.cnf文件,将内容替换为如下:
# DEFAULT_VALUE为上一步在knobs.py中设置的默认值 [mysqld] max_binlog_cache_size = DEFAULT_VALUE binlog_format = MIXED innodb_buffer_pool_size = DEFAULT_VALUE innodb_log_files_in_group = DEFAULT_VALUE innodb_log_file_size = DEFAULT_VALUE innodb_read_io_threads = DEFAULT_VALUE binlog_cache_size = DEFAULT_VALUE innodb_buffer_pool_instances = DEFAULT_VALUE binlog_checksum = NONE max_binlog_size = DEFAULT_VALUE skip_name_resolve = OFF innodb_write_io_threads = DEFAULT_VALUE innodb_purge_threads = DEFAULT_VALUE innodb_file_per_table = OFF table_open_cache = DEFAULT_VALUE max_connections = DEFAULT_VALUE [mysqld_safe] [mysqldump] max_allowed_packet = 16M
-
需要自行设置tuner模块下tuner_configs.py中的一些超参数的值。
-
运行CDBTune1的tuner/train.py文件,可以指定代码里提供的参数,不指定则按默认参数运行,开始训练model。
-
模型训练完成后,运行CDBTune1的tuner/evaluate.py文件,对模型进行评估。同时必须指定params参数,参数值为tuner/model_params下的文件名部分前缀,如下:
python2 evaluate.py --params train_ddpg_1571382343_4600
Q: 在CDBTune2安装mysql后,使用命令mysql -u root -p并且正确输入密码后报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)。
A: mysql服务没有开启,使用命令sudo service mysql start开启服务再登录mysql即可。
Q: 在/home/cheng/AutoTuner/scripts下使用命令sh ./prepare.sh read 192.168.110.11 3306 123456 打算对sbtest进行初始化,报错:./prepare.sh: 5: [: read: unexpected operator ./prepare.sh: 8: [: read: unexpected operator。
**A: **由于ubuntu的sh默认为dash,而脚本使用的是bash,所以将sh改为bash即可。或者永久修改使得sh->bash,参考:如何永久使sh指向bash。
Q: 安装requirement.txt的MySQL-python==1.2.3报错:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-_pzcr1qo/MySQL-python/。
A: 使用pip安装容易出错,使用以下两个命令安装MySQL-python:sudo apt-get install libmysql++-dev;sudo easy_install MySQL-python.参考:安装MySQLdb发生EnvironmentError: mysql_config not found。安装成功后,删除requirement.txt中的第一行,再使用pip安装requirement.txt。
Q: 报错:Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1。 A: 原因是缺少依赖。参考:解决Python缺少依赖解决方法。