Questions tagged «mysql»

MySQL的所有版本(不是Microsoft SQL Server)。如果与此问题相关,还请添加特定于版本的标记,例如mysql-5.7。


5
在同一台物理服务器上运行复制是否明智?
我正在考虑为我的数据库设置主从复制。从属服务器将用于冗余,可能还用于报告服务器。但是,我遇到的最大问题之一是,我们已经在数据中心实现了最大的供电能力。因此,添加另一台物理服务器不是一个选择。 就cpu而言,我们现有的数据库服务器未得到充分利用(四核的平均负载从未真正超过1)。因此,最主要的想法是投入一些新的驱动器,并将内存增加一倍(从8GB到16),并在同一台物理计算机上运行另一个mysql实例。每个实例将具有用于数据库的单独磁盘。 这个想法有什么问题吗? 编辑(更多信息):幸运的是,我从未发生过任何严重的事情来关闭服务器,但是我正在尝试提前计划。我们当然有每晚可以从中恢复的备份。但是我认为,如果主服务器的驱动器发生故障(如果整个计算机都熄灭,显然不会),那么将冗余数据存储在单独的磁盘上将提供更快的解决方案。 至于报告方面,我们要报告的任何表都是MyIsam。因此,对要写入的同一表进行昂贵的读取可能会使服务器瘫痪。我的假设是有一个从属服务器进行报告不会影响主服务器,只要我们向其提供足够的内存即可(因为cpu负载尚未成为问题)。


2
将600GB表索引键数据类型从INT更改为BIGINT的最快方法
我需要将600GB MySQL表中的数据类型从INT更改为BIGINT。该列具有唯一索引。对于未签名的INT,我可能会很好,但是我认为更改为BIGINT或BIGINT会非常痛苦。该表的引擎是InnoDB。什么会更容易: 更改表 复制结构和 INSERT INTO (SELECT *) 转储表和更改转储文件表定义 还要别的吗? 更新:根据要求,MySQL ver 5.5.15,没有外键并创建表: CREATE TABLE `tbl` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `created_at` datetime NOT NULL, `tid` bigint(20) NOT NULL, `t` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `f` tinyint(1) NOT NULL, `i_id` bigint(20) NOT …


6
如何在MySQL中将列添加到大表
我是PHP开发人员,所以不要严格。我有一张大桌子〜5.5gb转储。我们的项目经理决定在其中添加新列以执行新功能。表是InnoDB,所以我尝试了什么: 使用表锁更改屏幕中的表。花了大约30个小时,什么也没有。所以我就停止了。首先,我犯了一个错误,因为我没有结束所有事务,但是第二次不是多重锁。状态为copy to tmp table。 由于我还需要对此表进行分区,因此我们决定进行转储,重命名并使用相同的名称和新的结构来创建表。但是转储正在严格复制(至少我没有发现其他东西)。所以我添加了一个新的转储列sed并进行查询。但是一些奇怪的错误开始了。我相信这是由字符集引起的。utf-8中的表和文件在之后成为us-ascii sed。所以我在30%的数据上遇到了错误(未知命令'\'')。所以这也是一个坏方法。 还有什么其他方法可以完成此操作并提高性能(我可以使用php脚本来完成,但是要花很多时间)。INSERT SELECT在这种情况下的性能如何。 感谢您的任何进步。
13 mysql  innodb 

1
慢查询未记录
我试图在我们的服务器上启用慢速查询日志记录,以便识别可以使用优化的任何查询。听起来很简单,但是没有写入我的文件。我没有收到任何错误或类似信息,似乎没有记录缓慢的查询。我记得配置更改后重新启动mysql。 我正在使用MySQL Ver 5.1.61。这是my.cnf中的内容: slow-query-log=1 slow-query-log-file=/var/logs/my.slow.log long_query_time=1 文件/var/logs/my.slow.log以mysql作为所有者,也是出于调试的目的,我对日志文件进行了所有读/写操作。 我在上面将long_query_time设置为1,因为我只是想看看它是否在工作。我尝试将其设置得较低(例如0.3),但仍然没有记录任何内容。我知道我的应用程序正在运行的查询需要1秒钟以上的时间,并且我还故意SELECT sleep(10);在终端中运行了查询日志()进行测试,并且该日志仍然为空。 我看了看文档,从中可以看出这应该行得通。有人对我做错了什么建议吗?任何建议将不胜感激,非常感谢! 编辑:根据评论中的要求,我运行了查询: `SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');` 结果: 10.0000000 /var/run/mysqld/mysqld-slow.log OFF 显然,我的配置更改没有考虑在内,因为我相信这些是默认设置。我非常确定我正在修改的my.cnf文件已被解析,好像我输入了无效值一样mysql重启时将出错。这可能是怎么回事? 另一个编辑: 采纳@RolandoMySQLDBA的建议并将慢速查询配置行移至[mysqld]我的设置后,似乎可以节省。现在,上面的variable_value查询的结果是: 1.0000000 /var/logs/my.slow.log ON 但是我仍然没有看到文件my.slow.log被写入。我认为这不是权限问题,因为该文件由mysql拥有,并且我已为该文件上的所有用户添加了所有权限。有人能想到为什么这样不起作用的原因吗? 编辑:解决了!慢查询日志的路径不正确,应该是/var/log/my.slow.log而不是/ var / log * s * / my.slow.log。感谢大家的帮助,我学会了分配!

