mysqldump创建Table而不是View

时间:2017-02-06 23:45:58

标签: mysql

我在服务器上有一个应该备份所有数据库的脚本,但它将所有视图保存为表。我想我有mysqldump错误的密钥。任何人都可以帮我把它们弄好吗?

脚本:

mysql -uroot -pxxx -e "SHOW DATABASES;" > dblist.txt
exec < dblist.txt
read dbname1
while read dbname
    do
       mysqldump -uroot -pxxx -r ${dbname}.sql --routines --add-drop-database --default-character-set=cp1251 --create-options --complete-insert $dbname || echo -e "${dbname} backup failed!"
    done

输出:

--
-- Temporary table structure for view `Events`
--

DROP TABLE IF EXISTS `Events`;
/*!50001 DROP VIEW IF EXISTS `Events`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `Events` (
  `id` tinyint NOT NULL,
  `name` tinyint NOT NULL,
  `subname` tinyint NOT NULL,
  `description` tinyint NOT NULL,
  ...
  `subname_e` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

DB中的实际内容:

MySQL [(none)]> show create table `Events`\G;
*************************** 1. row ***************************
            View: Events
     Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `db`.`Events` AS select `e`.`id` AS `id`,`e`.`name` AS `name`,`e`.`subname` AS `subname`,`e`.`description` AS `description`, ... `e`.`subname_e` AS `subname_e` from (`db1`.`Events` `e` left join `db2`.`EventsSitesLogo` `s` on((`e`.`id` = `s`.`eventid`)))
character_set_client: utf8
collation_connection: utf8_unicode_ci
1 row in set (0.00 sec)

mysql-server版本: 5.1.73

EDIT1 :我偶然发现,我在dump-file中看到的表是一个临时表,用于确保在其他视图的基础上创建的视图正确地说,视图创建的实际算法总是在备份结束时。但是,我的文件以这些行结尾:

/*end of normal tables dump*/    

--
-- Dumping routines for database 'db'
--

没有更多。没有意见。请帮忙。

1 个答案:

答案 0 :(得分:2)

好吧,最终帮助我的是这条线:

mysqldump --add-drop-database --add-drop-table --allow-keywords -QqceKf --routines --create-options --flush-privileges --insert-ignore -r /home/kov/db.sql -uroot -pxxx db

我不确定最终有哪些选项有用,但我认为它是--allow-keys-K。如果我有时间,我可能会稍后调查一下。如果我这样做,我一定会分享我的发现。