在将数据库复制到新服务器后,MySQL中存在InnoDB表,但却显示它们不存在。
在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到新的导入服务器
尝试一下吧!
问题的原因是在复制数据库到新服务器后,原本存在的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+ "'"。这样,字符串连接方式正确,数据库名称就能够正确地被解析和识别,从而解决问题。
当我从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参数来处理表名的大小写。