4
将大查询分为多个小查询是否更好?
在某些情况下,需要进行非常大的查询才能将多个表及其中的子选择语句连接在一起以产生所需的结果。 我的问题是,我们应该考虑使用多个较小的查询,并通过多次查询数据库来将逻辑操作带入应用程序层,还是一次完成所有查询就更好了? 例如,考虑以下查询: SELECT * FROM `users` WHERE `user_id` IN (SELECT f2.`friend_user_id` FROM `friends` AS f1 INNER JOIN `friends` AS f2 ON f1.`friend_user_id` = f2.`user_id` WHERE f2.`is_page` = 0 AND f1.`user_id` = "%1$d" AND f2.`friend_user_id` != "%1$d" AND f2.`friend_user_id` NOT IN (SELECT `friend_user_id` FROM `friends` WHERE `user_id` = "%1$d")) AND …

2
在选择上获得固定值
我需要执行SELECT查询,以获取字段“ money”的值。该字段实际上在数据库中不存在。我只需要查询返回具有固定值的该字段;在这种情况下,以美元为单位。 如何在SELECT语句中返回常量值?
13 mysql 

4
无法将MySQL数据输出到文件
我正在尝试将数据从MySQL表输出到文件,但出现权限错误: $ pwd /home/dotancohen $ mkdir in $ chmod 777 in/ $ mysql -ugs -p mysql> USE someDatabase; mysql> SELECT * FROM data INTO OUTFILE '/home/dotancohen/in/data.csv'; ERROR 1045 (28000): Access denied for user 'gs'@'localhost' (using password: YES) mysql> 如果有问题的目录更改为777,那么MySQL用户为什么不能写该文件?有趣的是,我也无法写到/ tmp /。 编辑: 看起来数据库用户具有适当的MySQL权限: mysql> show grants; +----------------------------------------------------------------------------------+ | Grants for …

2
MySQL CAST与转换
假设我有一个VARCHAR(其中包含数字数据),我想将其用于简单的计算(向其中添加10)。根据有关CAST函数的MySQL文档,我可以使用CAST或CONVERT完成此操作: SELECT (CAST(field1 AS SIGNED)) + 10 FROM myTable; 要么: SELECT (CONVERT(field1,SIGNED)) + 10 FROM myTable; 从这个意义上说,CAST和CONVERT有什么区别?他们俩真的都在完成同一件事吗?
13 mysql 

1
MySQL分片与MySQL集群
仅考虑性能,MySQL集群能否击败自定义数据分片MySQL解决方案?分片=水平分区 当我提到分片时,我考虑的是在应用程序层中进行的分片,例如,在独立的MySQL实例之间平均分配记录。对于两个服务器,可能是(密钥mod 2)。
13 mysql  ndbcluster 

4
MySQL InnoDB缓冲池实例的最佳数量
服务器特征 系统总内存:8GB(运行MySQL以及上面运行的MySQL以外的其他东西,即不专用于MySQL) CPU核心数:6 我在数据库中的数据量约为2GB 我将InnoDB缓冲池大小设置为4GB 哪个更好: Innodb缓冲池实例设置为1? Innodb缓冲池实例设置为2(每个实例2GB)? Innodb缓冲池实例设置为4(每个实例1GB)? Innodb缓冲池实例设置为8(默认设置) 因此,我不确定如何推理缓冲池实例,以及整个“在InnoDB缓冲池如此大的情况下使用实例或遭受OS交换”。


2
如何在INSERT中处理auto_increment键(SELECT * FROM…)
我table1和table2MySQL中。两者都有一个主auto_increment键id。 如果表模式匹配,并且INSERT INTO table1 (SELECT * FROM table2)对插入到其中的新行该table1怎么办?难道他们保留他们原来的id价值和产生冲突时,从行table1具有相同的id?auto_increment是否生成新值?它取决于存储引擎还是锁定?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.