首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只读MySQL从服务器除了中继-bin日志之外还需要日志吗?

问只读MySQL从服务器除了中继-bin日志之外还需要日志吗?
EN

Database Administration用户
提问于 2016-03-31 21:15:54
回答 1查看 814关注 0票数 1

我在一个新启动的MySQL从服务器上耗尽了磁盘空间。大部分磁盘空间位于/var/log/mysql中,在这里我可以看到mysql-bin.000XXX和mysql-relay-bin.000XXX日志,每个日志都是1.1G。

传统的只读MySQL奴隶需要这两种方式吗?mysql-bin.000XXX可以追溯到000001,这让我相信它们没有被使用。

以下是来自我的my.cnf的相关信息:

代码语言:javascript
复制
## Slave my.cnf
binlog_format                   = mixed
log_bin                         = /var/log/mysql/mysql-bin.log
sync_binlog                     = 1
pid_file                        = /var/run/mysqld/mysqld.pid
log_error                       = /var/log/mysql/error.log
general_log                     = 0
general_log_file                = /var/log/mysql/general.log
slow_query_log                  = 1
slow_query_log_file             = /var/log/mysql/slow.log
long_query_time                 = 3

server_id                       = 2

relay-log                       = /var/log/mysql/mysql-relay-bin.log
replicate-wild-do-table         = my_table_prefix_%.%
log_slave_updates               = 1
read_only                       = 1

下面是我的日志目录的ls -lah:

代码语言:javascript
复制
-rw-r-----  1 mysql mysql 1.1G Mar 29 19:48 mysql-bin.000001
-rw-r-----  1 mysql mysql 1.1G Mar 29 19:55 mysql-bin.000002
-rw-r-----  1 mysql mysql 1.1G Mar 29 20:03 mysql-bin.000003
...
-rw-r-----  1 mysql mysql 1.1G Mar 29 20:11 mysql-bin.000286
...
-rw-r-----  1 mysql mysql  254 Mar 31 12:27 mysql-relay-bin.000015
-rw-r-----  1 mysql mysql 1.1G Mar 31 12:27 mysql-relay-bin.000016
-rw-r-----  1 mysql mysql  326 Mar 31 12:27 mysql-relay-bin.000017
...
-rw-r-----  1 mysql mysql 1.1G Mar 31 12:27 mysql-relay-bin.000769

从服务器正在慢慢地赶上掌握和适当清除mysql-relay-bin文件。但是看起来mysql-bin文件将永远堆叠在一起。

和奴隶地位:

代码语言:javascript
复制
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 127.0.0.1
                  Master_User: repl_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000291
          Read_Master_Log_Pos: 15703910
               Relay_Log_File: mysql-relay-bin.000016
                Relay_Log_Pos: 662979789
        Relay_Master_Log_File: mysql-bin.000011
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table: my_table_prefix_%.%
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 662979592
              Relay_Log_Space: 271579588573
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 729594
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 100
                  Master_UUID: 5e12-f712611e5-b2f1-f206553c91-3b124
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Reading event from the relay log
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
EN

回答 1

Database Administration用户

回答已采纳

发布于 2016-03-31 22:12:32

你是正确的。传统上,复制奴隶需要启用二进制日志,除非您计划有一天将其故障转移到它。

在从服务器上使用二进制日志的唯一原因是

  • 设置循环复制(同时使从服务器成为母版)
  • 你想把奴隶提升为大师
  • 使用它作为分发母版(所有二进制日志,无数据,请参阅我以前的文章是否有可能从黑洞表中恢复数据?,其中描述了为什么要使用这样的设置)

至于你的实际情况,这里有两个建议(选一)

建议#1

首先,以root@localhost的身份登录到mysql,然后运行

代码语言:javascript
复制
mysql> STOP SLAVE;
mysql> RESET MASTER;

接下来,从my.cnf中注释掉这一行

代码语言:javascript
复制
#log_bin                         = /var/log/mysql/mysql-bin.log
#log_slave_updates               = 1

接下来,重新启动mysql

代码语言:javascript
复制
service mysql restart

最后,手动删除这些日志。

代码语言:javascript
复制
cd /var/log/mysql
rm -f mysql-bin.*

建议#2

如果不想重新启动mysql,请执行以下操作

首先,以“`root@localhost”的身份登录到mysql,然后运行

代码语言:javascript
复制
mysql> SET GLOBAL expire_logs_days = 1;
mysql> RESET MASTER;

然后,将这一行添加到my.cnf中

代码语言:javascript
复制
expire_logs_days = 1

这样,奴隶仍然会堆积二进制日志,但是会自动删除24小时以上的二进制日志。

试试看!

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/134005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档