【问题标题】:Optimize all MySQL tables using MyISAM使用 MyISAM 优化所有 MySQL 表
【发布时间】:2017-10-14 11:45:04
【问题描述】:

我在这里找到了很棒的文章 http://www.empulsegroup.com/?p=342

但是当我尝试时:

root@vps:~# for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; do mysql -e "optimize table $i"; done
ERROR 1046 (3D000) at line 1: No database selected
  1. 你能给我一些使用它的例子吗?
  2. 如何优化 --all-databases?

非常感谢您的宝贵时间。

【问题讨论】:

    标签: mysql myisam


    【解决方案1】:

    尽管在那篇文章中声明,您可能不需要经常运行优化表。它确实不会使查询运行得更快。

    但是让我们谈谈您遇到的错误以及如何解决它。

    查询的第一行输出不是表名,而是列标题,在本例中是您使用的表达式。

    for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; 
    do
      echo "$i";
    done
    

    输出:

    concat(table_schema,".",table_name)
    test.m
    

    (我不得不创建一个表m是MyISAM,因为我不正常使用MyISAM,我推荐you should not use MyISAM either。)

    如果您想跳过列标题,请使用-N--skip-column-names 选项。

    for i in `mysql -N -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; 
    do
      echo "$i";
    done
    

    输出:

    test.m
    

    您可能还想对架构和表名进行分隔,因为这两个名称都可能是保留字。

    for i in `mysql -N -e 'select concat("\`",table_schema,"\`.\`",table_name,"\`") from information_schema.tables where engine="MyISAM"'`; 
    do
      echo "$i";
    done
    

    输出:

    `test`.`m`
    

    【讨论】:

      【解决方案2】:

      您可以使用-D or --database=... 参数指定用于mysql 命令的数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-25
        • 2022-07-28
        • 2012-10-20
        • 2023-04-07
        • 2012-05-31
        • 1970-01-01
        • 2017-06-16
        相关资源
        最近更新 更多