只是有几个问题,我在任何地方都找不到有关迁移到 XtraDB 的信息。
我的团队一直在使用 MyISAM dbs 进行生产,想知道迁移到 Percona 的 XtraDB 有多难,以及您将如何进行迁移?
我是否必须先将 MyISAM 迁移到 InnoDB,或者我可以直接转到 XtraDB?
我在 Fedora 机器上安装了带有 XtraDB 包的 Percona Server,但是文档对于如何使用它没有什么帮助,所以我想知道 Percona 是否只是搭载在标准 MySQL 安装上,还是一个独立的实体?
关于如何解决我的问题的文档链接非常棒。
答案1
您可以在之前或之后进行转换。我更喜欢之前,因为一旦 Percona Server 安装并运行,数据就会准备就绪。我这样说是因为您必须解决与授权表相关的一些棘手问题。(这尤其包括 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 的建议值(理想、完美世界)。如果此数字超过服务器 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 升级
答案2
XtraDB 是 InnoDB 的替代品。现有的 MyISAM 表不受影响。要真正从 XtraDB 中获益,您必须将它们转换为 InnoDB。您可以在安装 XtraDB 之前或之后执行此操作。