在将数据库复制到新服务器后,MySQL中存在InnoDB表,但却显示它们不存在。

11 浏览
0 Comments

在将数据库复制到新服务器后,MySQL中存在InnoDB表,但却显示它们不存在。

我使用mysqldump导出了我的数据库,然后在另一台服务器上导入到MySQL中。现在,如果我执行"show tables"命令,我可以看到所有的表,但实际上我无法从这些表中进行选择或描述。

错误1146 (42S02):表'mydatabase.user'不存在

我的所有表都是InnoDB类型的。我看到有人遇到一个问题,他们使用的是旧密码,所以我在my.cnf文件中明确将其设置为0,并确保mysql表中的所有密码都是新密码所应有的41个十六进制数字。

0
0 Comments

在MySQL中,如果数据库目录中存在.frm文件,"show tables;"命令可以正常工作。只要这些文件存在,MySQL就可以看到表的定义。

如果你将数据导入到MySQL中,出现了这个错误消息,我会立即执行以下命令(这是MySQL 5.1.45版本,但在MySQL 5.x中也适用):

mysql> show engines;

+------------+---------+----------------------------------------------------------------+--------------+------+------------+

| Engine | Support | Comment | Transactions | XA | Savepoints |

+------------+---------+----------------------------------------------------------------+--------------+------+------------+

| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |

| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |

| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |

| CSV | YES | CSV storage engine | NO | NO | NO |

| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |

| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |

| ARCHIVE | YES | Archive storage engine | NO | NO | NO |

| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |

+------------+---------+----------------------------------------------------------------+--------------+------+------------+

8 rows in set (0.00 sec)

如果导入数据的服务器显示InnoDB被禁用,则表示出现了大问题。你应该执行以下操作:

1) 删除新导入的数据库服务器中的所有数据

2) 清理InnoDB设置

3) 运行SHOW ENGINES; 并确保InnoDB完全可用!!!

4) 重新加载mysqldump到新的导入服务器

尝试一下吧!

0
0 Comments

问题的原因是在复制数据库到新服务器后,原本存在的InnoDB表在MySQL中却显示不存在。解决方法是检查代码中的SQLCA.DBParm参数,确保其正确设置为"Database='" +sle_database.text+ "'"。

在解决问题之前,先来解释一下代码中出现的情况。在这个例子中,SQLCA.DBParm参数被错误地设置为"Database = "sle_database.text""。然而,正确的设置应该是"Database='" +sle_database.text+ "'"。

为了更好地理解问题,我们可以将字符串拆分为三部分来讨论:

a) "Database=' - "Database='"

b) (数据库的名称) - +sle_database.text+

c) ' - "'"

正确的设置应该是将这三部分字符串连接在一起,形成正确的数据库名称。而在错误的设置中,字符串连接的方式是错误的,导致数据库名称被错误地解析。

通过将SQLCA.DBParm参数正确设置为"Database='" +sle_database.text+ "'",问题得以解决。这样,字符串连接方式正确,数据库名称就能够正确地被解析和识别,从而InnoDB表也能够正确地被显示出来。

总结起来,当在复制数据库到新服务器后发现InnoDB表无法显示时,可能是由于代码中的SQLCA.DBParm参数设置错误所致。解决方法是检查并确保SQLCA.DBParm参数正确设置为"Database='" +sle_database.text+ "'"。这样,字符串连接方式正确,数据库名称就能够正确地被解析和识别,从而解决问题。

0
0 Comments

当我从Windows服务器更换到Linux服务器时,我遇到了这个问题。表是文件,而Windows文件是不区分大小写的,但Linux文件是区分大小写的。在我的应用程序中,在SQL查询中,有时我使用大写表名,有时使用小写,所以有时会得到与您相同的结果。

问题的原因是Windows服务器和Linux服务器对文件名的大小写处理方式不同。在Windows服务器上,文件名是不区分大小写的,而在Linux服务器上,文件名是区分大小写的。因此,当将数据库从Windows服务器复制到Linux服务器时,由于文件名的大小写不一致,可能会导致某些表在复制后无法识别。

解决这个问题的方法是统一表名的大小写。可以将所有表名都转换为小写或大写,以便在不同的操作系统上保持一致。这样,无论在Windows服务器还是Linux服务器上,都能正确识别表。

以下是一个示例,演示如何在MySQL中更改表名的大小写:

# 将表名转换为小写
RENAME TABLE `Table1` TO `table1`;
RENAME TABLE `Table2` TO `table2`;
# 将表名转换为大写
RENAME TABLE `table1` TO `TABLE1`;
RENAME TABLE `table2` TO `TABLE2`;

通过执行上述SQL语句,可以将表名统一为小写或大写。

另外,还可以通过在MySQL配置文件中设置参数来解决这个问题。在配置文件中,可以设置"lower_case_table_names"参数的值为1,表示将所有表名转换为小写,或者设置为2,表示将所有表名转换为大写。这样,无论在哪个操作系统上运行MySQL,都能正确处理表名的大小写。

,当将数据库从Windows服务器复制到Linux服务器时,可能会遇到InnoDB表在复制后无法识别的问题。这是因为Windows和Linux对文件名的大小写处理方式不同所导致的。为了解决这个问题,可以统一表名的大小写,或者通过配置MySQL参数来处理表名的大小写。

0