我目前使用 phpmyadmin 进行大部分数据库管理。它工作得很好,但我对其他可能工作得更快/更有效/等的工具感兴趣......
在 *nix 机器上用于 MySQL 的最佳和/或替代管理工具是什么?
我正在批量更新 SQL Server 数据库。我将所有numeric(38,0)列更改为int (是的,SQL Server 脚本是从 Oracle 脚本创建的)。使用 SMO 和 C# (我是一名软件工程师),我设法生成了非常好的脚本,就像SQL Server Management Studio那样。除了一个特定问题外,一切都非常好:
对于少数表格,当我调用ALTER TABLE [myTable] ALTER COLUMN [columnA] INT它时,它决定还将列从NOT NULL to NULL. 这当然是一个大问题,因为我需要为那些特定列上的大多数表重新生成主键。
显然,我有很多选择使用 SMO 来找出哪些列是主键,并在我更新数据类型之后或同时强制它们为 NOT NULL,但我真的很好奇是什么导致了这种情况。
在 Windows Server 2008 上运行的 MySQL Server (v5.1.45-community) 上调度数据库备份时,使用什么机制来触发备份运行?我认为它正在使用 Windows 任务计划程序,但我没有看到这些备份的任何明显任务。SQL Server 使用单独的代理服务。MySQL中有类似的东西吗?
附加信息:备份是使用 MySQL Administrator 设置的。我知道如何安排备份,但它们没有运行,我正在寻找有关从哪里开始排除故障的见解。
innodb 运行缓慢是一个已知问题
SELECT count(*) FROM Table
Run Code Online (Sandbox Code Playgroud)
因此我避免了这一点。但是我注意到,每当我登录到 phpmyadmin 时,它都会自动count(*)为我的 innodb 表执行19k 行,这可能需要长达一分钟的时间来执行。然而它并没有启动这样的count(*)为另一个有 400 万行的 innodb 表的操作。
另一个线索,在 phpmyadmin 中,在 Records 列下,19k 行表的记录数显示精确值,而 400 万行表显示约
我知道 innodb 表给出了行数的估计。但似乎对于较小的表,在这种情况下有 19k 行,phpmyadmin 决定做一个count(*)而不是仅仅给出一个估计。
问题是,有没有办法阻止 phpmyadmin 对我的 innodb 表进行此类计数?每当我刷新我的 phpmyadmin 屏幕时,只给出一个估计而不是进行昂贵的行计数是可以的。
我们公司希望将 MySQL 用于一种软件产品。该产品不是开源的。自由使用它是否合法?
如果没有,PostgreSQL 怎么样?这符合我们的目的吗?
我目前正在阅读CJ Date 的“SQL 和关系理论”。虽然我在书中讲得很远,但我还是有一些基本问题。我想知道“逻辑差异”这个词是什么意思,这本书确实试图用例子解释这个词,但并没有真正解释它的意思(或者我可能理解错了??)
这是书中的一小部分:
我说过关系和关系的图片之间存在逻辑差异。逻辑差异的概念源自维特根斯坦的格言:
我直观地知道逻辑差异意味着什么,我知道关系和关系图片之间的区别是什么。我想要的是“逻辑差异”概念的正式定义,所以我很清楚它的含义。
从 MySQL 5.1 开始,数据不再需要完全在内存中。
我读过索引列(我认为整个索引结构)必须仍在内存中(MySQL High Availability,2010,第 533 页,“MySQL Cluster 将所有索引列保留在主内存中”)。
鉴于此,如果没有足够的内存(即,一个巨大的数据库(> 100GB 或 1TB),在具有低内存配置的服务器上运行(例如,2 个数据节点,每个节点具有 1GB 的 RAM))会发生什么情况?
我有一个几乎从不查询的数据包日志数据库。它只需要快速插入即可。我使用 InnoDB 是因为我想保持 ACID 合规性,因为即使丢失一个数据包也可能对我们的客户造成损害。在性能调优方案中,我通过多个数据库连接向服务器发送 1,000,000 个数据包。但是无论我在 my.cnf 中使用什么设置,我都无法让 mysqld 进程在 12 核的系统上使用超过 900% 的 CPU。(盒子上没有其他东西在运行。)
我设置了以下内容
innodb_file_per_table = 1innodb_write_io_threads = 64innodb_read_io_threads = 64innodb_thread_concurrency = 0如果我使用 MyISAM,我可以在大约 6 秒内写入所有数据包。但是 InnoDB 大约需要 25。我可以让 MySQL 使用剩余的系统资源并更快地插入吗?
编辑:这是表的架构:
+-------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| t | bigint(20) unsigned | YES | | NULL | |
| a | char(1) | YES | | NULL | |
| sa | …Run Code Online (Sandbox Code Playgroud) 我有需要支持 3 种不同语言的新 SQL Server 数据库。
如果我希望我的数据库支持以下内容,我需要选择哪些字符集和排序规则:
过去几天我们一直在努力解决一个问题。我们要为一个有60M记录的大表添加索引。起初我们尝试使用基本的 mysql 语法添加它。但它堵塞了我们的生产数据库。该表在生产查询中使用非常频繁。所以一切都受苦了。
我们的数据库托管在 AWS RDS 上。它的Mysql 5.7。我们使用 Laravel 作为 PHP 框架
我们读到的下一件事是,我们可以将当前表复制到新表中。然后为新表添加索引。然后移动 laravel 模型以使用新表。我们认为这是有道理的,而且很容易
但是将表数据从一个表复制到新表需要花费相当多的时间。我们的计算表明这需要几天的时间。我们尝试使用 Laravel 以及 SQL 命令。但无论哪种方式都太慢了。
然后我们尝试将数据导出为 CSV 并导入,但还是太慢了。前几百万条记录插入速度很快,但随后表的插入速度会变得非常慢。
最后我们尝试了mysqldump,我们意识到它在插入时也会锁定新表,所以也许这就是它足够快的原因。将表格复制到新表格大约花了 6 个小时。但是我们在这个方法中丢失了 2M 条记录。我们还检查了导出/导入时有多少记录进入现有表,只有大约 100K。因此导出/导入丢失了 190 万条记录,我们无法找出原因。
在经历了所有这些不同的方法之后,我们决定让应用程序停机并在巨大的表上添加索引
我想知道其他人也面临这个问题吗?有没有办法在一个巨大的表上添加索引而不导致生产停机?或者有没有更快的方法来复制大的 mysql 表而不丢失数据?
mysql ×7
innodb ×2
sql-server ×2
amazon-rds ×1
backup ×1
collation ×1
license ×1
memory ×1
myisam ×1
mysql-5.1 ×1
mysql-5.5 ×1
mysql-5.7 ×1
ndbcluster ×1
optimization ×1
postgresql ×1
tools ×1
windows ×1