从MyISAM迁移到XtraDB

只是几个我在迁移到XtraDB时找不到的问题。

我的团队一直在使用MyISAM dbs进行生产,并且想知道迁移到Percona的XtraDB有多难,你会怎么做?

我需要首先将MyISAM迁移到InnoDB,还是可以直接转到XtraDB?

我在我的Fedora机器上安装了带有XtraDB软件包的Percona服务器,但是文档对于如何使用它并不是很有帮助,所以我想知道Percona只是在标准的MySQL安装上搭载,还是单独的实体?

关于如何解决我的问题的文档的链接将是太棒了。

你可以在之前或之后进行转换。 我更喜欢之前的版本,因为一旦Percona服务器安装完成,数据就准备就绪,并运行。 我这样说是因为在赠款表方面你需要解决一些毛病。 (这尤其包括mysql.user表,因为MySQL 5.0的mysql.user表有37列,而MySQL 5.5的mysql.user表有42列)我不想先搞砸连接或SQL授权问题。

这里是执行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的build议(理想,完美世界)值。 如果这个数字超过服务器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 

CAVEATS

  • innodb_log_file_size应该是innodb_buffer_pool_size的25%
  • key_buffer_size现在可以缩小

步骤07) service mysql start

这将需要一段时间(2-4分钟),因为mysqld将创build

  • ib_logfile0
  • 格式化它
  • 创buildib_logfile1
  • 格式化它。

步骤08)执行Percona升级

XtraDB是InnoDB的直接替代品。 现有的MyISAM表不受影响。 为了从XtraDB中获得任何好处,您必须将它们转换为InnoDB。 您可以在安装XtraDB之前或之后执行此操作。