本文目的
使用mysql遇到并解决了一些问题,在这里记录与分享。
问题1:Linux源代码安装mysql时,默认不安装innodb存储引擎,需要手动安装
如果忘记手动安装innodb,那么任何表创建时,如果存储引擎指定为innodb,mysql会默认选择myisam作为存储引擎,并且不报错也不警告,这样就有可能将问题掩饰了。因为有些业务逻辑,可能是依赖外键约束实现的,myisam存储引擎不支持外键约束,那么这些业务逻辑实现起来就会有问题。
手动安装innodb参考链接:http://www.cnblogs.com/bourneli/articles/2632171.html
问题2:mysqldump导出的sql文件是按照表的字母顺序排序而不是依赖关系排序
由于按照字母顺序排序,很容易破环数据库表之间原有的依赖顺序,那么在导入数据时会破坏外键依赖约束而报错。所以,在导入数据时,需要关闭外键约束,导入完毕后再开启。这样导入的速度也会更快。如下面的列子:
set FOREIGN_KEY = 0; // close foreign key constraint // import your data set FOREIGN_KEY = 1;// open foreign key constraint
此问题解答参考链接:http://stackoverflow.com/questions/1382583/foreign-key-constraints-while-dumping-data
问题3:mysql全文检索不支持特殊字符,如“C++”,“C#”
根据官方论坛解释,mysql全文检索不支持特殊字符的索引,可以参考下面两个链接的内容:
解决方案:
1 搜索和检索时,对特殊字符转换成可以作为缩影的字符串,如“+”转成”_plus“等。工作量较大
2 将ft_min_word_len设置为1,然后修复索引,参见这里。这样通过检索”C“就可以检索到”C#“和”C++“,工作量较小,但是结果不准确。
问题4:Can't connect to local MySQL server through socket '/tmp/mysql.sock'
原因:由于启用了另一个mysqld实例,但是配置没有写正确,导致对原来的mysqld实例造成了影响
解决方法:找到mysqld(我的是/etc/init.d/init.d/mysqld),kill掉当前所有myslqd进程,启动mysqld,问题解决!