Mysql

將mysql伺服器從5.1升級到5.6?

  • August 22, 2015

我的伺服器有 CentOS6。目前我正在使用 Percona 5.1.47 版本。想升級到5.6。

什麼是最好的方法,以及在這樣做之前要記住的先決條件是什麼。

添加此伺服器是主-主複製拓撲。

我有一個更直接的方法來從 MySQL 5.1 升級到 5.6

想法是執行以下操作:

  • 將 MySQL 5.1 中的 mysql 模式作為純 SQL 轉儲到授權文件中

  • 將沒有 mysql 模式的 MySQL 5.1 中的數據轉儲到數據文件中

  • 解除安裝 My​​SQL 5.1

  • 安裝 MySQL 5.6

  • 將授權文件載入到 MySQL 5.6

  • 將數據文件載入到 MySQL 5.6

擷取數據

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SET group_concat_max_len = 1048576;"
SQL="${SQL} SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata"
SQL="${SQL} WHERE schema_name NOT IN"
SQL="${SQL} ('information_schema','mysql','performance_schema')"
DBLIST=`mysql -ANe"${SQL}" | sed 's/,/ /g'`
mysqldump ${MYSQL_CONN} --databases ${DBLIST} > MySQLData.sql

擷取補助金

這是我個人模擬pt-show-grants以擷取 SQL Grants

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';')"
SQL="${SQL} FROM mysql.user WHERE user<>''"
mysql ${MYSQL_CONN} -ANe"${SQL}"|mysql ${MYSQL_CONN} -AN|sed 's/$/;/g' > MySQLGrants.sql

這是我之前討論過這些事情的文章

試一試 !!!

警告:這些步驟中遺漏了許多細節。閱讀文件;查找更多論壇條目;等等。

假設您從 A<->B 開始,這意味著複製是在兩個方向上建立的。還假設您目前只寫給 A。

計劃 A,只有 2 台伺服器

  1. 更改為 A->B:即STOP SLAVE在 A 上。
  2. 將原地 B 升級到 5.5。(保持二進制日誌打開。)
  3. 將 B 地升級到 5.6。
  4. 故障轉移。B 現在是可寫的。A 未使用。(您現在很容易受到攻擊。您需要 3 台伺服器來避免該漏洞。)
  5. STOP SLAVE在 B 上。
  6. 將 A 升級到 5.5 到 5.6
  7. START SLAVE在 A 和 B 上。

方案 B,添加新伺服器

最好將第三台機器 C 加入其中。

  1. 5.6 十攝氏度。
  2. 從 A 複製 ​​C。
  3. 使 C 成為 A 的奴隸:B <-> A -> C(5.6)
  4. 將 C 複製到 B 上並使其成為 C 的從屬:A -> C(5.6) -> B(5.6)
  5. 投擲A;建立雙主:A(未使用);C(5.6) <-> B(5.6)

計劃 C mysqldump

  1. 停止寫入
  2. mysql轉儲
  3. 停止 B,載入 5.6,載入數據,開始寫入。
  4. A 上同上。(注意二進制日誌等)

腳註:Percona Xtradbdump 在很多方面都比較好,而且步驟會有所不同。

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