小编Rol*_*DBA的帖子

需要有关归档 MySQL (InnoDB) 表的最佳方法的建议

问题:我有两张相当大的桌子。用于用户之间消息的“墙”表,2 GB,900 万行,“章”表,200 万行,18 GB。我想保持“墙”表的活动行数较小,同时我想减小章节表的大小。我犯了一个错误,一开始没有压缩文本数据,我想开始压缩档案中的数据。

对于“墙”表,我认为比某个墙 ID 更旧的所有内容都将被传输并压缩到“wall_archive”。任何想要查看较旧帖子的人都会获得一个“查看存档”链接,其中较旧的帖子查询使用存档表。然后我不时运行一个 cron 作业来执行此操作,并且存档的最后一个墙 ID 将存储在某处以供参考。我在这里走正确的方向吗?

我不太确定如何使“章节”表易于管理。也许归档更少,更需要对表(或两者)进行分区。但最好的方法是什么?我正在考虑将“故事”ID 分成赔率和偶数,并将章节分成两个表格,但我会再次遇到同样的问题。或者我可以存档在某个日期之前修改的故事。或者在某个故事ID之前。关于可扩展解决方案的任何建议?

最后,我应该如何压缩文本数据?我应该在第 9 级使用 PHP 的 gzcompress 函数将文本数据存储到 BLOB 列中,然后在检索时 gzuncompress 数据吗?还是应该使用 MySql 的 COMPRESS/UNCOMPRESS 函数?我倾向于使用 PHP,以防我将 Web 服务器与数据库服务器分开,在那里我可以让 PHP 执行压缩过程而不是更有价值的数据库服务器,但我想知道最佳实践是什么。

注意事项:我仍然需要能够轻松访问旧的“章节”数据。如果需要,“墙”数据可以放入较慢的存储中,但目前没有必要。

环境: 6 Core AMD Opteron, 16 GB RAM, 256 GB SSD for MySql, Percona Server 5.5, Apache, CentOS 6, PHP 5.3, innodb_file_per_table 已启用,数据库和网络服务器在同一台机器上运行,数据库总大小为 30 GB,所有表是 InnoDB

架构

