Tag: MySQL

滚动式删除旧行的最佳方法是什么?

我发现自己希望在许多应用程序中滚动删除比(x)日更早的行。 在高stream量的桌子上最有效地做到这一点的最佳方法是什么? 例如,如果我有一个存储通知的表,我只想保留这些7天。 或者我只想保持31天的高分。 现在,我保持一个存储发布时间的行,并运行一个每小时运行一次的cron作业,并以这样的增量删除它们: DELETE FROM my_table WHERE time_stored < 1234567890 LIMIT 100 我这样做,直到mysql_affected_rows返回0。 我曾经一次这样做,但是导致应用程序中的所有内容都挂起了30秒左右,而INSERTS堆积起来。 添加限制工作来缓解这一点,但我想知道是否有更好的方法来做到这一点。

在查询期间与MySQL服务器失去连接

我有一个巨大的表,我需要处理它的所有行。 我总是得到这个丢失的连接消息,我无法重新连接并将光标恢复到最后的位置。 这基本上是我在这里的代码: # import MySQLdb class DB: conn = None def connect(self): self.conn = MySQLdb.connect('hostname', 'user', '*****', 'some_table', cursorclass=MySQLdb.cursors.SSCursor) def query(self, sql): try: cursor = self.conn.cursor() cursor.execute(sql) except (AttributeError, MySQLdb.OperationalError): self.connect() cursor = self.conn.cursor() cursor.execute(sql) return cursor # # db = DB() sql = "SELECT bla FROM foo" data = db.query(sql) for row in […]

Ansible幂等MySQL安装Playbook

我想在AWS上设置一个MySQL服务器,使用Ansible进行configurationpipe理。 我正在使用Amazon的默认AMI( ami-3275ee5b ),它使用yum进行包pipe理。 当下面的Playbook被执行时,一切顺利。 但是,当我再次运行它时, Configure the root credentials的任务失败,因为MySQL的旧密码不再匹配,因为上次运行此Playbook时已更新。 这使得Playbook不具有幂等性,这是我不喜欢的。 我希望能够根据需要多次运行Playbook。 – hosts: staging_mysql user: ec2-user sudo: yes tasks: – name: Install MySQL action: yum name=$item with_items: – MySQL-python – mysql – mysql-server – name: Start the MySQL service action: service name=mysqld state=started – name: Configure the root credentials action: command mysqladmin -u root […]

在MySQL中更改表引擎

我正在使用mysql和mysql工作台。 我用innodb引擎创build了5个表。 我检查了他们的引擎,并且在我插入数据之前,它是innodb。 我从5个MyISAM表插入数据,现在我的innodb表是MyISAM。 我无法改变他们。 我使用了alter table engine = innodb,但是它不起作用。 我只是想知道如何解决这个问题。 非常感谢。

目录,模式,用户和数据库实例之间的关系

要比较不同供应商(Oracle,SQL Server,DB2,MySQL和PostgreSQL)的数据库,我怎样才能识别任何唯一的对象,并且我需要一个目录? 例如,在Java的DatabaseMetadata中,我应该至less指定目录和模式fooPattern。 目录仅仅是数据存储的抽象是真的吗?

转储文件MySQL 5.6.10

我试图从我的MySQL数据库创build一个转储文件,但是当我尝试它总是给我这个错误 操作失败,退出代码2 16:06:07 Dumping proactivetraindb (userstate) Running: mysqldump.exe –defaults-extra-file="h:\docume~1\anarita\locals~1\temp\tmpde5rwy.cnf" –user=root –max_allowed_packet=1G –host=localhost –port=3306 –default-character-set=utf8 "proactivetraindb" "userstate" mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064) MySQl的版本是5.6.10,但MySQLDump的版本是5.5.16 有人知道如何解决这个问题吗?

MySQL按给定顺序selectWHERE IN

我有类似的东西 SELECT * FROM table WHERE id IN (118,17,113,23,72); 如果我只是这样做,它返回ID升序的行。 有没有办法按照IN语句中给出的顺序取回行?

使用命令行更改mysql用户密码

我正在尝试使用命令行更新数据库用户的密码,但这不适用于我。 这是我正在使用的代码: mysql> UPDATE user SET password=PASSWORD($w0rdf1sh) WHERE user='tate256'; 有人能告诉我这个代码有什么问题吗?

将MySQL命令行结果的输出格式更改为CSV

我想从查询的输出中获取无标题的CSV数据到命令行上的MySQL。 我在与MySQL服务器不同的机器上运行这个查询,因此所有那些用“INTO OUTFILE”回答的问题都不好。 所以我运行mysql -e "select people, places from things" 。 输出的东西看起来有点像这样: +——–+————-+ | people | places | +——–+————-+ | Bill | Raleigh, NC | +——–+————-+ 那么,这是不好的。 但是,嘿,看! 如果我把它pipe到任何东西 ,它把它变成一个制表符分隔列表: people places Bill Raleigh, NC 这是更好的 – 至less它是以编程方式parsing。 但是我不想要TSV,我想要CSV,而且我不需要这个头文件。 我可以用mysql <stuff> | tail -n +2去掉头文件 mysql <stuff> | tail -n +2 ,但这是一个麻烦,如果MySQL只是有一个标志忽略它,我想避免。 而且我不能用逗号replace所有的选项卡,因为它不能用逗号来处理内容。 那么,我怎样才能让MySQL省略标题并以CSV格式给我提供数据呢?

执行SQL脚本来创build表和行

我有一个数据库,我使用CREATE DATABASE语句在terminal中创build,我有一个.sql文件充满创build表和行的语句。 我只是想知道在我创build的数据库上执行.sql的命令行是什么?