Heim Datenbank MySQL-Tutorial 经验分享:MySQL日志维护策略总结_MySQL

经验分享:MySQL日志维护策略总结_MySQL

May 30, 2016 pm 05:09 PM
mysql

这几天要折腾mysql服务器,所以在网上搜罗了一些维护策略,然后自己总结实验,下面是我的总结经验和别人的一些建议。

日志类型:

MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情:

 日志文件 记入文件中的信息类型
 错误日志 记录启动、运行或停止时出现的问题
 查询日志 记录建立的客户端连接和执行的语句
二进制日志 记录所有更改数据的语句。主要用于复制和即时点恢复
慢日志 记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询
事务日志 记录InnoDB等支持事务的存储引擎执行事务时产生的日志

1.启动慢查询日志:

MySQL 如果启用了slow_query_log=ON选项,就会记录执行时间超过long_query_time(默认10s)的查询(初使表锁定的时间不算作 执行 时间)。日志记录文件为slow_query_log_file[=file_name],如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。

【这个可以在调试mysql性能的时候启用,可以找出是哪个sql指令最浪费时间。生产环境中建议关闭】

2.生产环境中关闭通用查询日志:

由 于打开通用查询日志是记录用户的所有操作,在生产环境中这个日志的量是非常大的,所以一般情况下都是不打开的,myslq默认的该日志功能也是关闭的,在 特殊情况下才进行打开【一般只有在开发测试环境中,为了定位某些功能具体使用了哪些SQL语句的时候,才会在短时间段内打开该日志来做相应的分析。】

mysql> set global general_log = 1; #1:启动通用查询日志,0:关闭通用查询日志

mysql> show global variables like '%general_log%';

<ol class="dp-c">
<li class="alt"><span><span>+------------------+----------------------------+ </span></span></li>
<li><span> </span></li>
<li class="alt"><span>| Variable_name | Value | </span></li>
<li><span> </span></li>
<li class="alt"><span>+------------------+----------------------------+ </span></li>
<li><span> </span></li>
<li class="alt"><span>| general_log | ON | #是否启用了通用查询日志 </span></li>
<li><span> </span></li>
<li class="alt"><span>| general_log_file | /<span class="keyword">var</span><span>/run/mysqld/mysqld.log | #日志路径 </span></span></li>
<li><span> </span></li>
<li class="alt"><span>+------------------+----------------------------+ </span></li>
</ol>
Nach dem Login kopieren

2 rows in set (0.00 sec)

3.定期备份二进制日志和sql数据:【本地一份,远程日志主机一份,存储主机一份】

在 my.cnf中log-bin = [filename]是启用二进制日志,默认以[filename].000001往上记录的,从启用log-bin之后【此时最好用mysqldump 保存当前的mysql某个库的数据,因为二进制日志只是记录了从现在起到最近一次mysql当机重启中的所有sql语句】,mysql就会开始记录每一个 sql语句,一旦mysql因各种原因需要重启,则会产生新的二进制日志,000001的后缀名会不断往上自加。若是在mysql当机期间mysql的数 据遭到了破坏(如磁盘损坏),之前的数据全部都被破坏了,这时候这个备份策略就可以帮你挽回损失。你可以从二进制日志中恢复从开始到最近一次mysql重 启这段时间的数据。【二进制日志中记录的是每一个sql语句,可以用mysqlbinlog [filename]查看日志内容】

4.sync_binlog全局变量的取值一定要合适:

默 认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的语句丢失了。 要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。对非 事务表的更新执行完毕后立即保存到二进制日志中。

下面解释下sync_binlog:

“sync_binlog”:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在 MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系 统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为 1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,对于 高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

5.如果数据库有很多的事务型操作,则建议把二进制日志的回滚上限设置大一些:

对于事务表,例如BDB或InnoDB表,所有更改表的更新(UPDATE、DELETE或INSERT)被缓存起来,直到服务器接收到 COMMIT语句。在该点,执行完COMMIT之前,mysqld将整个事务写入二进制日志。当处理事务的线程启动时,它为 缓冲查询分配binlog_cache_size大小的内存。如果语句大于该值,线程则打开临时文件来保存事务【所以如果 bunlog_cache_size足够大,就避免了过多的磁盘的I/O操作,可以把数据全部缓存在内存中】。线程结束后临时文件被删除。 【“max_binlog_cache_size”:和"binlog_cache_size"相对应,但是所代表的是binlog能够使用的最大 cache内存大小。当我们执行多语句事务的时候,max_binlog_cache_size如果不够大的话,系统可能会报出“Multi- statementtransactionrequiredmorethan'max_binlog_cache_size'bytesofstorage” 的错误。所以最好也把max_binlog_cache_size也调大些(具体多大看你的服务器了)】

6.尽量把max_binlog_size设置大些

Binlog日志最大值,一般来说设置为512M或者1G,但不能超过1G。该大小并不能非常严格控制Binlog大小,尤其是当到达Binlog 比较靠近尾部而又遇到一个较大事务的时候,系统为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进入当前日志,直到该事务 结束。

7.下面是mysql环境的情况:

 mysql> show variables like '%binlog%';

<ol class="dp-j">
<li class="alt"><span>+--------------------------------+------------+ | Variable_name | Value | +--------------------------------+------------+ </span></li>
<li><span> </span></li>
<li class="alt"><span>| binlog_cache_size | <span class="number">1048576</span><span> | </span></span></li>
<li><span> </span></li>
<li class="alt"><span>| innodb_locks_unsafe_for_binlog | OFF | </span></li>
<li><span> </span></li>
<li class="alt"><span>| max_binlog_cache_size| <span class="number">4294967295</span><span> | </span></span></li>
<li><span> </span></li>
<li class="alt"><span>| max_binlog_size| <span class="number">1073741824</span><span> | </span></span></li>
<li><span> </span></li>
<li class="alt"><span>| sync_binlog| <span class="number">0</span><span>| </span></span></li>
<li><span> </span></li>
<li class="alt"><span>+--------------------------------+------------+ <br></span></li>
</ol>
Nach dem Login kopieren