CREATE TABLE `wall` (
  `id_wall` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `id_author` int(10) unsigned NOT …
Run Code Online (Sandbox Code Playgroud)

mysql innodb mysql-5.5

6
推荐指数
1
解决办法
1万
查看次数

有没有办法向 MySQL 的查询优化器提示应该首先完成哪些约束?

这是我当前的查询:

SELECT BusinessID as ID,  
  111151.29341326*SQRT(pow(-6.186751-X(LatLong),2)+pow(106.772835-Y(LatLong),2)*0.98838574205337) AS Distance from
(
    SELECT *
    FROM
      tableauxiliary
    WHERE
      MBRContains(
    GeomFromText (
        'MULTIPOINT(-6.1934985598076 106.76604791159,-6.1800034401924 106.77962208841)'
        ),
        Latlong)=1  
    AND Prominent >15 
) AS TA

    Having Distance <= 18238
    ORDER BY
  Distance
LIMIT
  0, 45
Run Code Online (Sandbox Code Playgroud)

请注意,他们我使用了子查询。它使用子查询的原因是因为我想要

      MBRContains(
    GeomFromText (
        'MULTIPOINT(-6.1934985598076 106.76604791159,-6.1800034401924 106.77962208841)'
        ),
        Latlong)=1   
Run Code Online (Sandbox Code Playgroud)

首先要完成。这将查询时间从 19 秒减少到 0.9 秒。

有没有办法提示mysql查询优化器,这样我就不需要使用子查询

更新:

我试过:

SELECT BusinessID as ID,  
  111151.29341326*SQRT(pow(-6.186751-X(LatLong),2)+pow(106.772835-Y(LatLong),2)*0.98838574205337) AS Distance from tableauxiliary 
USE Index (LatLong_2,FullTextSearch)
WHERE
    MBRContains(
    GeomFromText (
        'MULTIPOINT(-6.1934985598076 106.76604791159,-6.1800034401924 106.77962208841)'
        ),
        Latlong)  
    AND Prominent >15 …
Run Code Online (Sandbox Code Playgroud)

mysql optimization subquery

6
推荐指数
2
解决办法
1990
查看次数

mysql备份策略?

我们有一个 innodb mysql 数据库,所以我们迷失了许多不同的 mysql 备份策略。有人谈论mysqldump,有人谈论第三方工具。有些表我们还计划运行分区。有什么好工具可以帮助完成这项任务?

mysql innodb mysqldump backup

6
推荐指数
1
解决办法
6900
查看次数

如何使用不同的 tmp 目录与 MySQL 进行 INTO OUTFILE 选择?

我正在尝试使用 SELECT ... INTO OUTFILE 查询转储一个大表(40GB,600,000 行)。我想使用它,因为我希望我的结果以特定方式排序(因此 mysqldump 不够好)。

问题是,我收到错误代码 28。我很确定这是因为默认 /tmp 位置的磁盘空间不足。如果我可以在运行时指定用于 tmp 的位置,我在其他地方的磁盘上有足够的空间。

我发现我可以通过修改 my.cnf 来更改 tmpdir,但是我没有足够的服务器权限来修改它或重新启动 mysqld。

这里的解决方案是什么?

编辑:一些答案建议使用 mysql -e。我可能不得不走这条路并对我的文件进行后处理。我想使用 SELECT ... INTO OUTFILE 的原因是因为我想

fields   terminated by '\t'
         escaped by '\\'
lines    terminated by '\r\n' ;
Run Code Online (Sandbox Code Playgroud)

mysql mysqldump backup

6
推荐指数
2
解决办法
1万
查看次数

SQL Server 事务日志初始数据加载

最初使用 5GB+ 填充数据库以避免大型事务日志时的标准流程是什么?根据我的理解,日志文件会在初始加载后跳转到较大的大小,并且从那时起磁盘空间不会减少。定期事务日志备份将释放文件中的空间,但文件仍会很大。

那么是否建议将目标数据库设置为简单备份,加载数据,使用 CHECKPOINT 截断日志,然后将数据库设置为完全备份模式?

此外,我知道可以对日志执行收缩文件操作,但有人说永远不要使用它,其他人似乎建议将其作为解决方案。有什么想法吗?

sql-server backup logs

6
推荐指数
1
解决办法
577
查看次数

带有多个字段分隔符的 MySQL 导入 CSV

我正在尝试将此 CSV 文件导入 MySQL,该文件似乎可选地由多个字符括起来。不幸的是,MySQL 只支持一个字符作为字段分隔符。

我被困在 SQL 中完成整个过程,因为它是更大程序的一部分 - 所以脚本是不可能的。

数据示例:

   reportdata, commission, total, chargeback, company
   ",123,""$116.00 "",""$604.00 "",""($88.00)"", foo
Run Code Online (Sandbox Code Playgroud)

除了尝试在临时表上执行一堆字符串操作之外,我感到很困惑。

有任何想法吗?

mysql import csv

6
推荐指数
1
解决办法
3141
查看次数

我需要索引我分区的键吗?

我有一个 InnoDB 客户表,按 KEY 分区,每个分区是一个美国州。我有电话号码索引,性能很棒。我们还需要在给定的美国州中按姓氏进行 SELECT。我应该在姓氏 AND 状态上创建索引,还是没有意义,因为表已经按状态分区了?

这是否会占用不必要的空间,因为 InnoDB 应该已经知道哪个分区是哪个状态,并且它只需要在该分区中找到与姓氏匹配的所有行?

我们没有做任何连接......这只是一个简单的查询,如下所示:

SELECT * FROM table WHERE lastname = "Smith" AND state="NY"
Run Code Online (Sandbox Code Playgroud)

mysql innodb index partitioning mysql-5.5

6
推荐指数
1
解决办法
3271
查看次数

如何从数据库转储单个存储过程

我需要创建一个转储文件,其中包含来自数据库的单个存储过程,而不是所有例程。

我试过这样的事情:

mysqldump -u root -pssmart --skip-triggers --no-create-info --no-data \
    --no-create-db --skip-opt test_fshop SP_ITEM_SALES_REPORT -R \
    > test_fshop_routines.sql 
Run Code Online (Sandbox Code Playgroud)

test_fshop是我的数据库名称,SP_ITEM_SALES是我的 SP。我想要我的 SP 作为 .sql 文件。

mysql mysqldump backup stored-procedures

6
推荐指数
1
解决办法
2万
查看次数

如何在 MySQL phpmyadmin 中使用 2 个自增列

是否可以使用 2 个自动增量值?

  • 一个从0开始
  • 另4000400起

请帮我

mysql phpmyadmin auto-increment

6
推荐指数
2
解决办法
5万
查看次数

未为 Amazon MySQL RDS 中的主用户定义超级权限

我在亚太(新加坡)地区的亚马逊 rds 上创建了一个中型实例。我已经用主密码创建了我的主用户。它在我本地 PC 上安装的工作台上工作/连接正常。当我要在该实例上创建函数时,它会显示以下错误

错误 1418:此函数的声明中没有 DETERMINISTIC、NO SQL 或 READS SQL DATA,并且启用了二进制日志记录(您可能希望使用不太安全的 log_bin_trust_function_creators 变量)

在我的实例中,我的变量 (log_bin_trust_function_creators) 显示为 OFF。现在,当我使用变量进行更改时

SET GLOBAL log_bin_trust_function_creators = 1;
Run Code Online (Sandbox Code Playgroud)

它给了我另一个错误

错误代码:1227。访问被拒绝;您需要(至少其中之一)此操作的 SUPER 权限

我不知道如何解决这个错误。

有人可以帮忙吗???

mysql mysql-5.5 amazon-rds

6
推荐指数
1
解决办法
2万
查看次数