2015-11-04 49 views
0

我新的MySQL中使用MySQL作爲NoSQL的使用memcached的 - 表不更新

我已經安裝使用的NoSQL並啓用了memcahed接口,然後按照這些STPES:

-Created新表「的用戶「

mysql> CREATE TABLE test.users (
    `user_id` varchar(32) NOT NULL DEFAULT '', 
    `first` varchar(100) DEFAULT NULL, 
    `last` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB 

它 - 增加至contaoners表。

mysql> INSERT INTO containers 
(name, db_schema, db_table, key_columns, 
value_columns, unique_idx_name_on_key) 
VALUES ('default', 'test', 'users', 'user_id', 'first|last', 'PRIMARY'); 

mysql> select * from innodb_memcache.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    | 
| default | test  | users  | user_id  | first|last | 0  | NULL  | NULL    | PRIMARY    | 
+---------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+ 
2 rows in set (0.00 sec) 

- 使用telnet啓動接口並運行以下命令將值存儲到表中。

set foo 0 0 14 
Jarvis|Badgley 

- 現在得到富給出了存儲結果

get foo 
VALUE foo 0 14 
Jarvis|Badgley 
END 

- 但是,當我檢查MySQL表沒有存儲這些值。

mysql> select * from test.users; 
Empty set (0.00 sec) 

我不是爲了得到爲什麼更新的值沒有反映在表中。

請幫忙!

+0

你怎麼連接mysql到memcached的,反之亦然? – px5x2

+0

我已經安裝了mysql插件daemon_memcached'INSTALL PLUGIN daemon_memcached SONAME'libmemcached.so';'然後用telnet啓動了memcached接口 – Sarita

回答

0

我已經能夠使它工作,按照你的步驟,但有一些修復。

首先,用戶表定義錯誤(列'id`不存在)。它應該是:

CREATE TABLE test.users (
    `user_id` varchar(32) NOT NULL DEFAULT '', 
    `first` varchar(100) DEFAULT NULL, 
    `last` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB 

如果配置了此表:

INSERT INTO containers 
(name, db_schema, db_table, key_columns, 
value_columns, unique_idx_name_on_key) 
VALUES ('default', 'test', 'users', 'user_id', 'first|last', 'PRIMARY'); 

INSTALL PLUGIN daemon_memcached soname "libmemcached.so";發動引擎,你會發現這個錯誤mysql.log文件:

InnoDB_Memcached: column 6 in the entry for config table 'containers' in database 'innodb_memcache' has an invalid NULL value 
Failed to initialize instance. Error code: 13 

所以你應該定義列爲flags,casexpiry,這樣:

CREATE TABLE test.users (
    `user_id` varchar(32) NOT NULL DEFAULT '', 
    `first` varchar(100) DEFAULT NULL, 
    `last` varchar(100) DEFAULT NULL, 
    flags int, 
    cas bigint unsigned, 
    expiry int, 
    PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB; 

INSERT INTO innodb_memcache.containers 
(name, db_schema, db_table, key_columns, 
value_columns, flags, cas_column, expire_time_column, unique_idx_name_on_key) 
VALUES ('default', 'test', 'users', 'user_id', 'first|last', 'flags', 'cas', 'expiry', 'PRIMARY'); 

然後,當您重新啓用插件時,它將開始工作。

telnet localhost 11222 
Trying ::1... 
Connected to localhost. 
Escape character is '^]'. 
set key 0 3600 8 
John|Doe 
STORED 

和查詢數據庫:

mysql> select * from test.users; 
+---------+-------+------+-------+------+------------+ 
| user_id | first | last | flags | cas | expiry  | 
+---------+-------+------+-------+------+------------+ 
| key  | John | Doe |  0 | 50 | 1495534750 | 
+---------+-------+------+-------+------+------------+ 
1 row in set (0.00 sec)