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