Questions tagged «mysql»

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

2
为什么MySQL允许HAVING使用SELECT别名?
据我所知,在SQL中,逻辑查询处理顺序(即概念解释顺序)以以下方式从FROM开始: 从 哪里 通过...分组 拥有 选择 订购 在此列表之后,很容易看出为什么在WHERE子句中没有SELECT别名,因为尚未创建别名。T-SQL(SQL Server)严格遵循此原则,在传递SELECT之前,您不能使用SELECT别名。 但是在MySQL中,即使应该(在逻辑上)在SELECT子句之前对其进行处理,也可以在HAVING子句中使用SELECT别名。这怎么可能? 举个例子: SELECT YEAR(orderdate), COUNT(*) as Amount FROM Sales.Orders GROUP BY YEAR(orderdate) HAVING Amount>1; 该语句在T-SQL中无效(因为HAVING引用了SELECT别名Amount)... Msg 207, Level 16, State 1, Line 5 Invalid column name 'Amount'. ...但是在MySQL中工作正常。 基于此,我想知道: MySQL是否在SQL规则中采取捷径来帮助用户?也许使用某种预分析? 还是MySQL使用的概念解释顺序与我遵循的所有RDBMS遵循的顺序不同?

2
什么max_allowed_pa​​cket足够大,为什么我需要更改它?
我在主从设置中安装了MySQL(5.5),并创建了另一个从服务器。 我停止了原来的从属服务器,转储了数据,复制并重新导入了它,然后运行良好。我注意到了原始从站的master_log pos,并使用这些命令将其设置在新的从站上 CHANGE MASTER TO MASTER_HOST='<ipaddress>', MASTER_USER='<username>', MASTER_PASSWORD='<password>', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000851', MASTER_LOG_POS=15824150, MASTER_CONNECT_RETRY=10; 当我开始新的奴隶时,我得到了 Last_IO_Error:从二进制日志读取数据时,主机出现致命错误1236:'日志事件条目超过了max_allowed_pa​​cket; 增加master上的max_allowed_pa​​cket 但是,当我启动原始从属服务器时,它运行起来很好,并且现在已同步。 所以问题是: 当前值是16M,我怎么知道要走多大?(我宁愿避免生产服务器的反复试验)。 当原来的从属服务器很好时,为什么我需要增加主控板上的值,问题可能出在新的从属服务器上吗? 更新 正如Rolando在主机,旧从机和新从机上建议的那样,我将max_allowed_pa​​cket增加到1073741824,然后重新启动它们(SET GLOBAL max_allowed_packet = 1073741824;由于某些原因,似乎没有用) 现在最后一个IO错误与以前相同,但是现在我看到了 Last_SQL_Error:中继日志读取失败:无法解析中继日志事件条目。可能的原因是:主站的二进制日志已损坏(您可以通过在二进制日志上运行“ mysqlbinlog”来检查),从站的中继日志已损坏(可以通过在中继日志上运行“ mysqlbinlog”来检查)网络问题,或主从MySQL的错误。如果要检查主站的二进制日志或从站的中继日志,则可以通过在此从站上发布“ SHOW SLAVE STATUS”来知道其名称。 如果我在主文件上执行一个mysqlbinlog,它会用命令滚动很久很久很久-该文件为722M-如果我为从属中继日志执行该操作 错误:Log_event :: read_log_event()中的错误:“健全性检查失败”,data_len:38916267,event_type:69 错误:无法读取偏移量为253的条目:日志格式错误或读取错误。 我检查了变量,但所做的更改有效 mysql>显示变量LIKE'%max_allowed_pa​​cket%'; 在新的从属设备上显示max_allowed_packetAND slave_max_allowed_packet,而在主设备上只有max_allowed_packet 所以我对母版进行了版本检查: mysql> show variables LIKE '%version%'; +-------------------------+--------------------------------------+ | …

8
从SQL转储还原数据库时出错
我对MySQL非常陌生,并且正在Windows上运行它。我正在尝试从MySQL中的转储文件还原数据库,但是出现以下错误: $ >mysql -u root -p -h localhost -D database -o < dump.sql ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: 'SQLite format 3'. …

2
对重复键不执行任何操作
我将LuaSQL与PtokaX API插入下表中。 CREATE TABLE `requests` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `ctg` VARCHAR(15) NOT NULL, `msg` VARCHAR(250) NOT NULL, `nick` VARCHAR(32) NOT NULL, `filled` ENUM('Y','N') NOT NULL DEFAULT 'N', `dated` DATETIME NOT NULL, `filldate` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `nick_msg` (`nick`, `msg`), UNIQUE INDEX `ctg_msg` …

4
Mysqldump表不包括某些字段
有没有一种方法可以mysqldump没有某些字段的表? 让我解释一下: 我有一个名为的MySQL数据库tests。在tests我有3个表:USER,TOTO和TATA。我只是想mysqldump的表的一些领域USER,因此不包括像一些领域mail,ip_login等等。 我怎样才能做到这一点?
14 mysql  mysqldump 


4
在使用InnoDB引擎输入数次演出后,MySQL LOAD DATA INFILE速度降低了80%
我正在通过LOAD DATA INFILE加载100GB文件。我在MyISAM上取得了成功,几个小时就完成了。 我现在正在尝试使用InnoDB。负载以超过10MB / sec的速度快速启动(监视表文件的增长file_per_table是否已打开)。 但是,在大约5GB的数据传输之后,它会降低到2-4MB /秒的范围,而当我超过20GB时,它的传输速度会降低到2MB /秒左右。 InnoDB缓冲池的大小为8G。在运行LOAD DATA INFILE命令之前,我已经完成了以下操作: SET @@session.sql_log_bin=0; SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; alter table item_load disable keys; //Run LOAD DATA INFILE.... 我看不出它启动良好并随着时间的推移变慢的原因。 另外,使用相同的设置,我使用InnoDB和MyISAM和5GB测试数据集对表运行了相同的LOAD DATA INFILE命令,MyISAM快20倍: InnoDB: mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load; Query OK, 2630886 rows affected, …