博文出处:http://my.oschina.net/u/1759688/blog/384530

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen May 08, 2024 am 10:24 AM

Fähigkeiten zur Verarbeitung von Big-Data-Strukturen: Chunking: Teilen Sie den Datensatz auf und verarbeiten Sie ihn in Blöcken, um den Speicherverbrauch zu reduzieren. Generator: Generieren Sie Datenelemente einzeln, ohne den gesamten Datensatz zu laden, geeignet für unbegrenzte Datensätze. Streaming: Lesen Sie Dateien oder fragen Sie Ergebnisse Zeile für Zeile ab, geeignet für große Dateien oder Remote-Daten. Externer Speicher: Speichern Sie die Daten bei sehr großen Datensätzen in einer Datenbank oder NoSQL.

Wie optimiert man die MySQL-Abfrageleistung in PHP? Wie optimiert man die MySQL-Abfrageleistung in PHP? Jun 03, 2024 pm 08:11 PM

Die MySQL-Abfrageleistung kann durch die Erstellung von Indizes optimiert werden, die die Suchzeit von linearer Komplexität auf logarithmische Komplexität reduzieren. Verwenden Sie PreparedStatements, um SQL-Injection zu verhindern und die Abfrageleistung zu verbessern. Begrenzen Sie die Abfrageergebnisse und reduzieren Sie die vom Server verarbeitete Datenmenge. Optimieren Sie Join-Abfragen, einschließlich der Verwendung geeigneter Join-Typen, der Erstellung von Indizes und der Berücksichtigung der Verwendung von Unterabfragen. Analysieren Sie Abfragen, um Engpässe zu identifizieren. Verwenden Sie Caching, um die Datenbanklast zu reduzieren. Optimieren Sie den PHP-Code, um den Overhead zu minimieren.

Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Jun 03, 2024 pm 12:19 PM

Das Sichern und Wiederherstellen einer MySQL-Datenbank in PHP kann durch Befolgen dieser Schritte erreicht werden: Sichern Sie die Datenbank: Verwenden Sie den Befehl mysqldump, um die Datenbank in eine SQL-Datei zu sichern. Datenbank wiederherstellen: Verwenden Sie den Befehl mysql, um die Datenbank aus SQL-Dateien wiederherzustellen.

Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Jun 02, 2024 pm 02:26 PM

Wie füge ich Daten in eine MySQL-Tabelle ein? Mit der Datenbank verbinden: Stellen Sie mit mysqli eine Verbindung zur Datenbank her. Bereiten Sie die SQL-Abfrage vor: Schreiben Sie eine INSERT-Anweisung, um die einzufügenden Spalten und Werte anzugeben. Abfrage ausführen: Verwenden Sie die Methode query(), um die Einfügungsabfrage auszuführen. Bei Erfolg wird eine Bestätigungsmeldung ausgegeben.

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 Dec 09, 2024 am 11:42 AM

Eine der wichtigsten Änderungen, die in MySQL 8.4 (der neuesten LTS-Version von 2024) eingeführt wurden, besteht darin, dass das Plugin „MySQL Native Password“ nicht mehr standardmäßig aktiviert ist. Darüber hinaus entfernt MySQL 9.0 dieses Plugin vollständig. Diese Änderung betrifft PHP und andere Apps

Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Jun 02, 2024 pm 02:13 PM

So verwenden Sie gespeicherte MySQL-Prozeduren in PHP: Verwenden Sie PDO oder die MySQLi-Erweiterung, um eine Verbindung zu einer MySQL-Datenbank herzustellen. Bereiten Sie die Anweisung zum Aufrufen der gespeicherten Prozedur vor. Führen Sie die gespeicherte Prozedur aus. Verarbeiten Sie die Ergebnismenge (wenn die gespeicherte Prozedur Ergebnisse zurückgibt). Schließen Sie die Datenbankverbindung.

Wie erstelle ich eine MySQL-Tabelle mit PHP? Wie erstelle ich eine MySQL-Tabelle mit PHP? Jun 04, 2024 pm 01:57 PM

Das Erstellen einer MySQL-Tabelle mit PHP erfordert die folgenden Schritte: Stellen Sie eine Verbindung zur Datenbank her. Erstellen Sie die Datenbank, falls sie nicht vorhanden ist. Wählen Sie eine Datenbank aus. Tabelle erstellen. Führen Sie die Abfrage aus. Schließen Sie die Verbindung.

Der Unterschied zwischen Oracle-Datenbank und MySQL Der Unterschied zwischen Oracle-Datenbank und MySQL May 10, 2024 am 01:54 AM

Oracle-Datenbank und MySQL sind beide Datenbanken, die auf dem relationalen Modell basieren, aber Oracle ist in Bezug auf Kompatibilität, Skalierbarkeit, Datentypen und Sicherheit überlegen, während MySQL auf Geschwindigkeit und Flexibilität setzt und eher für kleine bis mittlere Datensätze geeignet ist. ① Oracle bietet eine breite Palette von Datentypen, ② bietet erweiterte Sicherheitsfunktionen, ③ ist für Anwendungen auf Unternehmensebene geeignet; ① MySQL unterstützt NoSQL-Datentypen, ② verfügt über weniger Sicherheitsmaßnahmen und ③ ist für kleine bis mittlere Anwendungen geeignet.

See all articles