在項目過程遇到一些因為數據庫版本原因發生的一些錯誤
mysql服務器升級數據還原後表結構不能顯示
mysql服務器升級後,數據庫數據還原後,在使用navicat進行desc表結構是出現了
“1558 – Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50018, now running 50146. Please use mysql_upgrade to fix this error.”這樣的錯誤內容
我的mysql服務器是從5.1升級到了5.5版本,而原數據庫表的備份與恢復是直接copy mysql data目錄;數據都是完好的。搜索查明
解決方案就是:
mysql.proc
這個是5.1裡面的系統表來的,用來記錄存儲過程或函數的信息.你的數據庫肯定作過升級或用不同的版本進行備份遷移恢復.
使用命令:mysql_upgrade 就可以解決
mysql_upgrade -u root –datadir=/opt/mysql –basedir=/opt/mysql/data –password=123456
MySQL utility for upgrading databases to new MySQL versions.
5.6.10 mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’ 執行錯誤
mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’: Unknown system variable ‘GTID_MODE’ (1193)
不知道系統變量GTID_MODE,google搜索在mysql官方找到一片bug報告
mysqldump –set-gtid-purged=AUTO does not detect if mysqld has GTIDs
5.6.5 introduced GTIDs. mysqldump 5.6 was made
compatible to use GTIDs
2. In versions < 5.6, where GTIDs are not
even defined, mysqldump 5.6 fails as it cannot
execute ‘SELECT @@GTID_MODE’
3. using –set-gtid-purged=AUTO, should detect whether
the server has GTIDs enabled or not. However, this
option works only for 5.6 versions.
WORKAROUND: if you are using mysqldump 5.6 to backup mysql-5.5 and old database
versions, use –set-gtid-purged=OFF option.
Fix: THe fix is to check for the server version before executing ‘select @@gtid_mode’
5.6.5版本引入GTIDs;如果mysql version 小於5.6,GTIDs是沒有定義的,mysqldump5.6不能執行’SELECT @@GTID_MODE’ ;應該使用–set-gtid-purged=AUTO用來檢測GTIDs是否啟用,但是這個選項只能在5.6版本mysql上工作
我要備份的遠程服務器是
原先按正常的mysqldump語法如下則會報錯
所以應該用mysqldump 5.6 對mysql server版本小於5.6版本或者是更老的版本進行數據備份時,會首先執行“SELECT @@GTID_MODE”這樣的語句(盡管select @@gtid_mode 得到的屬性值它是off)
則要有加上 –set-gtid-purged=OFF 屬性了,導出成功