6
在MySQL中拆分表。好的做法?
我已经开始研究一个现有项目,并且以前的开发人员已将一个表拆分为10个具有相同模式但数据不同的单独表。 这些表如下所示: [tableName_0] [tableName_1] [tableName_2] [tableName_3] [tableName_4] [tableName_5] [tableName_6] [tableName_7] [tableName_8] [tableName_9] 主键是一个整数id字段。该应用程序使用哈希算法(idmod 10)来知道在查找时要访问哪个表。例如id= 10将导致[tableName_0]。 这些表加起来可能有100,000行,并且增长率相对较低。 因此,我的问题是,这是否是可行的解决方案,或者即使在任何情况下都是好的做法。我的理论是推动将它们组合在一起,因为这样会使事情变得更容易,直到UNIONs等。主要缺点是更改所有应用程序代码以及从长远来看是否值得。

3
如何将mysql转换为postgresql?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 我拼命寻找一个转换工具,将一个大的mysql数据库转换为postgresql。我需要的工具/脚本是: 自由 在Linux下工作 易于使用,不会出错 您实际上已尝试并确认有效 最好不要用Java或Ruby编写 我尝试了此处列出的其他工具,但没有一个适合我。 先感谢您。

4
一个大数据库与几个小数据库
我们有一种情况,我们可以(A)使用表前缀在一个MySQL数据库中部署应用程序实例,或者(B)对应用程序的每个实例使用不同的MySQL数据库,例如, 设置“ A”: central_database app1_table1 app1_table2 app1_tablen ... appn_table1 appn_table2 appn_tablen 最终结果是具有许多表的大型数据库。 设置“ B”: app1_db table1 table2 tablen ... appn_db table1 table2 tablen 最终结果是许多数据库带有某些表。 在所有条件都相同的情况下(例如,数据量,应用程序实例数等),采用这两种方法的利弊是什么?什么会对数据库性能和维护造成不利影响?该应用程序基于PHP 5,可在Apache 2.x上运行,而我们正在运行MySQL5.x。 非常感谢您的时间和想法!


3
MySQL table_cache和Opened_tables
我已经看到人们使用Open_tables和Opened_tables的比较来评估table_cache在MySQL中是否太小。但是,我相信Opened_tables在正常运行时间内是累积的,因此这不是有效的比较。唯一需要注意的是,也许Opened_tables只会在未命中时发生碰撞-尽管即使每秒打开的表仍然很小,但逐渐增长它也不是问题。 如果将Open_tables与Opened_tables比较无效,是否还有另一种方法来获取测量数据? 这是在MySQL 5.0上,但也欢迎版本之间存在差异。

5
MySQL服务器已经消失,阻碍了大型转储的导入
我正在尝试将大型SQL转储(2GB)导入到我的Mac上的本地mysql中。我过去已经能够执行此操作(我正在使用MAMP),但是现在在第7758行出现ERROR 2006(HY000):每次尝试导入转储时,MySQL服务器都消失了。该数据库包含innodb表。 我尝试将my-innodb-heavy-4G.cnf文件复制到my.cnf中,以查看这些设置是否有帮助,但是没有运气。 有什么想法要调整吗? 我正在从此处使用“ Mac OS X版本10.6(x86,64位),DMG存档”:http : //dev.mysql.com/downloads/mysql/
14 mysql  innodb  dump  mac-os-x 

1
如何将大型Blob表从mysql迁移到Postgresql?
我现在正在将MySQL数据库迁移到PostgreSQL。除了我拥有的一张桌子外,几乎所有其他东西都很好(嗯,经过大量的谷歌搜索以查找正确的mysqldump参数等),实际上是我的应用程序中最重要的一张桌子。 表的结构很简单: mysql> show create table samples; .. skipped ... CREATE TABLE `samples` ( `File_ID` int(11) NOT NULL, `File` longblob, PRIMARY KEY (`File_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=binary 但它非常大(> 20 Gb)。 我尝试使用mysqldump的--hex-blob参数-但是当我尝试将生成的转储文件用作命令文件时,PostgreSQL不接受这种格式的数据。我尝试过的另一个选项是使用--tab选项只是获取转储,然后使用COPY命令将其插入到PostgreSQL中-但是--hex-blob无法与--tab一起使用,并且PostgreSQL仍然不接受在那说的转储文件是无效字符。 我很高兴收到关于此事的任何建议-尽管我开始认为编写自定义迁移工具毕竟不是一个坏主意...

3
在具有索引列的大表上使用ALTER TABLE
我有一个带有VARCHAR(20)列的大表,我需要对其进行修改以成为VARCHAR(50)列。通常,在此特定表上执行ALTER TABLE(添加TINYINT)大约需要90-120分钟才能完成,因此,我实际上只能在周六或周日晚上这样做,以免影响数据库的用户。如果可能的话,我想在此之前进行此修改。 该列也已建立索引,我认为这会使ALTER TABLE变慢,因为它必须在修改列长后重建索引。 该Web应用程序是在MySQL复制环境中设置的(26个从属和一个主控)。我记得曾经读过某个地方的一种方法,即首先在每个从属服务器上执行ALTER TABLE(对用户的影响最小),然后在主服务器上执行此操作,但是那不是然后尝试将ALTER TABLE命令复制到从属服务器吗? 所以我的问题是:对我来说,以最小的用户干扰来修改此表的最佳方法是什么? 编辑:该表是InnoDB。

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.