Leo の Blog Where there is a will there is a way! Trust youself can do it!

17六/090

安装 libmemcached, memcache_functions_mysql

我们到目标是 mysql 同步更新 memcache 服务器. 为此我们给它装上必要到软件. 现在要安装的是 libmemcache 和 memcache_functions_mysql 两个软件包. 下载地址为:

libmemcached: http://download.tangent.org/libmemcached-0.30.tar.gz

memcache_functions_mysql: http://download.tangent.org/memcached_functions_mysql-0.8.tar.gz

安装libmemcached需要装机器上已经安装 memcache, 这个前面已经有介绍. 这里不再说明.

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
wget http://download.tangent.org/libmemcached-0.30.tar.gz
 
wget http://download.tangent.org/memcached_functions_mysql-0.8.tar.gz
 
tar -zxf libmemcached-0.30.tar.gz
 
tar -zxf memcached_functions_mysql-0.8.tar.gz
 
cd libmemcached-0.30
 
./configure
 
make
 
sudo make install
 
sudo ln -s /usr/local/lib/libmemcached.so.2 /usr/lib/
 
cd ../memcached_functions_mysql-0.8
 
./configure --with-mysql=/usr/local/mysql/bin/mysql_config --libdir=/usr/local/mysql/lib/
 
make
 
sudo make install
 
/usr/local/mysql/bin/mysql -u root -p

说明一下. libmemcached 安装后要装 /usr/lib 里建一个链接, 不然 memcache_functions_mysql 包编译不过. 它会提示 找不到 libmemcached.

如果编译安装的 mysql 装编译 memcache_functions_mysql 包时 使用参数 --libdir=/usr/local/mysql/lib/mysql/ 假设 mysql 安装在 /usr/local/mysql 目录. 这里使用的是直接下载编译好的二进制包.

到此, 安装OK!

15六/090

安装 Memcache 服务器.

服务器初始化环境: Ubuntu-8.04.2 base-system + 编译环境.

载 memcache 和 libevent 包. Memcache用到了libevent这个库用于Socket的处理.

1
2
3
4
5
6
7
8
9
10
11
12
wget http://www.monkey.org/~provos/libevent-1.3.tar.gz
wget http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz
tar -zxf libevent-1.3.tar.gz
tar -zxf memcached-1.2.8.tar.gz
cd libevent-1.3
./configure --prefix=/usr
make
sudo make install
cd ../memcached-1.2.8
./configure --with-libevent=/usr
make
sudo make install

安装后 memcached 会这 /usr/local/bin/目录下. 启动Memcache的服务器端:

sudo /usr/local/bin/memcached -d -m 64 -u root -l 192.168.1.232 -p 12001 -c 32 -P /tmp/memcached.pid

-d 选项是启动一个守护进程,
-m 是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u 是运行Memcache的用户,我这里是root,
-l 是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p 是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c 选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P 是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,

结束Memcache进程,执行:

sudo kill `cat /tmp/memcached.pid`

可以启动多个守护进程, 端口不能一样.
现在用PHP脚本测试一下. 测试服务器是 192.168.1.230

1
2
3
4
5
6
7
8
9
10
/**
* memTest.php
* Memcache 服务器测试脚本
*/
//phpinfo();
 
$mem = new Memcache();
$mem->addServer('192.168.1.232', 12001);
$mem->set('mmKey', 'Hello, Baby!');
var_dump($mem->get('mmKey'));

http://localhost/memTest.php 可以看到输出了

string(12) "Hello, Baby!"

Memcache 服务器安装配置完毕.

15六/090

简单的 MySQL 主从配置.

服务器环境 Ubuntu-8.04.2 base-system + 编译环境. 安装 mysql 请参考本站前面系列文章.

数据库服务器Master, 主机名:DB01, IP: 192.168.1.234

数据库服务器Slave, 主机名:DB02, IP: 192.168.1.235

先配置 Master 的 mysql 环境.

