参考:
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
分享到:
相关推荐
### PHP+Mysql+Sphinx 高效的站内搜索引擎搭建详解 #### 一、引言 随着互联网技术的发展,网站内容越来越丰富,如何快速高效地为用户提供搜索服务成为了一个重要的问题。本文旨在介绍如何利用PHP、MySQL以及Sphinx...
**定义**:Sphinx是一款开源全文搜索引擎工具,可以集成到MySQL数据库中使用。 - **核心优势**: - 高效索引建立:支持批量文档导入与实时增量更新。 - 强大搜索能力:具备模糊匹配、近义词扩展等功能,提升查询...
安装过程涉及多个组件,包括Python支持、LibMMSeg、MySQL、Sphinx以及SphinxSE存储引擎。以下是关键步骤的概述: 1. **安装python支持**:Python在某些情况下用于配置和管理工具。 2. **编译安装LibMMSeg**:这是...
### Sphinx 安装及使用详解 #### 一、Sphinx简介 Sphinx是一款高性能的全文搜索引擎,主要用于提高大型数据集的搜索效率。它能够独立运行,也可以作为应用程序的一部分嵌入到其他软件中。Sphinx主要适用于对性能...
### Windows 下安装使用 Sphinx #### 一、Sphinx 概述 Sphinx 是一款由俄罗斯开发者 Andrew Aksyonoff ...通过以上步骤,你可以成功地在 Windows 环境下安装并使用 Sphinx,为你的应用程序提供强大的全文搜索功能。
### Sphinx+PHP检索引擎知识点详解 #### 一、为什么要使用Sphinx 假设您正在运营一个拥有超过一百万条记录的大型论坛。随着数据量的增长,用户可能会反馈说论坛的搜索功能变得异常缓慢,这不仅降低了用户体验,还...
- 将MySQL FTS应用程序移植到Sphinx。 - 对于没有Sphinx API支持的语言,使得这些语言也可以使用Sphinx。 - 当需要在MySQL端对Sphinx结果集做额外处理时(如原始文档表的JOIN操作,MySQL端的额外过滤等)。 #### 二...
### Sphinx for Chinese + Windows配置流程详解 #### 一、前言 Sphinx是一款高性能全文搜索引擎,广泛应用于网站、应用程序及数据库系统中。由于其高效、灵活的特点,在中文搜索领域也得到了广泛应用。本文将详细...
### Sphinx使用手册详解 #### 一、Sphinx简介与特点 Sphinx是一个高效的全文检索引擎,主要用于提升数据库的全文搜索性能。它支持多种数据库系统,包括MySQL和PostgreSQL,并能够提供更加专业和优化的搜索功能。...
**C++ Sphinx 垂直搜索引擎详解** Sphinx 是一个高效、可扩展的全文搜索引擎库,特别适合于作为嵌入式解决方案使用。它由 C++ 编写,提供了丰富的功能和高度灵活性,允许开发者将其集成到自己的应用程序中,实现...
1. **高速索引**:Sphinx可以实时或定期从数据源(如MySQL、PostgreSQL等)构建索引,且索引速度非常快。这使得Sphinx能够处理大量的数据并提供即时的搜索响应。 2. **高精度搜索**:Sphinx支持布尔运算符、短语...
### SphinxSE中文手册2 for sphinx 2.03 关键知识点详解 #### 一、概述 本手册针对Sphinx 2.03版本,主要介绍了如何使用SphinxSE插件进行全文检索,并且着重强调了`weights`和`groupsort`这两个特性。 #### 二、...
在本篇文章中,我们将深入探讨`PhpSou搜索引擎 v3.1.1`的核心特性、安装过程以及其与Sphinx的整合技术。 一、`PhpSou搜索引擎`简介 `PhpSou搜索引擎`是一款专为PHP开发者设计的开源搜索引擎,它提供了友好的用户...
SphinxSE是Sphinx的一个MySQL存储引擎插件,允许在MySQL中直接使用Sphinx进行全文检索,无需额外的中间层或API调用。这极大地简化了开发流程,提高了检索效率。 ##### 创建SphinxSE表 要使用SphinxSE,首先需要在...
Sphinx支持多种数据库后端,如MySQL、PostgreSQL等,并且可以通过API方便地集成到各种应用程序中。 - **Coreseek** 是一个基于Sphinx开发的中文全文检索/搜索软件,以GPLv2许可协议开源发布。它专为中文搜索和信息...