Can MySQL reliably restore backups that contain views or not?

后端 未结 4 982
情书的邮戳
情书的邮戳 2021-02-04 14:15

Environment: Ubuntu 11.10, MySQL 5.1.58

I have a small database with views. When I try to dump and restore, I get

ERROR 1356 (HY000) at line 1693: View          


        
4条回答
  •  清酒与你
    2021-02-04 14:59

    This question is a bit old, but I've just wasted a couple of hours trying to solve the exactly same issue, so I guess a clear explanation could come in handy to someone in the future...

    To cut to the chase: The problem is in the DEFINER field in your mysql dump. It looks something like:

    /*!50013 DEFINER=`some_user`@`localhost` SQL SECURITY DEFINER */
    

    The problem is that this *some_user@localhost* will always be hardcoded to the user account that was used to create the view in the original DB and NOT the user that you've used to export or import the database as one would expect (or at least I did). And later, during the import, this user will be used to re-create the view.

    So you can export/import as root, but if the original DB is running under another user and it has no CREATE VIEW rights in the new database, the import will fail.

    You have two simple solutions:

    1. Search and replace all references to some_user@localhost in your dump file with your new user (the one you use to import the dump, e.g. root@localhost)
    2. Or you can grant *some_user* appropriate rights on the new database so that views can be created under his account

    Either way will fix the problem, but I think the first approach is way better and cleaner, as you don't have to worry about multiple users in the future.

提交回复
热议问题