1

我有一个由 MySQL4 创建的数据库(db4)和一个由 MySQL5 创建的数据库(db5)。db4 包含几个具有字符集 latin1 和几个索引的表,但没有使用 MySQL“PASSWORD”函数加密的数据。db5 为空。

我想将所有表和索引从 db4 迁移到 db5(实际上在同一台服务器上)。理想情况下,这应该在不丢失任何信息的情况下并在短时间内完成。

我需要哪些终端命令从 MySQL4 下载完整的数据库,然后将数据插入 db5?我必须重新创建索引吗?

4

4 回答 4

2

您可以使用 mysqldump 在 mysql4 中转储数据库。而不是使用 mysql 命令将其上传到 MySQL5。

mysqldump dbname > file
mysql dbname < file

所有索引都将自动重新创建。

于 2012-07-30T08:29:39.177 回答
2

如果其他人需要将数据库从 Mysql4 移动到 Mysql5,这就是我所做的。

  1. 从 mysql4 服务器转储数据库

    mysqldump -uuser -ppass db4 > db4.sql
    
  2. 修复一些语法问题(来源

    # change comment style from -- to #
    sed -r -i -e 's/^--(.*)$/#\1/' db4.sql
    # change type declaration keyword from "TYPE" to "ENGINE"
    sed -i -e 's/) TYPE=/) ENGINE=/' db4.sql
    # adapt  timestamp field definition
    sed -i -e 's/timestamp(14) NOT NULL,$/timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,/' db4.sql
  1. 在 mysql5 服务器上,您现在可以导入修改后的 SQL 转储

    mysql -uuser -ppass db5 < db4.sql
    
于 2015-06-22T13:44:57.060 回答
1

Sven,我认为在 db4 中备份您的数据并在 db5 中恢复它对您有用。

备份

mysqldump database_name > file_name.sql

恢复

mysql < file_name.sql 
于 2012-07-30T08:35:57.440 回答
1

也可以使用以下命令在一个步骤中完成:

 mysqldump -u dbo4 --password="..." --default-character-set="latin1" db4 | mysql -S /tmp/mysql5.sock -u dbo5 --password="..." --default-character-set="latin1" db5

不幸的是,带有特殊字符的标准值没有正确导入,似乎没有办法避免这种情况:How to maintain character-set of standard-values when uploading MySQL-dump

于 2012-08-01T12:48:07.847 回答