Mysql
將 mysql myisam 5.1 升級到 mysql 5.6:強制 innodb 恢復?
由於需要全文搜尋,我在 mysql 5.1 上使用 myisam 繼承了一個數據庫。我現在讀到全文搜尋可在 mysql 5.6 innodb 上使用。這樣做可以解決很多問題,只要它有效。
我打算在實驗數據庫上嘗試它,但這裡有一個難題:我有一個來自生產數據庫的 mysqldump,它自然希望將表重新創建為 myisam。
有幾個選項出現:
- 編輯轉儲文件——這是一個 8 GiB 文件,因此編輯可能有點困難。
- 只需載入轉儲並隨後轉換引擎 - 但在文件中採購似乎需要很長時間。
- 找到一些魔法,無論轉儲說什麼,都會迫使新的數據庫引擎成為 innodb。
還有其他選擇嗎?我應該選擇哪個選項?
我會欣然承認 DBA 不是我的主要技能。
我將根據選項#3回答。
您可以轉儲除以下數據庫之外的所有數據庫:
- 資訊模式
- 性能模式
- mysql
你應該像這樣轉儲它:
MYSQL_USER=root MYSQL_PASS=rootpassword MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}" SQL="select group_concat(schema_name) from information_schema.schemata" SQL="${SQL} where schema_name not in ('information_schema','mysql','performance_schema')" DBLIST=`mysql -ANe"${SQL}" | sed 's/,/ /g'` mysqldump --databases ${DBLIST} | sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' > AllMyData.sql
你可以載入它,你就準備好了。
如果要移動 MySQL 使用者和密碼,請執行以下操作:
MYSQL_CONN="-uroot -ppassword" SQLSTMT="SELECT CONCAT('SHOW GRANTS FOR '," SQLSTMT="${SQLSTMT} QUOTE(user),'@',QUOTE(host),';') " SQLSTMT="${SQLSTMT} FROM mysql.user WHERE user<>''" mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > GetGrants.sql echo "SET sql_log_bin = 0;" > MySQLUserGrants.sql mysql ${MYSQL_CONN} -AN < GetGrants.sql | sed 's/$/;/g' >> MySQLUserGrants.sql rm -f GetGrants.sql
然後,只需將 MySQLUserGrants.sql 導入 MySQL 5.6 實例。
試一試 !!!