这与这个问题有关。它确实有助于提高 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> 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)