我有一个由 MySQL4 创建的数据库(db4)和一个由 MySQL5 创建的数据库(db5)。db4 包含几个具有字符集 latin1 和几个索引的表,但没有使用 MySQL“PASSWORD”函数加密的数据。db5 为空。
我想将所有表和索引从 db4 迁移到 db5(实际上在同一台服务器上)。理想情况下,这应该在不丢失任何信息的情况下并在短时间内完成。
我需要哪些终端命令从 MySQL4 下载完整的数据库,然后将数据插入 db5?我必须重新创建索引吗?
您可以使用 mysqldump 在 mysql4 中转储数据库。而不是使用 mysql 命令将其上传到 MySQL5。
mysqldump dbname > file
mysql dbname < file
所有索引都将自动重新创建。
如果其他人需要将数据库从 Mysql4 移动到 Mysql5,这就是我所做的。
从 mysql4 服务器转储数据库
mysqldump -uuser -ppass db4 > db4.sql
修复一些语法问题(来源)
# 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
在 mysql5 服务器上,您现在可以导入修改后的 SQL 转储
mysql -uuser -ppass db5 < db4.sql
Sven,我认为在 db4 中备份您的数据并在 db5 中恢复它对您有用。
备份
mysqldump database_name > file_name.sql
恢复
mysql < file_name.sql
也可以使用以下命令在一个步骤中完成:
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。