Mysql

從 MyISAM 遷移到 XtraDB

  • May 2, 2013

只是我在任何地方都找不到關於遷移到 XtraDB 的幾個問題。

我的團隊一直在使用 MyISAM dbs 進行生產,並且想知道遷移到 Percona 的 XtraDB 有多難,您將如何去做?

我必須先將 MyISAM 遷移到 InnoDB 還是可以直接遷移到 XtraDB?

我在我的 Fedora 機器上安裝了帶有 XtraDB 包的 Percona Server,但是文件對於如何使用它並不是很有幫助,所以我想知道 Percona 只是搭載標準 MySQL 安裝還是它是一個單獨的實體?

關於如何解決我的問題的文件連結會很棒。

您可以在之前或之後轉換。我更喜歡以前,因為一旦 Percona Server 安裝、啟動並執行,數據就會準備好。我這樣說是因為您必須解決有關授權表的一些棘手問題。(這尤其包括 mysql.user 表,因為 MySQL 5.0 的 mysql.user 表有 37 列,而 MySQL 5.5 的 mysql.user 表有 42 列)我不想先搞砸連接或 SQL Grants 問題。

這是執行 InnoDB 轉換的腳本:

步驟 01) 執行這些命令

echo "SET SQL_LOG_BIN = 0;" > /root/ConvertMyISAMToInnoDB.sql
MYSQL_CONN="-u... -p..."
mysql ${MYSQL_CONN} -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') InnoDBConversionSQL FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql','performance_schema') ORDER BY (data_length+index_length)" > /root/ConvertMyISAMToInnoDB.sql

該腳本查找所有數據庫中的所有表,可以從最小的開始按大小順序轉換它們。

步驟 02) 執行腳本

mysql ${MYSQL_CONN} -A < /root/ConvertMyISAMToInnoDB.sql

步驟 03) 執行此查詢

SELECT SUM(data_length+index_length)/POWER(1024,2) RecommendedInnoDBBufferPoolSize
FROM information_schema.tables WHERE engine='InnoDB';

這將為您提供 innodb_buffer_pool_size 的建議(理想、完美世界)值。如果此數字超過伺服器 RAM 的 75%,則使用 75% 的 RAM。

步驟 04)service mysql stop

步驟 05)rm -f /var/lib/mysql/ib_logfile* /var/lib/mysql/ibdata1

步驟 06) 將以下內容添加到 /etc/my.cnf

[mysqld]
innodb_file_per_table
innodb_buffer_pool_size=<SizeFromStep03>M
innodb_log_file_size=512M
innodb_log_buffer_size=64M
innodb_open_files=4096
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=5000
key_buffer_size=8M

注意事項

  • innodb_log_file_size 應該是 innodb_buffer_pool_size 的 25%
  • key_buffer_size 現在可以縮小

步驟 07)service mysql start

這需要一段時間(2-4 分鐘),因為 mysqld 會創建

  • ib_logfile0
  • 格式化它
  • 創建 ib_logfile1
  • 格式化它。

步驟 08) 執行 Percona 升級

引用自:https://serverfault.com/questions/427607