小编Sit*_*thu的帖子

动态更改 innodb_flush_log_at_trx_commit

这与这个问题有关。它确实有助于提高 InnoDB 表的性能。

根据MySQL 手册innodb_flush_log_at_trx_commit是一个全局动态变量。因此,我可以使用 SET GLOBAL 命令更改它,它似乎正在工作。

mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2;
Query OK, 0 rows affected

mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2     |
+--------------------------------+-------+
1 row in set
Run Code Online (Sandbox Code Playgroud)

但是,它并没有改变实际的 MySQL 设置。当我更新my.cnf并重新启动 MySQL 服务器时,它确实有效。那么,我不能在运行时更改全局变量?

我更喜欢 default value innodb_flush_log_at_trx_commit=1,但我需要在运行大型数据库的还原过程之前将其更改为 2 以加快速度。但是当过程完成后,我想将值改回 1。是否可以在运行时执行此操作?

我无法访问共享托管服务器上的my.cnf

mysql innodb windows configuration

11
推荐指数
2
解决办法
3万
查看次数

不能删除列:在外键约束中需要

我有一个带有两个外键约束的表,如下所示:

mysql> SHOW CREATE TABLE `user`;

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `region_id` int(11) unsigned DEFAULT NULL,
  `town_id` int(11) unsigned DEFAULT NULL,
  `fullname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `username` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `active` tinyint(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `FK_G38T6P7EKUXYWH1` (`region_id`),
  KEY `FK_J8VWK0ZN7FD2QX4` (`town_id`),
  CONSTRAINT `FK_G38T6P7EKUXYWH1` FOREIGN KEY (`region_id`) REFERENCES `region` (`id`) ON UPDATE NO ACTION,
  CONSTRAINT `FK_J8VWK0ZN7FD2QX4` …
Run Code Online (Sandbox Code Playgroud)

mysql mariadb foreign-key mariadb-10.1

6
推荐指数
1
解决办法
5万
查看次数