【51CTO独家特稿】一、做了MySQL主从也有一段时间了,这两天检查磁盘空间情况,发现放数据库的分区磁盘激增了40多G,一路查看下来,发现配置好主从复制以来到现在的binlog就有40多G,原来根源出在这里,查看了一下my.cnf,看到binlog的 size是1G就做分割,但没有看到删除的配置,在MySQL里show了一下variables:
作者个人博客:andrewyu.blog.51cto.com
- mysql>show variables like '%log%';
查到了,
- | expire_logs_days | 0 |
这个默认是0,也就是logs不过期,这个是一个global的参数,所以需要执行
- set global expire_logs_days=8;
这样8天前的log就会被删除了,如果有回复的需要,请做好备份工作,但这样设置还不行,下次重启mysql了,配置又恢复默认了,所以需在my.cnf中设置,
- expire_logs_days = 8
这样重启也不怕了。
现在我在生产环境下的做法是将此时间设为0,然后备份mysql日志文件,然后再手动清理此文件。
想要恢复数据库以前的资料,执行
- mysql>show binlog events;
由于数据量很多,查看起来很麻烦,光打开个文件就要闪半天,所以应该适当删除部分可不用的日志。
并且如果使用的时间足够长的话,会把我的硬盘空间都给吃掉。
1、登录系统,/usr/bin/mysql
使用mysql查看日志:
- mysql>show binary logs;
- +—————-+———–+
- | Log_name | File_size |
- +—————-+———–+
- | ablelee.000001 | 150462942 |
- | ablelee.000002 | 120332942 |
- | ablelee.000003 | 141462942 |
- +—————-+———–+
2、删除bin-log(删除ablelee.000003之前的而没有包含ablelee.000003):
- mysql> purge binary logs to ′ablelee.000003′;
- Query OK, 0 rows affected (0.16 sec)
3、查询结果(现在只有一条记录了):
- mysql> show binlog events\G
- *************************** 1. row ***************************
- Log_name: ablelee.000003
- Pos: 4
- Event_type: Format_desc
- Server_id: 1
- End_log_pos: 106
- Info: Server ver: 5.1.26-rc-log, Binlog ver: 4
- 1 row in set (0.01 sec)
- (ablelee.000001和ablelee.000002已被删除)
- mysql> show binary logs;
- +—————-+———–+
- | Log_name | File_size |
- +—————-+———–+
- | ablelee.000003 | 106 |
- +—————-+———–+
- 1 row in set (0.00 sec)
- (删除的其它格式运用!)
- PURGE {MASTER | BINARY} LOGS TO ‘log_name’
- PURGE {MASTER | BINARY} LOGS BEFORE ‘date’
用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
例如:
- PURGE MASTER LOGS TO 'mysql-bin.010';
- PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00';
二、现在手上蛮多项目的数据库用的是MySQL,由于权限等原因,暂时不方便部署Nagios监控MySQL主从复制,所以我一般在从机上配置了SHELL脚本用来监控MySQL的主从状态(设置为每十分钟运行一次),并且每次出问题时将确切日期写进错误日志,方便事后排查原因,脚本内容如下:
- #!/bin/bash
- #check MySQL_Slave Status
- #crontab time 00:10
- MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}'`
- MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
- STATUS=$(/usr/local/webserver/mysql/bin/mysql -u yuhongchun -pyuhongchun101 -S /tmp/mysql.sock -e "show slave status\G" | grep -i "running")
- IO_env=`echo $STATUS | grep IO | awk ' {print $2}'`
- SQL_env=`echo $STATUS | grep SQL | awk '{print $2}'`
-
-
- if [ "$MYSQLPORT" == "3306" ]
- then
- echo "mysql is running"
- else
- mail -s "warn!server: $MYSQLIP mysql is down" yuhongchun027@163.com
- fi
-
- if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
- then
- echo "Slave is running!"
- else
- echo "####### $date #########">> /data/data/check_mysql_slave.log
- echo "Slave is not running!" >> /data/data/check_mysql_slave.log
- mail -s "warn! $MySQLIP_replicate_error" yuhongchun027@163.com << /data/data/check_mysql_slave.log
- fi
建议每十分钟运行一次。
- */10 * * * * root /bin/sh /root/mysql_slave.sh
记得在每台MySQL从机上分配一个yuhongchun的用户,权限大些也没关系,只限定在本地运行,如下所示:
- grant all privileges on *.* to "yuhongchun"@"127.0.0.1" identified by "yuhongchun101";
- grant all privileges on *.* to "yuhongchun"@"localhost" identified by "yuhongchun101";
脚本设计思路:
1、此脚本应该能适应各种各样不同的内外网环境,即IP不同的环境;
2、让脚本也顺便监控下MySQL是否正常运行;
三、innodb_buffer_pool_size的设置。
这个参数定义了InnodDB存储引擎的表数据和索引数据的最大内存缓冲区大小。和MyISAM存储引擎不同,MyISAM的key_buffer_size只缓存索引键,而innodb_buffer_pool_size却是同时为数据块和索引块 做缓存,这个特征和Oracle是一样的,这个值设得越高,访问表中数据需求的I/O就越少。在一个专用的数据库服务器,可以设置这个参数达机器物理内存的80%,我现在一般的做法是配置成物理内存的 1/4,比如8G内存的生产数据库,我一般会配置成2G左右。
四、测试了很长一段时间的MySQL的负载均衡,最后综合了老男孩和其它技术高手的意见,最终决定还是用LVS+Keepalived来作为MySQL的负载均衡,这是因为后端机器超过10台时,LVS的性能还是最好的;如果在3-5台左右,HAProxy也可以很轻松的搞定工作。
五、大家都很清,磁盘I/O总会成为数据库的性能瓶颈,这时候我们应该如何在生产环境下选择合适的RAID级别呢?
1、如果数据读写都很频繁,可靠性要求也很高,最好选择RAID10;
2、如果数据读很频繁,写相对较少,对可靠性有一定要求,可以选择RAID5;
3、如果数据读写都很频繁,但可靠性要求不高,可以选择RAID0。
4、对于核心业务的数据库主从同步,建议从机的备份时间往后延迟一段时间,通常的做法是延迟一天左右。
相关推荐
### MySQL主从配置知识点详解 #### 一、主服务器配置 **1.1 创建复制用户** - **目的**: 为了确保从服务器能够连接到主服务器并获取数据更新。 - **命令**: ```sql mysql> GRANT REPLICATION SLAVE ON *.* TO '...
### MySQL主从配置操作详解 #### 一、MySQL服务器复制配置背景 MySQL的主从复制是一种常见的高可用性和数据冗余解决方案。通过设置一个主服务器(Master)和一个或多个从服务器(Slave),可以实现数据的实时同步...
### MySQL主从配置详解 #### 一、MySQL主从配置概述 MySQL的主从复制机制是一种数据同步方式,主要用于实现数据库的数据备份与高可用性。通过设置一个或多个从服务器来复制主服务器上的数据更新操作,可以有效分散...
### MySQL 8 主从配置详解 #### 一、MySQL主从复制原理 ##### 1.1 二进制日志(Binary Log) - **定义**: MySQL的二进制日志(Binary Log)是一...希望以上介绍能够帮助大家更好地理解和掌握MySQL主从配置的相关知识点。
### Linux下MySQL主从同步配置详解 #### 一、引言 在数据库管理领域,MySQL主从同步是一种常见的数据复制技术,它可以帮助我们构建高可用性和数据冗余性,从而提高系统的稳定性和可靠性。本文将详细介绍如何在Linux...
MySQL主从同步配置和实现 MySQL主从同步是指将一个MySQL服务器的数据实时地复制到另一个或多个服务器上,以实现数据的高可用性和灾难恢复。这种方式可以实现数据的热备援、读写分离、负载均衡等功能。 1. 案例 1:...
Linux-Mysql 主从同步配置 本文将详细解释 Linux-Mysql 主从同步配置的步骤和知识点。 一、主服务器配置 1. 编辑数据库配置文件 my.cnf, 一般在/etc/目录下。 2. 在[mysqld]下面加入以下代码: * log-bin=mysql...
### MySQL 主从配置详解 #### 一、引言 MySQL 的主从复制是一种常见的数据冗余与负载分担方案,在实际应用中具有重要的意义。通过搭建 MySQL 的主从架构,不仅可以提升系统的可用性和数据安全性,还能有效分散读写...
超详细MySQL主从配置和主主同步总结。。。。。。。。。
### MySQL主从互备实战详解 #### 一、前言 在现代的互联网应用中,数据库作为关键的数据存储层,其稳定性和可用性至关重要。为了提高数据库系统的可靠性和响应速度,许多企业会采用MySQL主从互备(Master-Slave ...
首先,我们要理解MySQL主从复制的基本原理。在主从复制架构中,主服务器负责处理所有写操作,而从服务器则同步主服务器的数据变更,实现数据备份和读取负载分摊。在MySQL5.7中,这一过程通过二进制日志(binlog)和...
MySQL 主从复制是指在一个 MySQL 数据库集群中,通过配置将一台或多台 MySQL 服务器定义为主服务器(Master),其余服务器定义为从服务器(Slave)。主服务器负责接收客户端的写入请求,而从服务器则主要负责处理...
以上步骤详细介绍了如何在特定环境下部署MySQL主从复制系统,包括软件版本的选择、环境准备、主从服务器的配置以及同步状态的检查等内容。通过这些步骤,可以有效地完成MySQL主从复制的部署工作,为企业提供稳定高效...
要启用 binlog 日志,需要在 MySQL 配置文件中添加以下配置: [mysqld] log-bin=mysql-bin server_id=1 binlog_format=STATEMENT 然后,重启 MySQL 服务程序以使配置生效。启用 binlog 日志后,每次启动 MySQL ...
总结来说,MySQL主从配置和MySQL Proxy的结合使用,可以在Linux环境中实现高效、可靠的数据库管理,包括数据复制、故障切换和负载均衡。理解并熟练掌握这些技术,对于任何IT专业人士在处理大型数据库系统时都是至关...
总结起来,MySQL主从数据校验工具涉及到了数据库复制、Perl和Python的数据库访问接口以及Percona Toolkit等实用工具。理解和掌握这些知识点对于保障MySQL主从复制环境的数据安全和一致性至关重要。在实际操作中,...
总结来说,MySQL主从复制技术可以实现数据的实时备份和读写分离,降低master的读取压力,同时提高数据库的可用性和扩展性。然而,配置和维护MySQL主从复制需要对MySQL的内部机制和复制原理有充分理解,才能保证数据...