标签: innodb

导出和导入外键

我们已将站点转移到新服务器,现在它已经运行了三天,没有任何外键处于活动状态。

我怎么能够:

  1. 从旧结构中导出外键(100+表)
  2. 导入密钥,同时忽略完整性问题
  3. 丢弃所有缺少外键的记录

mysql innodb foreign-keys

2
推荐指数
1
解决办法
4428
查看次数

为什么 TokuDB 和 InnoDB 插入比 MyISAM 慢

我准备了以下SQL语句来比较MyISAM、InnoDB和TokuDB的性能行为(INSERT执行100000次):

MyISAM:

CREATE TABLE `testtable_myisam` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `value1` INT DEFAULT NULL, `value2` INT DEFAULT NULL, PRIMARY KEY (`id`), KEY `index1` (`value1`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `testtable_myisam` (`value1`, `value2`) VALUES (FLOOR(RAND() * 1000), FLOOR(RAND() * 1000)); 
Run Code Online (Sandbox Code Playgroud)

索引数据库:

CREATE TABLE `testtable_innodb` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `value1` INT DEFAULT NULL, `value2` INT DEFAULT NULL, PRIMARY KEY (`id`), KEY `index1` (`value1`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `testtable_innodb` (`value1`, `value2`) VALUES (FLOOR(RAND() * 1000), FLOOR(RAND() * 1000));
Run Code Online (Sandbox Code Playgroud)

德库数据库:

CREATE TABLE …
Run Code Online (Sandbox Code Playgroud)

mysql myisam innodb mariadb tokudb

2
推荐指数
1
解决办法
4562
查看次数

MySQL/InnoDB 如何在内部表示 NULL 值?

在 MySQL 中(或者我应该说:使用 MySQL 的 InnoDB 引擎)-如何表示空值?即如果允许列具有NULLs ,表(或单个记录,如果它在记录级别)的表示如何更改?

如果不同的列数据类型不同 - 要么解释表示 NULL 的各种方法,要么只选择一种数据类型(例如INT)。

mysql innodb

2
推荐指数
1
解决办法
450
查看次数

InnoDB MySQL 选择查询锁定

我有可重复读取的隔离级别,并且正在执行: Select * From example查询。我在https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-set.html中读到, select...from 查询使用来自快照的一致读取,因此不对行或表设置锁定。这是否意味着,即使修改不会显示在选择结果中,在选择之后但选择查询结束之前启动的更新、插入或删除仍然能够运行?

mysql innodb

2
推荐指数
1
解决办法
2629
查看次数

MySQL:如何更新所有现有条目的自动增量?

我有一个现有的表,它使用自动增量id作为其主键。

表中有 id 从 1 开始的条目:

id    field1
==    ======
1     foo1
2     foo2
3     foo3
Run Code Online (Sandbox Code Playgroud)

有没有办法更新id所有现有条目,以便 auto_increment 从另一个数字开始?:

id    field1
====    ======
1000     foo1
1001     foo2
1002     foo3
Run Code Online (Sandbox Code Playgroud)

(如果不可能,则不一定必须保留订单)

mysql sql database innodb

2
推荐指数
1
解决办法
3192
查看次数

mysql LAST_INSERT_ID 带参数序列实现

在 mysql 中创建线程安全序列时,我遇到了 mysql 文档 - https://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_last-insert-id,建议创建这样的序列 -

1. mysql> CREATE TABLE sequence (id INT NOT NULL);
2. mysql> INSERT INTO sequence VALUES (0);
3. mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
4. mysql> SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)

我的问题不是步骤 4,为什么我每次需要获取新 id 时不能直接查询序列表来获取 id?像这样 - SELECT id FROM 序列;直接查询序列表与文档中建议的 LAST_INSERT_ID 相比是否有任何缺点?

我的 mysql 实现看起来像这样 -

CREATE TABLE sequence (id INT NOT NULL);
INSERT INTO sequence VALUES (0);



 DELIMITER //
 CREATE PROCEDURE nextVal(OUT nextval INT)
   BEGIN
   UPDATE sequence SET id=LAST_INSERT_ID(id+1);
   SELECT id into nextval FROM …
Run Code Online (Sandbox Code Playgroud)

mysql multithreading innodb

2
推荐指数
1
解决办法
1219
查看次数

在InnoDB中,所有的sql都在事务中吗?

我似乎\xe3\x80\x80有一个错误的想法:

\n\n
update table_name set id=222 where id >333;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的旧观点是上面的单个sql没有begin并且commit不会启动事务。\n但这似乎是错误的。

\n\n
\n\n

但是当我阅读mysql文档时,我发现似乎所有sql都会在一个事务中。如果你不显式使用beginand commit,它将在InnoDB中隐式启动事务。

\n\n
\n

在 InnoDB 中,所有用户活动都发生在事务内。如果启用自动提交模式,则每个 SQL 语句都会自行形成一个事务。默认情况下,MySQL 在启用自动提交的情况下为每个新连接启动会话,因此如果该语句未返回错误,MySQL 会在每个 SQL 语句后执行提交。如果语句返回错误,则提交或回滚行为取决于错误。请参见第 14.21.4 节,\xe2\x80\x9cInnoDB 错误处理\xe2\x80\x9d。

\n
\n\n

我的问题 :

\n\n

是所有的sql都会在事务中执行,无论你是否使用begincommit显式。

\n

mysql innodb transactions

2
推荐指数
1
解决办法
690
查看次数

MySQL 5.7 innoDB集群中的一个节点崩溃,无法将崩溃的节点重新加入集群

我们的环境之一中有一个 MySQL innodb 集群。集群中的一个节点崩溃了。但是,我们能够使崩溃的节点联机,但无法将其加入集群。

有人可以帮助恢复/恢复节点并将其加入集群。我们尝试使用“dba.rebootClusterFromCompleteOutage()”,但没有帮助。

配置:MySQL 5.7.24社区版,CentOS 7,标准三节点innodb集群

集群状态:

MySQL  NODE02:3306 ssl  JS > var c=dba.getCluster()
MySQL  NODE02:3306 ssl  JS > c.status()
{
    "clusterName": "QACluster",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "NODE03:3306",
        "ssl": "REQUIRED",
        "status": "OK_NO_TOLERANCE",
        "statusText": "Cluster is NOT tolerant to any failures. 1 member is not active",
        "topology": {
            "NODE02:3306": {
                "address": "NODE02:3306",
                "mode": "R/O",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            },
            "NODE03:3306": {
                "address": "NODE03:3306",
                "mode": "R/W",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            },
            "NODE01:3306": {
                "address": "NODE01:3306", …
Run Code Online (Sandbox Code Playgroud)

mysql innodb mysql-group-replication mysql-innodb-cluster

2
推荐指数
1
解决办法
2321
查看次数

MySQL ibtmp1 临时表空间增长到多大?

我们有一个 MySQL Master,运行在 1TB SSD 上,带有 500GB 数据库。正如您从下面的屏幕截图中看到的,我们的空间已经用完了,因为ibtmp1它变得太大了。现在是194GB。

在此输入图像描述

MySQL手册说:

“当数据文件达到最大大小时,查询将失败并显示错误,表明表已满。”

因此我们有两个担忧:

  1. 如果这个文件继续增长并填满 SSD,我们的数据库将停止工作。
  2. 如果我们限制该文件的大小,比如 100GB,那么如果它已满,将会“查询失败,并出现错误,表明表已满”。

我确信手册有误导性或者我们有误解,因为MySQL的默认设置不可能允许它填满磁盘然后失败?

mysql innodb temp-tables

2
推荐指数
1
解决办法
3578
查看次数

MariaDB 在一个命令中将所有表的 row_format 设置为动态

我想将数据库中所有表的 row_format 更改为动态。选择数据库后,我可以执行“ALTER TABLE tablenameROW_FORMAT=DYNAMIC;” 手动进行。不幸的是,大约有 100 张桌子需要更换。

如何将特定数据库中与 DYNAMIC 不同的每个表的行格式更改为动态?

我一直在尝试,但找不到有效的解决方案。

mysql sql innodb alter-table mariadb

2
推荐指数
1
解决办法
2096
查看次数