備份數據庫
$ mysqldump -uroot -p db > backup/db.sql
上面的terminal 執行
出現了下面的錯誤
mysqldump: Got error: 1449: The user specified as a definer ('someuser'@'%') does not exist when using LOCK TABLES
問題解決:
原因:
主要原因是當時創建 view procedure 或者trigger使用的user 已經被刪除了 這個問題最常見的是數據庫遷移之后
我的問題是我db里面一個view 的創建者沒有了
可視化查看 information_schema.VIEWS 表格中 查看Deafiner 一欄
沒修改之前是另外一個 deafiner
解決方法:
1. 修改definer 下面是生成修改
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
修改 `youruser`@`host` 變成你的 'your-database-name' 變成你的db
就會生成一個alter 語句 可視化編輯也可以
修改成比如說 root@localhost 或者 任何一個用戶 (當然你要考慮到這個view 要擁有什么權限,你備份的時候使用的是super 權限 可以不用管那么多,你可以直接備份下來,但是要使用 這個view 就要考慮權限 了,我直接修改成root@localhost 了)
如果是一個procedure 修改 deafiner
UPDATE `mysql`.`proc` p SET = 'user@%' WHERE definer='root@%'
具體的也可以先查看 proc 表 然后再修改
2. 增加一個definer
錯誤: The user specified as a definer ('root'@'%') does not exist
執行:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
上面有兩處需要修改成你自己的 一個 'someuser'@'%' 還有一處 'complex-password' 改成你的密碼