我正在尝试为MySQL(5.1.54)全文索引设置自己的停用词列表,但遇到配置问题。我尝试了以下步骤:
我通过添加行在 /etc/mysql/my.cnf 中设置了系统变量:
ft_stopword_file = "/home/buli/stopwords.txt"
现在,当我使用 sudo service mysql restart 重启MySQL时, /var/log/mysql/error.log 中有条目说:
/usr/sbin/mysqld: File '/home/buli/stopwords.txt' not found (Errcode: 13)
111218 19:07:18 [Note] Event Scheduler: Loaded 0 events
111218 19:07:18 [Note] /usr/sbin/mysqld: ready for connections.
运行 perror 13 会将其翻译为权限被拒绝问题。但该文件存在,我甚至给它完全权限:
$ ls -l /home/buli/stopwords.txt
-rwxrwxrwx 1 buli buli 6 2011-12-18 18:41 /home/buli/stopwords.txt
是否有任何其他特定于mysql的原因导致此错误发生(因为文件权限似乎没问题)?
答案 0 :(得分:2)
您是否在使用AppArmor,chroot等来保护它的发行版上运行MySQL?
对于AppArmor,您必须更新/etc/apparmor.d/usr.sbin.mysqld(或类似),对于chroot,您必须复制该文件。
最好的办法是将停用词文件放在数据目录下面,并仅提供一个实际路径。
答案 1 :(得分:0)
一:永远不会给任何文件777权利。
二:问题当然是运行MySQL的用户无法进入/home/buli
。如果需要访问文件,则必须至少具有通向该文件的所有目录的执行权限(是的,甚至不需要读取权限)。
答案 2 :(得分:0)
Step 1. Search my.cnf or my.ini
# whereis my.cnf
or
#mysql --verbose --help | less
Step 2. Edit my.cnf file
#sudo vim /etc/my.cnf
# Add stop word file and file should be exist
ft_stopword_file="/usr/mysql/stop_words.txt" ## You can give any path where you put your stop file
Step 3-> Restart mysql
#sudo service mysqld restart
Step 3-> Login my sql
#mysql -u root -p
mysql -> use mydatabase_name;
mysql-> show variables like 'ft_%';
Variable_name | Value
ft_stopword_file /usr/mysql/stop_words.txt`enter code here`
Step -> 5 :- Repair full-test table file
REPAIR TABLE tablename QUICK
mysql-> REPAIR TABLE products QUICK;