Innodb with Memcached –安装
来源:互联网 发布:仓库管理系统源码.net 编辑:程序博客网 时间:2024/06/10 09:16
本文在文章:http://hi.baidu.com/cwbdde/blog/item/adc89b0ed94f80d17acbe1a7.html的基础上做了一些改动,应用到自己的系统上,由于机器上以前有一个mysql,所以这是在同一机器上安装两个mysql的情况。
InnoDB with Memcached是在提供MySQL服务的同一进程中提供Memcached服务。memcached是作为MySQL的插件程式,通过访问本地的InnoDB API直接访问innodb数据。如下图:
准备工作
由于mysql5.5版本之后不提供configure源码安装的方式,而采用cmake方式,没安装cmake,那就提前安装一下吧,很简单。
yum install cmake
安装mysql5.6.2
wget http://downloads.mysql.com/snapshots/pb/mysql-5.6-labs-innodb-memcached/mysql-5.6.2-labs-innodb-memcached.tar.gz
1)、下载MySQL。#cd /usr/local/src
#wget http://downloads.mysql.com/snapshots/pb/mysql-5.6-labs-innodb-memcached/mysql-5.6.2-labs-innodb-memcached.tar.gz
2)、添加必要的组和拥有者
#groupadd mysql
#useradd -r -g mysql mysql
3)、解压MySQL
#tar -zvxf mysql-5.5.8.tar.gz
4)、配置编译
#mkdir /usr/local/mysql-5.6.2
#mkdir /mysql-5.6.2_data
#cd /usr/local/src/mysql-5.6.2
编译参数
#cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.2/ \
-DMYSQL_DATADIR=/mysql-5.6.2_data/ \
-DMYSQL_UNIX_ADDR=/tmp/mysql.3308.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=0 \
-DWITH_ARCHIVE_STORAGE_ENGINE=0 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3308 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_SSL=system \
-DWITH_READLINE=1
注意:编译参数里有几项需要根据自己具体情况设置。我这里将MySQL5.5.16运行于3306端口,并安装在mysql5516目录。
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql5516/ 设置mysql的安装目录
-DMYSQL_DATADIR=/data0/mysql/3306/data 设置mysql数据库文件的位置
-DMYSQL_UNIX_ADDR=/data0/mysql/3306/mysqld.sock 设置mysql启动后sock文件位置
-DMYSQL_TCP_PORT=3308 设置mysql的监听端口
-DDEFAULT_CHARSET=utf8 //使用utf8字符
-DDEFAULT_COLLATION=utf8_general_ci //校验字符
-DEXTRA_CHARSETS=all //安装所有扩展字符集
-DENABLED_LOCAL_INFILE=1 //允许从本地导入数据
#make
#make install
注意事项:
重新编译时,需要清除旧的对象文件和缓存信息。
# make clean
# rm -f CMakeCache.txt
4)、设置目录权限
# cd /usr/local/mysql-5.6.2
# chown -R root:mysql . //把当前目录中所有文件的所有者所有者设为root,所属组为mysql
# chown -R mysql:mysql /mysql-5.6.2_data
5)、配置文件
# cp support-files/my-medium.cnf /etc/my-5.6.2.cnf //这个配置仅适合小内存系统(32M - 64M)
打开如下注释:
innodb_data_home_dir = /usr/local/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
添加默认字符集:
[client]
default-character-set = utf8 // 添加编码支持
[mysqld]
default-character-set = utf8 // 添加编码支持
max_connections = 10000 //根据服务器性能调节
basedir = /usr/local/mysql //设置安装目录,这样在系统启动时才能正确运行到/etc/rc.d/init.d/mysql start
6)、创建系统数据库的表
# cd /usr/local/mysql-5.6.2
# ./scripts/mysql_install_db --defaults-file=/etc/my-5.6.2.cnf --basedir=/usr/local/mysql-5.6.2 --datadir=/mysql-5.6.2_data/ --user=mysql --pid-file=/mysql-5.6.2_data/mysql-5.6.2.pid --port=3308 --socket=/tmp/mysql.3308.sock
启动mysql
/usr/local/mysql-5.6.2/bin/mysqld --basedir=/usr/local/mysql-5.6.2 --datadir=/mysql-5.6.2_data/ --plugin-dir=/usr/local/mysql-5.6.2/lib/plugin --user=mysql --log-error=/mysql-5.6.2_data/mysqld.log --open-files-limit=51200 --pid-file=/mysql-5.6.2_data/mysqld.pid --socket=/tmp/mysql.3308.sock --port=3308 &
导入配置表
scripts目录下有个innodb_memcached_config.sql文件,是对memcached插件的配置
cd /usr/local/mysql2/bin/
./mysql -uroot -P3308 -S /tmp/mysql.3308.sock < ../scripts/innodb_memcached_config.sql
运行完这个脚本,会创建一个innodb_memcache的数据库,以及下面3个表:containers,cache_policies和config_options。
containers是innodb和memcached之间的一个映射关系表,描述了memcached的数据属性(比如key,value,过期时间等)是如何存放在innodb的表中的,以及每个属性对应到表中哪些字段上. containers表只有一行记录,是因为目前memcached插件只支持每次只能将memcached操作到一张表上。官方资料上说,未来会支持更加灵活的配置,这样memcached的操作就能映射到多个表了。
cache_policies表中的配置指定了数据存储的形态,目前有3种:
config_options表目前只有一条记录,指定了分隔符,默认值是’|',用于多列数据情况下的分隔。
另外,test库里面会有个demo_test表,记录了
加载memcached插件
mysql>install plugin daemon_memcached soname 'libmemcached.so';
mysql>show variables like '%memcached%';
+———————————-+——————+
| Variable_name | Value |
+———————————-+——————+
| daemon_memcached_engine_lib_name | innodb_engine.so |
| daemon_memcached_engine_lib_path | |
| daemon_memcached_option | |
| daemon_memcached_r_batch_size | 1048576 |
| daemon_memcached_w_batch_size | 32 |
+———————————-+——————+
可以查看一些配置属性,可以在配置文件[mysqld]部分自行调整。
这里主要说下面两个参数:
其他的配置属性,比如memcahced的属性可以在daemon_memcached_option指定,比如,指定11212端口
loose-daemon_memcached_option=’-p 11222′即可。
这里解释下loose前缀的作用,经常会在配置插件属性的时候,看到HandlerSocket属性中有loose_handlersocket_port这种写法,其实目的是为了:”选项有前缀loose,如果程序未识别出选项不会提示错误退出,只是会发出一条警告,不至于会终止程序。”
测试一下
mysql>use innodb_memcache;
mysql>select * from containers;
+——+———–+———–+————-+—————+——-+————+——————–+————————+
| name | db_schema | db_table | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |
+——+———–+———–+————-+—————+——-+————+——————–+————————+
| aaa | test | demo_test | c1 | c2 | c3 | c4 | c5 | PRIMARY |
+——+———–+———–+————-+—————+——-+————+——————–+————————+
可以看到数据是存放在test库的demo_test表中,实际应用的时候可以自己修改。
往memcache里面添加条数据,如下:
#php -r ‘$m = memcache_connect(“localhost”, 11211); $m->add(“key”, “value”); var_dump($m->get(“key”));’
string(5) “value”
select查询之前,由于daemon_memcached_w_batch_size配置的存在如果数据字节小于32是不会显示的,所以需要修改下,如下:
mysql>set session TRANSACTION ISOLATION LEVEL read uncommitted;
mysql>SELECT * FROM demo_test WHERE c1 = ‘key’;
+—–+——-+——+——+——+
| c1 | c2 | c3 | c4 | C5 |
+—–+——-+——+——+——+
| key | value | 0 | 1 | NULL |
+—–+——-+——+——+——+
1 row in set (0.00 sec)
对于用memcache来存放session的服务,同样可以这样实现:
[php.ini文件设置]
; when using the “memcache” extension:
session.save_handler=memcache
; when using the “memcached” extension:
; session.save_handler=memcached
session.save_path=”tcp://localhost:11211″
[php代码]
php -r “session_start();$_SESSION['foo'] = ‘bar’;”
[mysql终端]
mysql> select * from demo_test where c1 = ‘m1h4iqmp6hc7e4l85qlld0gtd1′;
+——+——+—————————-+——+—————-+——+——+——+——+——+——+
| cx | cy | c1 | cz | c2 | ca | CB | c3 | cu | c4 | C5 |
+——+——+—————————-+——+—————-+——+——+——+——+——+——+
| NULL | NULL | m1h4iqmp6hc7e4l85qlld0gtd1 | NULL | foo|s:3:”bar”; | NULL | NULL | 0 | NULL | 4 | NULL |
+——+——+—————————-+——+—————-+——+——+——+——+——+——+
1 row in set (0.00 sec)
小结
InnoDB with Memcached是在提供MySQL服务的同一进程中提供Memcached服务 ,这与HandlerSocket的架构模式几乎是一样的。性能提升的原理同HandlerSocket类似,可以参考另一篇文章http://www.domysql.com/html/180.html
当前版本提供的功能做个小结
memcached作为mysqld的守护插件:mysqld和memcached是在同一进程空间中运行,对数据的访问具有非常低的延迟支持多列:用户可以通过value映射到多个列,该值是分离预先定义的“分离器”。可选的本地缓存:"cache-only", "innodb-only", 和 "caching", 适用于Memcached的set,get,delete和flush操作. 不但可以省去开发中使用Memcached来缓存数据的麻烦,并且具有更好的可靠性和数据一致性批量操作:用户可以通过指定daemon_memcached_r_batch_size和daemon_memcached_w_batch_size大小来进行批量提交支持所有的memcached配置选项,通过daemon_memcached_option参数设置
start_mysql.sh方式
#!/bin/bash
bash -c "/usr/local/mysql2/bin/mysqld_safe --defaults-file=/mysql/3308/my.cnf" &
stop_mysql.sh方式
#!/bin/bash
/usr/local/mysql2/bin/mysqladmin -u root -p -S /mysql/3308/mysql.sock shutdown
my.cnf样本
[client]
#password = your_password
port = 3308
socket = /mysql/3308/mysql.sock
# Here follows entries for some specific programs
[mysqld_safe]
datadir = /mysql/3308/data
log-error = /mysql/3308/mysql_error.log
pid-file = /mysql/3308/mysql.pid
# The MySQL server
[mysqld]
port = 3308
socket = /mysql/3308/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
- Innodb with Memcached –安装
- ubuntu14.0安装mysq和innodb memcached plugin
- 在ubuntu Mysql 5.7 安装InnoDB Memcached 插件
- 初窥InnoDB的Memcached插件
- <MySQL Performance: over 1M QPS with InnoDB Memcached Plugin in MySQL 5.7>MySQL的高性能:MySQL 5.7
- memcached之memcached安装
- memcached之memcached安装
- Using MemCached with NHibernate
- MySQL with Memcached 简介
- Distributed Caching with Memcached
- JUnit test with Memcached
- memcached安装
- memcached安装
- 安装memcached
- memcached安装
- memcached安装
- memcached安装
- memcached安装
- iOS 6发布的启示 —谈互联网产业链变化
- Eclipse中的SVN无法比较差异
- 关于Oracle登录:ora-12154:tns:无法解析指定的连接标识符
- jstl分割字符串
- PHP基础深入
- Innodb with Memcached –安装
- Android点滴(三)
- 汇编学习笔记----8086CPU的段寄存器
- Static Nested Class 和 Inner Class的不同
- 使用 LINQ to SharePoint 写入内容数据库
- Asp.Net MVC 2.0 Filter基本用法
- AccountManager使用教程
- ext内存泄露分析1
- MyEclipse 9.1配置ADT(Link方式配置Android开发环境)