您可以做以下两件事之一:
设置手动故障切换
在其中一台DB服务器上使用DBVIP点设置MySQL循环复制。另一台DB服务器将用作被动但热备用。您必须限制对DBVIP的所有读写操作。假设您想要的DBVIP是10.1.2.30。您只需在作为主服务器的DB服务器上运行它
DBVIP=10.1.2.30
ip addr add ${DBVIP}/24 dev eth1
如果主机出现故障(崩溃、重新启动等),请在另一台DB服务器上运行这两个命令。然后,您可以让系统管理员通过重新建立循环复制将旧的主服务器设置为新的从服务器。
使用设置自动故障切换DRBD 和ucarp, 您可以配置两个具有磁盘级冗余的DB服务器。同样,您必须限制对DBVIP的所有读写操作。通过提供两个脚本,DBVIP和自动故障切换将由ucarp管理
upscript将编写脚本以执行以下操作
断开DRBD连接,将DBRD升级为主DBVIP(通过运行ip addr add
)
在/var/lib/mysql上装载DRBD服务mysql start
downscript
downscript将编写脚本以执行以下操作服务mysql停止ip addr del
DBVIP断开DRBD的连接将DRBD降级到辅助位置,注意自动故障切换要保留所有MySQL数据以在一致状态下经受意外故障切换,请将所有MyISAM表转换为InnoDB。下面是执行此操作的脚本:
MYISAM_TO_INNODB_CONVERSION_SCRIPT=/root/ConvertMyISAMToInnoDB.sql
echo "SET SQL_LOG_BIN = 0;" > ${MYISAM_TO_INNODB_CONVERSION_SCRIPT}
mysql -u... -p... -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)" >> ${MYISAM_TO_INNODB_CONVERSION_SCRIPT}
无法转换使用全文索引的MyISAM表。未来,MySQL 5.6应该支持InnoDB中的全文索引。