Mysql

將 mysql myisam 5.1 升級到 mysql 5.6:強制 innodb 恢復?

  • July 21, 2019

由於需要全文搜尋,我在 mysql 5.1 上使用 myisam 繼承了一個數據庫。我現在讀到全文搜尋可在 mysql 5.6 innodb 上使用。這樣做可以解決很多問題,只要它有效。

我打算在實驗數據庫上嘗試它,但這裡有一個難題:我有一個來自生產數據庫的 mysqldump,它自然希望將表重新創建為 myisam。

有幾個選項出現:

  1. 編輯轉儲文件——這是一個 8 GiB 文件,因此編輯可能有點困難。
  2. 只需載入轉儲並隨後轉換引擎 - 但在文件中採購似乎需要很長時間
  3. 找到一些魔法,無論轉儲說什麼,都會迫使新的數據庫引擎成為 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 實例。

試一試 !!!

引用自:https://dba.stackexchange.com/questions/57986