QQ扫一扫联系
                             
                        
开启全文索引需要使用
MySQL版本大于5.7,由于该配置比较繁琐,所以所有系统默认不支持,需要通过运维手动开启。
全文索引是为了解决需要基于相似度的查询,而不是精确数值比较。
可以通过 SQL 命令查看当前配置的最小搜索长度(分词长度):
SHOW VARIABLES LIKE 'ft%';
| 变量名 | 描述 | 
|---|---|
| ft_boolean_syntax | 全文搜索的布尔语法 | 
| ft_max_word_len | 最大词长度 | 
| ft_min_word_len | 最小词长度 | 
| ft_query_expansion_limit | 查询扩展限制 | 
| ft_stopword_file | 停用词文件 | 
全文索引的相关参数都无法进行动态修改,必须通过修改 MySQL 的配置文件来完成。修改最小搜索长度的值为 1,首先打开 MySQL 的配置文件 /etc/my.cnf,在 [mysqld] 的下面追加以下内容:
[mysqld]
innodb_ft_min_token_size = 1
ft_min_word_len = 1
配置完后重启 MySQL 服务器。
完成后可使用以下脚本测试全文搜索:
## 查看索引
SHOW INDEX FROM config;
## 删除全文索引
ALTER TABLE config DROP INDEX xxx;
## 创建全文索引,注意该字段只能创建一个全文索引,多余的使用以上的删除语句删除
ALTER TABLE config ADD FULLTEXT(value) WITH PARSER ngram;
## 使用以下语句测试查询
SELECT `id`,`key`,`value`,MATCH(`value`) AGAINST('测试查询') AS _score
    FROM config
    WHERE MATCH(`value`) AGAINST('测试查询')
    ORDER BY _score DESC;
备份
#!/bin/bash
PASSWORD="123456"
DIRECTORY="/mysql-backup"
databases=$(mysql -u root -p$PASSWORD -e "SHOW DATABASES;" | grep -Ev '^(information_schema|performance_schema|mysql|sys)$')
for db in $databases; do
    echo "backup: $db"
    temp_file=$(mktemp)
    mysqldump -u root -p$PASSWORD --databases "$db" > "$temp_file"
    echo "CREATE DATABASE IF NOT EXISTS \`$db\`;" > "${db}_backup.sql"
    echo "USE \`$db\`;" >> "${db}_backup.sql"
    cat "$temp_file" >> "$DIRECTORY/${db}_backup.sql"
    rm "$temp_file"
done
恢复
#!/bin/bash
PASSWORD="123456"
DIRECTORY="/mysql-backup"
for sql_file in "$DIRECTORY"/*.sql; do
    if [[ -f "$sql_file" ]]; then
        echo "正在导入文件: $sql_file"
        mysql -u root -p$PASSWORD mysql < "$sql_file"
    fi
done