從 MyISAM 遷移到 XtraDB
只是我在任何地方都找不到關於遷移到 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 升級