mysql + sphinx 安装过程详解

参考:
http://www.cnblogs.com/chenzehe/archive/2010/11/04/1868354.html
http://www.coreseek.cn/news/7/99/
http://klinmy.blog.163.com/blog/static/5680802008428445716/
http://love3400wind.blog.163.com/blog/static/79630801200811305535214/
http://zhaoaiqing.iteye.com/blog/729850
http://blog.csdn.net/xqandpan/archive/2010/06/28/5698760.aspx
http://www.cnblogs.com/Jonathan/archive/2010/06/30/1768492.html


wget http://gd.tuwien.ac.at/db/mysql/Downloads/MySQL-5.1/MySQL-5.1.54-1.glibc23.src.rpm
wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz
释放源代码
rpm -i MySQL-community-5.1.54-1.rhel5.src.rpm
把源代码移动到相应目录,便于管理
mv /usr/src/redhat/SOURCES/mysql-5.1.54.tar.gz ./
解压源代码
tar -xvf mysql-5.1.54.tar.gz
在源代码中创建sphinx插件目录
mkdir mysql-5.1.54/storage/sphinx
解压sphinx
tar -zxv -f sphinx-0.9.9.tar.gz
复制sphinx下的mysqlse中的所有文件到的sphinx中
cp sphinx-0.9.9/mysqlse/* mysql-5.1.54/storage/sphinx/
改变目录
cd mysql-5.1.54
重新编译
sh BUILD/autorun.sh

#因为 5.1 后的版本(具体哪个版本开始我也不清楚),InnoDB 都不再内置了,都是以插件形式加载
./configure --prefix=/usr/local/mysql/mysql --with-charset=utf8 --with-extra-charset=all --enable-thread-safe-client --enable-assembler --with-readline --with-big-tables --with-named-curses-libs=/usr/lib/libncursesw.so.5  --with-plugins=sphinx,innobase,innodb_plugin

make

make install

#添加mysql用户组
groupadd mysql
#创建mysql用户并把它放到mysql组下
useradd -g mysql mysql
#修改mysql文件属性
chown -R root:mysql /usr/local/mysql

#所有的mysql,都安装在/usr/local目录下,用不同的mysql目录区分不同的mysql实例,我们采用目录名+端口号的形式来区分。因此,我们的/usr/local下的mysql目录结构如下:
cd /usr/local/mysql/
cp -R mysql mysql3306
cp -R mysql mysql3307
cp -R mysql mysql3308

#初始化数据库,这里要指定dadadir属性,要么启动mysql时会提示Starting MySQL..Manager of pid-file,安装mysql默认数据库,可以使用mysql安装文件的bin目录下的mysql_install_db程序来完成。
/usr/local/mysql/mysql/bin/mysql_install_db --basedir=/usr/local/mysql/mysql3306 --datadir=/home/mysqldata/mysql3306 --user=mysql
/usr/local/mysql/mysql/bin/mysql_install_db --basedir=/usr/local/mysql/mysql3307 --datadir=/home/mysqldata/mysql3307 --user=mysql
/usr/local/mysql/mysql/bin/mysql_install_db --basedir=/usr/local/mysql/mysql3308 --datadir=/home/mysqldata/mysql3308 --user=mysql

#创建并编辑配置文件my.cnf
#由于在多实例的环境下,mysql的各个实例可以使用单独的配置文件,因此,我们也采用每个mysql实例使用单独的配置文件的方式。
#mysql的示例配置文件,存放在mysql安装目录下的share/mysql/目录下,提供了my-huge.cnf、my-innodb-heavy-4G.cnf、my-large.cnf、my-medium.cnf和my-small.cnf共5种配置文件模板。可以根据服务器的实际需要进行配置文件的选择。在这里,我们使用的是my-medium.cnf这个配置文件模板。
#拷贝my-medium.cnf文件到mysql各个示例的顶级目录
cp /usr/local/mysql/mysql/share/mysql/my-huge.cnf /usr/local/mysql/mysql3306/my.cnf
cp /usr/local/mysql/mysql/share/mysql/my-huge.cnf /usr/local/mysql/mysql3307/my.cnf
cp /usr/local/mysql/mysql/share/mysql/my-huge.cnf /usr/local/mysql/mysql3308/my.cnf

#修改配置,适用于主库
vi /usr/local/mysql/mysql3306/my.cnf
mysql3306
[mysqld]
port            = 3306
socket          = /home/mysqldata/mysql3306.sock
#skip-locking
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8
max_connections=1024

log-bin=mysql-bin
server-id       = 303306
pid-file        = /home/mysqldata/mysql3306.pid
log-error       = /home/mysqldata/mysql3306.err

#修改配置,适用于丛库
vi /usr/local/mysql/mysql3306/my.cnf
mysql3307
[mysqld]
port            = 3307
socket          = /home/mysqldata/mysql3306.sock
#skip-locking
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8
max_connections=1024

innodb_buffer_pool_size = 1024M
innodb_additional_mem_pool_size = 128M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 0
#innodb_lock_wait_timeout = 50

log-bin=mysql-bin
server-id       = 303306
pid-file        = /home/mysqldata/mysql3306.pid
log-error       = /home/mysqldata/mysql3306.err

#创建并修改服务文件,mysql的服务文件,和mysql模板配置文件一样,存放在安装目录的share/mysql目录下。名为mysql.server
#拷贝该文件到/etc/init.d目录下,并以mysqld+端口号的形式命名。如:3306端口的服务文件,文件名为mysqld3306
cp /usr/local/mysql/mysql3306/share/mysql/mysql.server /etc/init.d/mysqld3306
cp /usr/local/mysql/mysql3307/share/mysql/mysql.server /etc/init.d/mysqld3307
cp /usr/local/mysql/mysql3308/share/mysql/mysql.server /etc/init.d/mysqld3308
chmod 700 /etc/init.d/mysqld3306 #修改权限
chmod 700 /etc/init.d/mysqld3307 #修改权限
chmod 700 /etc/init.d/mysqld3308 #修改权限

#需要修改服务文件的basedir和datadir配置节。将配置节的信息设定为各自的实例程序和数据所在的路径。
vi /etc/init.d/mysqld3306
basedir=/usr/local/mysql/mysql3306
datadir=/home/mysqldata/mysql3306

vi /etc/init.d/mysqld3307
basedir=/usr/local/mysql/mysql3307
datadir=/home/mysqldata/mysql3307

vi /etc/init.d/mysqld3308
basedir=/usr/local/mysql/mysql3308
datadir=/home/mysqldata/mysql3308


#启动停止
service mysqld3306 start
service mysqld3307 start
service mysqld3308 start
service mysqld3306 stop
service mysqld3307 stop
service mysqld3308 stop

#登录
/usr/local/mysql/mysql3306/bin/mysql --socket=/home/mysqldata/mysql3306.sock
/usr/local/mysql/mysql3307/bin/mysql --socket=/home/mysqldata/mysql3307.sock
/usr/local/mysql/mysql3308/bin/mysql --socket=/home/mysqldata/mysql3308.sock

3306
grant ALL on *.* to jindoc@'%' identified by 'jindoc';
3307
grant SELECT on *.* to jindoc@'%' identified by 'jindoc';
3308
grant SELECT on *.* to jindoc@'%' identified by 'jindoc';

#修改密码,回车后需要输入原始密码
/usr/local/mysql/mysql3306/bin/mysqladmin -uroot -p password chinadoc2010 --socket=/home/mysqldata/mysql3306.sock

#查看mysql引擎,就会看到 SPHINX引擎
show engines;

#有时候,在mysql客户端链接mysql服务器实例的时候,会提示error while loading shared libraries: libmysqlclient.so.16这样的错误。
#出现这个错误,可能是因为你的linux操作系统中的这个库文件位置不正确或不存在。
#解决方法很简单,将/usr/local/mysql/lib/mysql/libmysqlclient.so.16这个文件拷贝到/usr/bin目录下即可。指令如下:
cp /usr/local/mysql/mysql3306//lib/mysql/libmysqlclient.so.16 /usr/lib/


#添加自启动
chkconfig --level 3 mysqld3306 on
chkconfig --level 3 mysqld3307 on
chkconfig --level 3 mysqld3308 on

chkconfig --list


mysql> CREATE DATABASE jd_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> CREATE DATABASE jd_doc DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 

mysql> CREATE DATABASE jd_sys DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


+++++++++++++++++++++++++++++++++++
主从配置,参考:
http://apps.hi.baidu.com/share/detail/5712588
http://www.cnblogs.com/Jonathan/archive/2010/06/30/1768492.html
http://www.blogjava.net/dongbule/archive/2010/08/22/329602.html
http://apps.hi.baidu.com/share/detail/16514570
http://www.51testing.com/?uid-64098-action-viewspace-itemid-213361
http://yakar.iteye.com/blog/176432
http://www.iteye.com/topic/482060
http://blog.sina.com.cn/s/blog_5e3fc5cf0100douh.html

#锁表
FLUSH TABLES WITH READ LOCK;

#主从配置
主 InnoDB 从 MyISAM
1.在主服务器上为从服务器建立一个用户:
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'127.0.0.1' IDENTIFIED BY  'chinadoc2010';

2.编辑主服务器的配置文件:/etc/my.cnf的mysqld处 ,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务
[mysqld]
log-bin = /home/mysql/log/mysql-bin.log
binlog-do-db=jd_db#需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
binlog-ignore-db=不需要备份的数据库苦命,如果备份多个数据库,重复设置这个选项即可
#网站使用的配置
binlog-do-db=jd_db
binlog-do-db=jd_doc
binlog-do-db=jd_sys

3.之后可以得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复
show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 243
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)


4.编辑从服务器的配置文件:/etc/my.cnf
server-id=303307
master-host=127.0.0.1
master-user=slaveuser
master-password=chinadoc2010
master-port=3306
replicate-do-db=jd_db#需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
记得先手动同步一下主从服务器中要备份的数据库,然后重启主,从服务器。

#网站使用的配置
master-host=127.0.0.1
master-user=slaveuser
master-password=chinadoc2010
master-port=3309


4.要验证主从设置是否已经成功,可以登录从服务器输入如下命令:
show slave status\G

4.好了,现在可以停止主数据的的更新操作,并生成主数据库的备份,我们可以通过mysqldump到处数据到从数据库,当然了,你也可以直接用cp命令将数据文件复制到从数据库去
注意在导出数据之前先对主数据库进行READ LOCK,以保证数据的一致性
flush tables with read lock;
mysqldump -h127.0.0.1 -p3306 -uroot -p test > /home/chenyz/test.sql
/usr/local/mysql/mysql3306/bin/mysqldump -h 127.0.0.1 -P 3306  -p  --all-databases > /home/backup/mysql/20101224.sql

/opt/mysql_3306/bin/mysqldump -h127.0.0.1 -uroot -pjindoc --databases  jd_db jd_sys > /home/backup/20101224_b.sql
/opt/mysql_3306/bin/mysqldump -h127.0.0.1 -uroot -pjindoc --databases  jd_doc > /home/backup/20101224_b.sql


rm -rf mysql3307-relay-bin.* mysql-bin.* master.info relay-log.info jd_*
\cp -a /home/mysqldata/mysql3308/jd_* ./

Slave_SQL_Running: NO 时执行;
change master to master_log_file='mysql-bin.000010',master_log_pos=974962314;















sphinx和coreseek安装
-------------------------------------------
http://www.coreseek.cn/products-install/install_on_bsd_linux/
http://www.coreseek.cn/docs/coreseek_3.2-sphinx_0.9.9.html



sphinx的安装和运行测试,关于下载和解压缩sphinx都用上一篇文章里说的。
进入到sphinx的源码文件夹里,运行下列命令就可以安装sphinx了:
cd /usr/src/mysql5.1.54/sphinx-0.9.9
ldconfig /usr/local/mysql/lib/mysql
ldconfig /usr/local/mysql/include/mysql
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
make && make install

    其中--prefix是指向sphinx的安装路径,--with-mysql是指向mysql的安装路径。如果上面都没有报错,那sphinx就成功安装了。

      sphinx的配置文件为sphinx.conf,下面进行配置:
cd /usr/local/sphinx/etc
cp sphinx.conf.dist sphinx.conf
vim sphinx.conf

     进入/usr/local/sphinx/etc文件夹下,看到该文件夹下有下面这些文件:
-rw-r--r-- 1 root root   905 11-04 13:32 example.sql
-rw-r--r-- 1 root root 19003 11-04 13:32 sphinx.conf.dist
-rw-r--r-- 1 root root   948 11-04 13:32 sphinx-min.conf.dist

      把sphinx.conf.dist复制出来成sphinx.conf,并进入修改它的一些数据库的配置,主要是修改数据库地址,数据库用户、密码,还有数据库名这些,这里我们用安装mysql自带的test库进行测试。

      运行该目录下的example.sql脚本,把数据导到数据库中:
mysql -u mysql < /usr/local/sphinx/etc/example.sql

phinx的配置文件也创建完了,数据也导进去了,接下来就用下面命令来创建索引:
/usr/local/sphinx/bin/indexer

      创建索引是报了一个这样的错误:/usr/local/sphinx/bin/indexer: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory,主要原因是在上一篇中安装完mysql后没有设置环境变量,可以用下面方法解决:
locate libmysqlclient    #运行该命令找到关于libmysqlclient.so.16的文件
cp /usr/local/mysql/lib/mysql/libmysqlclient.so.16 /usr/lib/libmysqlclient.so.16    #然后把该文件的一个连接复制到在环境变量的文件夹/usr/lib/下

     再次运行创建索引命令就能完成索引的创建了。

      然后用下面命令进行搜索测试:
/usr/local/sphinx/bin/search test

      但此时报了一个search error: failed to open /usr/local/sphinx/var/data/test1.sph: No such file or directory.这样的错误,网上找了一下解决方法是在创建索引是加上--all参数,也就是:
/usr/local/sphinx/bin/indexer --all

      --all参数官方文档的说明是:

--all tells indexer to update every index listed in sphinx.conf, instead of listing individual indexes. This would be useful in small configurations, or cron-type or maintenance jobs where the entire index set will get rebuilt each day, or week, or whatever period is best. Example usage

      重新创建索引后再次运行测试 /usr/local/sphinx/bin/search test
     
     
===================================================================
sphinx不支持中文分词,国内也有人写了好多个分词组件,本文就讲安装LibMMSeg,它是Coreseek.com为 Sphinx 全文搜索引擎设计的中文分词软件包,其在GPL协议下发行的中文分词法,采用Chih-Hao Tsai的MMSEG算法。

        先从http://www.coreseek.cn/news/7/99/    上下载到LibMMSeg的安装包,如下:
cd /usr/local/src/
wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.13.tar.gz -c

       然后解压缩:
tar -zxv -f coreseek-3.2.13.tar.gz

       进入到mmseg所在文件夹,然后编译:
cd coreseek-3.2.13/mmseg-3.2.13/
./configure --prefix=/usr/local/mmseg

       编译过程中报了一个config.status: error: cannot find input file: src/Makefile.in这个的错误,然后运行下列指令再次编译就能通过了:
aclocal
libtoolize --force
automake --add-missing
autoconf
autoheader
make clean

       然后再进行编译和安装:
./configure --prefix=/usr/local/mmseg
make && make install

       把mmseg的命令加到环境变量中,然后运行mmseg,就能输入安装成功的信息了:
ln -s /usr/local/mmseg/bin/mmseg /bin/mmseg
mmseg



====================================================
Sphinx是一个在GPLv2下分发的全文检索引擎;Coreseek 是一个可供企业使用的、基于Sphinx(可独立于Sphinx原始版本运行)的中文全文检索引擎,按照GPLv2协议发行,商业使用(例如, 嵌入到其他程序中)需要联系我们以获得商业授权。

       一般而言,Sphinx是一个独立的全文搜索引擎;而Coreseek是一个支持中文的全文搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的中文全文搜索能力。Sphinx/Coreseek可以非常容易的与SQL数据库和脚本语言集成。

       Coreseek是也就是LibMMSeg和sphinx的结合,在sphinx0.99之前,要安装LibMMSeg的中文分词都要给sphinx打上中文补丁然后再安装,到这0.99,他们就把sphinx和LibMMSeg结合在一起提供中文搜索服务,不在以补丁的形式提供。

       进入上一节下载的coreseek的目录下进行安装:
cd /usr/src/mysql5.1.54/coreseek-3.2.13/csft-3.2.13/
./configure --prefix=/usr/local/coreseek --with-mysql=/usr/local/mysql/mysql3307 --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/

make && make install

参考http://www.coreseek.cn/docs/coreseek_3.2-sphinx_0.9.9.html

cd /usr/local/coreseek/etc
cp sphinx.conf.dist csft.conf
vi csft.conf

/usr/local/coreseek/bin/indexer -all

这里的安装跟上一篇安装的sphinx一样的,就是加入了LibMMseg分词,安装完创建测试数据,创建搜索配置文件csft.conf,过程跟上一篇一样,但是创建索引时报了一个这样的错误:FATAL: index 'test1': 'synonyms': failed to open '/data/exceptions.txt',进入配置文件csft.conf,把/data/exceptions.txt注释掉即可,创建完索引,远行测试OK。








查询mysql慢日志
/usr/local/mysql/mysql3308/bin/mysqldumpslow  /home/mysqldata/mysql3308-slow.log

你可能感兴趣的:(sphinx)