MySQL 5.6开始支持InnoDB memcached插件,也就是可以通过SQL高效读写memcached里的缓存内容,也支持用原生的memcache协议读写,并且可以实现缓存数据持久化,以及crash recovery、mysql replication、触发器、存储过程等众多特性。
官网手册:14.18 InnoDB Integration with memcached
1. 编译安装MySQL前的准备工作
安装编译源码所需的工具和库:
1
|
yum
install
gcc gcc-c++ ncurses-devel perl –y
|
安装cmake,从http://www.cmake.org下载源码并编译安装:
1
2
3
4
5
6
|
cd
/tmp
wget http:
//www
.cmake.org
/files/v3
.2
/cmake-3
.2.2.
tar
.gz
tar
zxvf cmake-3.2.2.
tar
.gz
cd
cmake-3.2.2
.
/bootstrap
make
&&
make
install
|
2. 设置MySQL用户和组
新增mysql用户组:
1
|
groupadd mysql
|
新增mysql用户:
1
|
useradd
-r -g mysql mysql
|
3. 新建MySQL所需目录
新建mysql安装目录:
1
|
mkdir
-p
/usr/local/mysql
|
新建mysql数据文件目录:
1
|
mkdir
-p
/data/mysql/data
|
新建mysql日志文件目录:
1
|
mkdir
-p
/data/mysql/log
|
4. 下载MySQL源码包并解压
从http://dev.mysql.com/downloads/mysql/直接下载源码,解压mysql-5.6.24.tar.gz:
1
2
3
4
|
cd
/tmp
wget http:
//dev
.mysql.com
/get/Downloads/MySQL-5
.6
/mysql-5
.6.24.
tar
.gz
tar
zxvf mysql-5.6.24.
tar
.gz
cd
mysql-5.6.24
|
5. 编译安装MySQL
从mysql5.5起,mysql源码安装开始使用cmake了,设置源码编译配置脚本。
-DCMAKE_INSTALL_PREFIX=dir_name |
设置mysql安装目录 |
-DMYSQL_UNIX_ADDR=file_name |
设置监听套接字路径,这必须是一个绝对路径名。默认为/tmp/mysql.sock |
-DDEFAULT_CHARSET=charset_name |
设置服务器的字符集。 |
-DDEFAULT_COLLATION=collation_name |
设置服务器的排序规则。 |
-DWITH_INNOBASE_STORAGE_ENGINE=1 |
存储引擎选项: |
-DMYSQL_DATADIR=dir_name |
设置mysql数据库文件目录 |
-DMYSQL_TCP_PORT=port_num |
设置mysql服务器监听端口,默认为3306 |
-DENABLE_DOWNLOADS=bool |
是否要下载可选的文件。例如,启用此选项(设置为1),cmake将下载谷歌所使用的测试套件运行单元测试。 |
下文翻译自MySQL手册InnoDB memcached插件部分:
“
如果从源代码编译安装,libevent 1.4.3集成在安装包中,位于MySQL源代码目录的最上层。如果你使用libevent的集成版本,无须做任何操作。如果你想使用使用libevent的一个本地版本,你必须将-DWITH_LIBEVENT编译选项设置为system或yes来编译MySQL。
当从源码编译MySQL服务器,你必须设置编译选项-DWTIH_INNODB_MEMCACHED=ON.
”
在重新配置或重新构建之前,需要先清除旧的对象文件和缓存信息,方法如下:
1
2
|
make
clean
rm
-rf CMakeCache.txt
|
设置编译参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cmake . \
-DCMAKE_INSTALL_PREFIX=
/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_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=
/data/mysql/data
\
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1 \
-DWITH_INNODB_MEMCACHED=ON
|
查看CMakeCache.txt中相关参数设置:
1
|
grep
"WITH_INNODB_MEMCACHED"
CMakeCache.txt
|
编译源码:
1
|
make
|
安装:
1
|
make
install
|
6. 修改mysql目录所有者和组
修改mysql安装目录:
1
2
|
cd
/usr/local/mysql
chown
-R mysql:mysql .
|
修改mysql数据文件目录:
1
2
|
cd
/data/mysql/
chown
-R mysql:mysql .
|
7. 初始化mysql数据库
1
2
|
cd
/usr/local/mysql
.
/scripts/mysql_install_db
--user=mysql --datadir=
/data/mysql/data
|
8. 复制并修改mysql服务启动配置文件
1
|
cp
/usr/local/mysql/support-files/my-default
.cnf
/etc/my
.cnf
|
注:如果/etc/my.cnf文件存在,则覆盖。
1
|
vi
/etc/my
.cnf
|
修改配置文件的相关设置。
9. 复制mysql服务启动脚本及加入PATH路径
1
2
|
cp
support-files
/mysql
.server
/etc/init
.d
/mysqld
vim
/etc/profile
|
PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
export PATH
1
|
source
/etc/profile
|
10. 启动mysql服务并加入开机自启动
1
2
|
service mysqld start
chkconfig --level 35 mysqld on
|
11. 检查mysql服务是否启动
1
2
|
netstat
-tulnp |
grep
3306
mysql -u root -p
|
密码为空,如果能登陆上,则安装成功。
12. 修改MySQL用户root的密码
1
|
mysqladmin -u root password
'123456'
|
注:也可运行安全设置脚本,修改MySQL用户root的密码,同时可禁止root远程连接,移除test数据库和匿名用户。
1
|
/usr/local/mysql/bin/mysql_secure_installation
|
13. 查看插件目录
1
2
3
4
5
6
7
|
mysql>
select
@@plugin_dir;
+
------------------------------+
| @@plugin_dir |
+
------------------------------+
| /usr/
local
/mysql/lib/plugin/ |
+
------------------------------+
1 row
in
set
(0.00 sec)
|
14. 确认插件目录下的文件
1
|
cd
/usr/local/mysql/lib/plugin/
|
在插件目录我们能看到innodb_engine.so和libmemcached.so
15. 导入memcached插件所需表结构
1
|
mysql> SOURCE /usr/
local
/mysql/share/innodb_memcached_config.sql
|
16. 安装memcached插件
1
|
mysql> INSTALL PLUGIN daemon_memcached soname
"libmemcached.so"
;
|
相应的卸载语句为:
mysql> UNINSTALL PLUGIN daemon_memcached;
17. 查看或修改相关memcached插件配置
1
2
3
4
5
6
7
8
9
10
11
12
|
mysql> SHOW VARIABLES
LIKE
'%memcached%'
;
+
----------------------------------+------------------+
| Variable_name | Value |
+
----------------------------------+------------------+
| daemon_memcached_enable_binlog |
OFF
|
| daemon_memcached_engine_lib_name | innodb_engine.so |
| daemon_memcached_engine_lib_path | |
| daemon_memcached_option | |
| daemon_memcached_r_batch_size | 1 |
| daemon_memcached_w_batch_size | 1 |
+
----------------------------------+------------------+
6
rows
in
set
(0.00 sec)
|
注意:daemon_memcached_r_batch_size和daemon_memcached_w_batch_size,这两个选项对性能影响较大,简单点说就是控制事务提交的频率,MySQL的缺省值均为1,也就是说每次都提交,这主要是从安全性考虑的,大家可以依照自己的情况来调整。
大家可以在/etc/my.cnf配置文件中修改相关memcached插件的配置参数,可以参考之前的博文《安装和配置InnoDB memcached插件》。
18. 验证memcached插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
[root@mongo01 plugin]
# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is
'^]'
.
stats
STAT pid 29397
STAT uptime 881
STAT
time
1430385384
STAT version 5.6.24
STAT libevent 5.6.24
STAT pointer_size 64
STAT rusage_user 0.598908
STAT rusage_system 0.810876
STAT daemon_connections 2
STAT curr_connections 3
STAT total_connections 3
STAT connection_structures 3
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT auth_cmds 0
STAT auth_errors 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT rejected_conns 0
STAT threads 4
STAT conn_yields 0
STAT evictions 0
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT reclaimed 0
STAT engine_maxbytes 67108864
END
|
换句话说,MySQL已经兼容Memcached协议,可以直接使用Memcached命令。
问题汇总:
问题:
Starting MySQL..The server quit without updating PID file ([FAILED]/mysql/Server03.mylinux.com.pid).
解决:
修改/etc/mysql/my.cnf 中datadir,指向正确的mysql数据库文件目录。
问题:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
解决:
新建一个链接或在mysql中加入-S参数,直接指出mysql.sock位置。
ln -s /usr/local/mysql/data/mysql.sock /tmp/mysql.sock
/usr/local/mysql/bin/mysql -u root -S /usr/local/mysql/data/mysql.sock
本文转自UltraSQL51CTO博客,原文链接: http://blog.51cto.com/ultrasql/1640997,如需转载请自行联系原作者