peers 表 memory 转 InnoDB

NP 1.5 版本 peers 表使用的是 memory 引擎,此引擎不支持行级锁,不抗并发。如果发现锁表较多,MySQL 负载高,建议修改为 InnoDB。

宝塔面板无法直接修改引擎,可以登录 MySQL 控制台,按以下步骤进行。注意请先升级到 1.7.4 或以上,保证你的字段跟以下一致。

1, 创建新表:

CREATE TABLE `peers_new` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `torrent` int(11) unsigned NOT NULL DEFAULT '0',
  `peer_id` binary(20) NOT NULL,
  `ip` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `port` smallint(5) unsigned NOT NULL DEFAULT '0',
  `uploaded` bigint(20) unsigned NOT NULL DEFAULT '0',
  `downloaded` bigint(20) unsigned NOT NULL DEFAULT '0',
  `to_go` bigint(20) unsigned NOT NULL DEFAULT '0',
  `seeder` enum('yes','no') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'no',
  `started` datetime DEFAULT NULL,
  `last_action` datetime DEFAULT NULL,
  `prev_action` datetime DEFAULT NULL,
  `connectable` enum('yes','no') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'yes',
  `userid` int(11) unsigned NOT NULL DEFAULT '0',
  `agent` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `finishedat` int(11) unsigned NOT NULL DEFAULT '0',
  `downloadoffset` bigint(20) unsigned NOT NULL DEFAULT '0',
  `uploadoffset` bigint(20) unsigned NOT NULL DEFAULT '0',
  `passkey` char(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `ipv4` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `ipv6` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `userid` (`userid`),
  KEY `idx_torrent_peer` (`torrent`,`peer_id`),
  KEY `idx_peer` (`peer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


2, 将旧表数据导入:
insert into peers_new select * from peers;

3, 将旧表改名:
rename table peers to peers_old;

4, 将新表改为 peers:
rename table peers_new to peers;

观察一段时间是否正常,如果正常,可以把 `peers_old` 删除。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注