Hi,

I'm using dbmail - a program that holds mails in a database, for example mysql. I'm in the process of migrating an old installation to the current one. dbmail does provide a migration script, but I've encountered a problem. It definitely is mysql specific and I haven't yet gotten a response from the dbmail list.

I've narrowed the problem down and have a script ready, which reproduces the problem.

I'm running mysql 5.0.22 on SLES9, using the mysql.com appropriate rpm.

This bugreport might be relevant: http://bugs.mysql.com/bug.php?id=13778

This is part of what happens during the migration process. I first load a dump of the old version and then launch the migration sql script.

I get this output:
mysql mail2 < test.sql
ERROR 1025 (HY000) at line 34: Error on rename of './mail2/#sql-16e4_93' to './mail2/dbmail_messageblks' (errno: 150)

Appreciate any help,

        Alex


Here's the script, launch it on a db without dbmail_messageblks nor messageblks table:

### this part is from the dbmail 1.1 dump with mysql Ver 12.18 Distrib 4.0.12, for pc-linux (i686) ## first I disable foreign key cheks, otherwise I wouldn't be able to create the table

SET FOREIGN_KEY_CHECKS=0;

## creating the table as loading the dump does. all successful

CREATE TABLE messageblks (
  messageblk_idnr bigint(21) NOT NULL auto_increment,
  message_idnr bigint(21) NOT NULL default '0',
  messageblk longtext NOT NULL,
  blocksize bigint(21) NOT NULL default '0',
  PRIMARY KEY  (messageblk_idnr),
  UNIQUE KEY messageblk_idnr_2 (messageblk_idnr),
  KEY messageblk_idnr (messageblk_idnr),
  KEY msg_index (message_idnr),
FOREIGN KEY (`message_idnr`) REFERENCES `messages` (`message_idnr`) ON DELETE CASCADE
) TYPE=InnoDB;


#### from the migration script migrate_from_1.x_to_2.0_innodb.mysql.

SET FOREIGN_KEY_CHECKS=0;
SET SQL_LOG_OFF=1;
SET SQL_LOG_UPDATE=0;

# start a transaction.
BEGIN WORK;

# alter messageblks table
RENAME TABLE messageblks TO dbmail_messageblks;

###### this is the part that fails
ALTER TABLE dbmail_messageblks
        DROP INDEX messageblk_idnr,
        DROP INDEX messageblk_idnr_2,
        DROP INDEX msg_index,
        CHANGE message_idnr physmessage_id bigint(21) NOT NULL DEFAULT '0',
        ADD COLUMN is_header tinyint(1) DEFAULT '0' NOT NULL,
        ADD INDEX physmessage_id_index (physmessage_id),
ADD INDEX physmessage_id_is_header_index (physmessage_id, is_header),
        ADD FOREIGN KEY physmessage_id_fk (physmessage_id)
                REFERENCES dbmail_physmessage (id)
                ON DELETE CASCADE ON UPDATE CASCADE;
UPDATE dbmail_messageblks SET is_header = '0';

COMMIT;

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to