MySQL 8 から log_bin がデフォルトで有効になっているので、無効にしたい。
以下、 mysql-community-server をインストールして、特に何も設定を変更しない場合の直後の状態。
mysql> select @@global.log_bin;
+------------------+
| @@global.log_bin |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
環境
- CentOS 7.6
- MySQL 8.0.17
うまくいった方法
/etc/sysconfig/mysql
に MYSQLD_OPTS=--disable-log-bin
を書く
いろいろ調べている過程で /usr/lib/systemd/system/mysqld.service
を確認したところ、 /etc/sysconfig/mysql
で mysqld の起動時のパラメータを渡せることがわかった。
# Start main service
ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
ので、 /etc/sysconfig/mysql
に下記の行を追加して、
MYSQLD_OPTS=--disable-log-bin
mysqld を再起動したら、 log_bin は無効になった。
mysql> select @@global.log_bin;
+------------------+
| @@global.log_bin |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
プロセスを確認したところ、ちゃんと --disable-log-bin
付きで mysqld が起動していた。
$ ps aux | grep [m]ysqld
mysql 13890 5.3 18.1 1971088 372208 ? Ssl 16:38 0:01 /usr/sbin/mysqld --disable-log-bin
試したけどうまくいかなかった方法
/etc/my.cnf
に disable_log_bin
を書く
MySQL v8 をインストールしたときに自動生成される /etc/my.cnf
に下記のように書かれていて、 disable_log_bin
の行頭の #
を削除して設定を有効にしたけど、 log_bin は無効にならなかった。
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
systemctl set-environment
systemctl set-environment
で環境変数を設定できるけど、 OS を再起動すると設定した変数は消えていた。(もしかすると永続化する方法があるのかもしれないけど、調べた限りでは見つけられなかった。)
なんらかの理由で OS を再起動した際に自動で起動した mysqld は log-bin が無効化されていないことになるので、この方法は却下した。
$ sudo systemctl set-environment MYSQLD_OPTS=--disable-log-bin