mysql problem

George Toft plug-discuss@lists.plug.phoenix.az.us
Wed, 15 Jan 2003 16:40:24 -0500


Lynn David Newton wrote:
> 
> Any mysql experts out there?
> 
> I've got a large test database and a recent backup (1
> AM last night) made with mysqldump. I've been horsing
> with the contents of the database using forms, and in
> the process deleting records. The easiest way to get
> back where I started is to do a drop database, create
> database, and then input from the mysqldump backup
> file. Simple plan, right? Should work, right? This goes
> in a file:
> 
> mysqladmin -u rradmin --password=r3g101 drop rrtest2
> mysqladmin -u rradmin --password=r3g101 create rrtest2
> mysql -u rradmin --password=r3g101 --database=rrtest2 < DATA.sql
> 
> *BUT* ...
> 
> Have you ever had the output of mysqldump not work as
> an input file? Fortunately, I tested this using a
> different database name first. Here's what I get when i
> try to run that third line:
> 
> ERROR 1064 at line 679: You have an error in your SQL syntax near 'field(field),
>   KEY type(type),
>   KEY tsrc(tsrc)
> ) TYPE=MyISAM' at line 10
> 
> The table in question looks like this:
> 
> CREATE TABLE fnames (
>   field varchar(40) NOT NULL default '',
>   type varchar(10) NOT NULL default '',
>   fieldorder int(4) default '0',
>   longdesc varchar(200) default NULL,
>   required int(1) default '0',
>   tsrc varchar(40) NOT NULL default '',
>   visible int(1) default '0',
>   misc blob,
>   KEY field(field),
>   KEY type(type),
>   KEY tsrc(tsrc)
> ) TYPE=MyISAM;
> 
> It's the first KEY definition it doesn't like. If I
> comment out "KEY field(field)," it works, except of
> course then the field called 'field' is not set as an
> index.
> 
> I suspect some name space pollution here. Perhaps some
> later version of mysql since this database was
> originally created came along in which they decided
> that you shouldn't have a field called 'field', or in
> which a field called 'field' shouldn't be an index
> (key).
> 
> Any insights here? This sort of thing drives me crazy.
> I'm trying to accomplish some simple testing and am
> prevented by an increasing stack of sub-problems.
> 
> --
> Lynn David Newton
> Phoenix, AZ


I recall having some kind of problem like this.  My solution was to put
a "use" command at the top of the mysql dump.  The important piece of my
script:

echo "use $DBNAME;" >backup.sql
echo "" >>backup.sql
mysqldump -h $DBHOST -P $DBPORT -u $DBUSER -p$DBPASSWORD --opt $DBNAME
>>backup.sql

(the variables are defined previously - allows me to share code without
exposing usernames/passwords).

The resulting dump is this:

use stocks;

# MySQL dump 8.16
#
:
:
:
#
# Table structure for table 'stock'
#

DROP TABLE IF EXISTS stock;
CREATE TABLE stock (
  symbol char(7) NOT NULL default '',
  name varchar(30) NOT NULL default '',
  init_margin float unsigned zerofill default NULL,
  maint_margin float unsigned zerofill default NULL,
  conversion float unsigned zerofill default NULL,
  PRIMARY KEY  (symbol)
) TYPE=MyISAM;
:
:
:

This takes care of everything for me.  Maybe it will help.

George