mysql – 从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)服务mysql停止

步骤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)服务mysql启动

这需要一段时间(2-4分钟)因为mysqld会创建

> ib_logfile0
>格式化它
>创建ib_logfile1
>格式化它.

步骤08)执行Percona升级

转载注明原文:mysql – 从MyISAM迁移到XtraDB - 代码日志