修改mysql的配置文件 my.cnf 确保有下面的信息, 没有加上. 有的话修改成下面这样. 其他的可以保持默认配置.

[mysqld]
log-bin = mysql-bin
server-id = 1

#for innodb extra setting.
#innodb_flush_log_at_trx_commit = 1
#sync_binlog = 1

创建测试数据库,数据表.

CREATE DATABASES anjuke
USE anjuke
CREATE TABLE IF NOT EXISTS `tests` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` text,
`created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
INSERT INTO `tests` (`id`, `content`, `created`) VALUES
(1, 'Hello, First insert', '2009-06-15 10:16:59'),
(2, 'This is second insert data', '2009-06-15 10:16:59');

给添加一个账号给 Slave 同步使用.

GRANT REPLICATION SLAVE ON *.* TO repluser@192.168.1.235 IDENTIFIED BY 'testpassword';

添加一个远程master测试账号

GRANT ALL PRIVILEGES ON *.* TO mmroot@192.168.1.230 IDENTIFIED BY 'password';

OK, 简单的 MySQL master 服务器配置到这里.
重启mysql服务, 登入, 查看 master 状态. 如下图:

show-master-status

查看一下原始数据, 如图

init-test-data

OK, Master 数据库已经配置OK, 运行正常.

再配置 Slave 的 mysql 环境.
同样修改 my.cnf 配置文件. 确保下面有如下信息.

[mysqld]
server-id=2
master-host = 192.168.1.234
master-user = repluser
master-password = testpassword
master-port = 3306
master-connect-retry = 120
replicate-do-db = anjuke

保存修改, 重启 mysql 服务. 登入数据库, 可以看到 slave 状态信息. 如下图:

show-slave-status

配置正常. 现在用远程账号在 192.168.1.230 上的mysql连接master服务器, 插入一条记录到 tests 表. 可以看到 slave 已经和 master 的数据库和数据一样了.

简单的 MySQL 主从配置就OK了. 当然这个是测试环境使用. 生成环境还需要很多地方的优化配置.

10六/092

Zend Studio For Eclipse 6.1.2 启动异常解决

新装的 Ubuntu 9.04 上安装 Zend Studio For Eclipse 6.1.2 总感觉很慢. 奇怪的很. 电脑配置不低. 为啥允许这么慢呢? 用命令行启动了一下studio, 发现有个异常抛出. 贴一下:

java.io.FileNotFoundException: /usr/local/Zend/ZendStudioForEclipse-6.1.2/plugins/com.zend.php_6.1.2.v20090405-1701/about.mappings (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at com.zend.php.core.core.basic.a.e(a.java)
at com.zend.php.core.core.basic.c.e(c.java)
at com.zend.php.core.core.basic.c.a(c.java)
at com.zend.php.core.core.network.f.run(f.java)
at java.lang.Thread.run(Unknown Source)

怪了. 怎么报权限错误了. 没办法了. 把 /usr/local/Zend/ZendStudioForEclipse-6.1.2/plugins/com.zend.php_6.1.2.v20090405-1701/about.mappings 文件的权限改成 777 就不抛出异常了.

不是很懂 JAVA , 真是奇怪.

4六/090

好玩的 Linux 命令: dmidecode

今天看有人推荐 dmidecode 命令. 试玩了一下. 非常的不错. 可以把系统里的硬件信息全部显出来. 很直观. 目前用的是 Ubuntu, 默认已经安装. 没安装 sudo apt-get install dmidecode 即可.

这个命令需要管理员权限执行. 查看一下简单到用法: sudo dmidecode -h

查看BIOS信息: sudo dmidecode -t bios

查看系统信息: sudo dmidecode -t system

查看主板信息: sudo dmidecode -t baseboard

查看CPU信息: sudo dmidecode -t processor

查看内存信息: sudo dmidecode -t memory

还有很多其他到. 自己慢慢玩吧. :)