假设 (field1, field2) 上有一个复合主键
另外,让 X 是一组理论的 n 个数字
插入看起来像这样:
INSERT INTO table(field1, field2)
VALUES([a number picked at random from X], [an incrementing number]);
Run Code Online (Sandbox Code Playgroud)
每插入 m 个数字,从 X 中随机删除一个数字,并随机添加另一个数字。
假设 n=1000 和 m=500。换句话说,每插入 500 次,集合 X 中的一个元素就会改变,但集合 X 总是有 1000 个元素。
B+树会变得多么支离破碎?
在 MySQL 5.6.7 之前,官方 RPM附带这些文件:
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-small.cnf
Run Code Online (Sandbox Code Playgroud)
在5.6.8中,这些文件都没有了,只剩下一个:
/usr/share/mysql/my-default.cnf
Run Code Online (Sandbox Code Playgroud)
我不是 MySQL 调优专家,过去总是以my-innodb-heavy-4G.cnf. 现在我只剩下一个配置选项:
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
Run Code Online (Sandbox Code Playgroud)
调整这个变量是大多数优化的关键,还是在安装新服务器时我应该调整其他相关参数?
在这种情况下,我在哪里可以找到等效的文件,该文件将包含仅 InnoDB 的 4GB RAM 专用 MySQL 服务器的合理默认值?
我们正在计划一系列服务器/软件升级并且很好奇。
我们有一个运行 MySQL 5.0 的 RHEL5 安装,我们希望将其复制到运行 CentOS 6 和 MySQL 5.5 的新(虚拟化)服务器。然后,将来我们会将 RHEL5 机器撞到 CentOS6 和 MySQL5.5。如果可能,我们希望首先进行此复制。
所以简短的问题是,有没有人尝试将 MySQL 5.0 主服务器复制到 5.5 从服务器?
假设我有一个包含 2938347 行的 MyISAM 表(以及其他表)。此表仅用于日志记录,不会经常清空。
如果不定期归档或删除这些行,是否保留该表会影响服务器性能?
那么,MySQL 服务器上的表/数据库大小如何,但不经常访问。这些表与经常访问/查询的表共存,我想知道它们是否导致问题。
大流士
我有一个主从设置 mysql 5.5,设置很好,除了从站不会二进制日志到标准 mysql-binlog 只到中继日志。我担心这可能是因为我对此事缺乏了解,但我的最终目标是设置另一个以当前奴隶为食的奴隶,然后将两者指向一个主主关系。
我的问题是,虽然我可以在从站上插入一条记录并且主复制位置(在从站上)会改变,但它不会因同一数据库上的从站活动而改变。从站不会将活动转储到两个日志中吗?如果我将辅助从站指向中继日志,那么我的选项是什么?
希望这是有道理的。
我在从站上的 my.ini 设置是这样的,还设置了唯一的服务器 ID 和主机名:
binlog-do-db=our_database
binlog-ignore-db=mysql
binlog-ignore-db=test
replicate-do-db=our_database
Run Code Online (Sandbox Code Playgroud) 我需要创建一个转储文件,其中包含来自数据库的单个存储过程,而不是所有例程。
我试过这样的事情:
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 文件。
在虚拟化的 Ubuntu 12.04 上安装 MySQL 5.6.10 会出现大量内存占用。mysqld 进程在正常运行时间的几个小时内声明所有可用内存并强制主机交换:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16229 mysql 20 0 26.8g 21g 8736 S 42 93.4 37:23.22 mysqld
Run Code Online (Sandbox Code Playgroud)
它曾经增长到 50 GB,因此大大超过了数据集本身:
Current InnoDB index space = 5.25 G
Current InnoDB data space = 23.07 G
Run Code Online (Sandbox Code Playgroud)
通常,我可以通过发布 释放 ~ 3 GB FLUSH TABLES,尽管它比kill -9mysql 进程快得多,让它重新启动并为 InnoDB 运行恢复。使用的表几乎完全是 InnoDB,innodb_buffer_pool_size 已设置为 5 GB(将其设置为 16 GB 后会迅速耗尽可用物理内存并换出超过 18 GB)。
当系统正在交换时,我可以观察到相当高的“换出”计数器数字(vmstat 在突发期间显示约 1k 页/秒)并且几乎没有任何东西换回(每分钟几十页)。我首先怀疑内存泄漏,但到目前为止还没有发现任何支持这个假设的东西。
SHOW INNODB STATUS 表示缓冲池仅部分填充: …
有人告诉我,可以使用 rsync 即时备份数据库。我认为这是可能的,但不安全,因为一些日志、缓冲区......没有被刷新。正在从备份中恢复的数据库会不一致。
实际上我不确定为什么使用 rsync 备份不安全。任何人都可以向我解释 mysql 的原因吗?
如何永久打开 mysqld 中的事件调度程序?我正在使用 phpMyAdmin,我已经安排了一个事件,每天在特定时间将记录从一个表复制到另一个表,但记录并不是每天都被复制。我试过设置事件调度程序。
SET GLOBAL event_scheduler="ON";
Run Code Online (Sandbox Code Playgroud)
当我重新启动我的电脑时,事件调度程序被关闭。如何使它始终打开,并且在重新启动 mysqld 时不关闭?
我有用于通过 GTID 复制的 mysql 二进制日志。
我正在尝试显示执行的更新/插入语句,如下所示:
mysqlbinlog --base64-output=DECODE-ROWS mysql-bin.000024
Run Code Online (Sandbox Code Playgroud)
但我所看到的只是这样,没有更新或插入 stmt 的痕迹:
SET TIMESTAMP=1431681617/*!*/;
BEGIN
/*!*/;
# at 746987321
# at 746987392
# at 746987484
#150515 11:20:17 server id 1 end_log_pos 746987515 CRC32 0xeb874754 Xid = 997501767
COMMIT/*!*/;
# at 746987515
#150515 11:20:22 server id 1 end_log_pos 746987563 CRC32 0xc5ece64a GTID [commit=yes]
SET @@SESSION.GTID_NEXT= 'a4ade293-c63a-11e4-94cf-005056944a56:2059057'/*!*/;
# at 746987563
#150515 11:20:22 server id 1 end_log_pos 746987650 CRC32 0x92296355 Query thread_id=71622 exec_time=0 error_code=0
Run Code Online (Sandbox Code Playgroud)
我不确定 GTID 复制的格式/配置以及在哪里寻找它...
mysql ×10
innodb ×3
mysql-5.5 ×3
replication ×3
backup ×2
event ×1
logs ×1
my.cnf ×1
myisam ×1
mysql-5.0 ×1
mysqlbinlog ×1
mysqldump ×1
optimization ×1
performance ×1
phpmyadmin ×1
wamp ×1