我是许多不同客户使用的软件即服务应用程序的高级开发人员。我们的软件在由 MySQL 后端提供支持的 Apache / PHP 应用程序服务器集群上运行。在该软件的一个特定实例上,当客户的类别超过 29 个时,查询类别名称列表的 PHP 代码会超时。我知道这毫无意义;数字 30 没有什么特别之处会打破这一点,其他客户的类别超过 30 个,但是,当这个安装有 30 个或更多类别时,问题是 100% 可重现的,而当类别少于 30 个时,问题就会消失。
有问题的表是:
CREATE TABLE IF NOT EXISTS `categories` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(64) NOT NULL,
`title` varchar(128) NOT NULL,
`parent` int(10) unsigned NOT NULL,
`keywords` varchar(255) NOT NULL,
`description` text NOT NULL,
`status` enum('Active','Inactive','_Deleted','_New') NOT NULL default 'Active',
`style` enum('_Unknown') default NULL COMMENT 'Autoenum;',
`order` smallint(5) unsigned NOT NULL,
`created_at` datetime NOT …
Run Code Online (Sandbox Code Playgroud) 假设我有一个带有ENUM('value_one','value_two')
. 我想将其更改为ENUM('First value','Second value')
. 我目前这样做如下:
ALTER TABLE `table` MODIFY `column` ENUM('value_one','value_two','First value','Second value');
UPDATE `table` SET `column`='First Value' WHERE `column`='value_one';
UPDATE `table` SET `column`='Second Value' WHERE `column`='value_two';
ALTER TABLE `table` MODIFY `column` ENUM('First value','Second value');
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方式来做到这一点,例如,用一个做到这一点的方式 单一的 ALTER TABLE
声明?
我最近遇到了以前从未见过的 MySQL 情况。我们有一个有 3 个节点的 Percona 集群。master 停止处理查询,我们托管的 PHP FPM Web 应用程序变得无响应。当我检查时SHOW PROCESSLIST
,MySQL 进程卡在状态:wsrep: initiating replication for write set (-1)
PHP 将所有查询定向到的主数据库和两个辅助数据库之一都是这种情况。这是我看到的输出SHOW PROCESSLIST
:
mysql> show processlist;
+-------+-------------+--------------------+-----------------+---------+-------+--------------------------------------------------------+--------------------------------------------------------------------------------------+-----------+---------------+
| Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined |
+-------+-------------+--------------------+-----------------+---------+-------+--------------------------------------------------------+--------------------------------------------------------------------------------------+-----------+---------------+
| 1 | system user | | NULL | Sleep | 2171 | wsrep: committing write set (542480920) | NULL | 0 | 0 |
| …
Run Code Online (Sandbox Code Playgroud) 我的 trac 服务器最近开始出现问题。它运行的是一个非常过时的 Ubuntu 版本,我无法正确使用apt-get
来纠正我遇到的问题。因此,我备份了机器并全新安装了 Ubuntu 12.04。
现在我有一个正确安装并运行 Postgres 9.1 的新服务器。我想从备份中复制我的旧 Postgres 8.4 数据库并在新安装上进行设置。我该怎么做?
什么是迄今为止我所做的是旧的Postgres 8.4数据和bin目录从备份(复制/var/lib/postgresql/8.4/main
和/usr/lib/postgresql/8.4/bin
)来/tmp/postgres.old
和/tmp/postgres-bin.old
上新安装。我停止使用 Postgres 9.1service postgres stop
并运行以下命令:
sudo -u postgres /usr/lib/postgresql/9.1/bin/pg_upgrade \
--old-datadir=/tmp/postgres.old/main/ \
--new-datadir=/var/lib/postgresql/9.1/main/ \
--old-bindir=/tmp/postgres-bin.old/postgresql/8.4/bin \
--new-bindir=/usr/lib/postgresql/9.1/bin
Run Code Online (Sandbox Code Playgroud)
如Postgres 文档中所述。这似乎很好用,除了我收到错误:
Performing Consistency Checks
-----------------------------
Checking current, bin, and data directories ok
Checking cluster versions ok
connection to database failed: could not connect to server: No such file or directory
Is the server …
Run Code Online (Sandbox Code Playgroud) mysql ×3
alter-table ×1
galera ×1
mysql-5.7 ×1
performance ×1
postgresql ×1
recovery ×1
upgrade ×1