4.9 4.9 The MySQL Log Files
mysql提供几种不同功用的纪录档,以便于让你了解mysqld发生了什么问题。
1. The error log:纪录所有mysqld启动,执行和结束时发生的错误讯息。
2. The isam log:纪录所有更动ISAM资料表的动作。
3. The query log:纪录所有的连线资料以及执行的查询语法。
4. The update log:储存所有更动资料的指令。
5. The binary log: Stores all statements that changes something.
Used also for replication
6. The slow log:纪录所有查询时间超过long_query_time或不使用索引的查询动作。
你可以在mysqld的资料目录中找到所有的纪录档。
4.9.2 The General Query Log
如果想知道mysqld里面发生了什么事的话,你就应该在启动mysqld时加上--log[=file]这个选项。这样一来,所有的连线及查询动作都会被写入纪录档中。
(预设档名为'hostname'.log)这个在网路程式的除错方面很有帮助。
纪录档中每笔资料写入的时机是当mysqld接收到该指令的时候,这有可能会跟sql指令执行的顺序不同。因此,本纪录档的写入时机和update
log与binary log不同。
4.9.3 The Update Log
当你在执行mysqld时,如果有加上--log-update[=file_name]选项的话,
mysqld会将所有关于更新资料的SQL
commands写入纪录档中。在没有指定file_name的情况下,预设会用主机名称当作纪录档的档案名称。如果你指定的档案名称不包含完整路径的话,纪录档会放置在资料目录中。如果档案名称没有指定副档名的话,
mysqld会以"file_name.###"作为纪录档的档名,其中###是阿拉伯数字,每当下列状况发生时,这个数字就会加一。
1.执行mysqladmin refresh
2.执行mysqladmin flush-logs
3.执行FLUSH LOGS sql指令
4.重新启动mysqld
update
logging还有一项特点就是它只会纪录"真正"改变资料的动作。因此,带有where选项的updata或delete指令如果没有更动任何资料的话,这个动作就不会被写入纪录档。甚至在updata指令没有变更栏位值的情况下,该指令也不会被纪录下来。
update
logging执行的时机是介于sql指令结束以及lock解开以前。这样可以确保所有的变动纪录是依照实际执行的顺序写入纪录档中。
你可以执行下列指令来用update log file更新资料库。 (假设你的update log
files的档名格式为file_name.###)
shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
ls这个指令加上-1 -t -r三个选项后,便能按时间顺序排列所有的纪录档。
4.9.4 Binary Update Log
以后binary update log将会用来取代update log,因此希望你能尽快改用binary update
log。
binary update log档案以更有效率的格式纪录update
log里面的资讯。此外,里面还纪录每个更新资料库的指令耗费多少时间。没有更动资料库的指令不会被写入纪录档中。如果想要纪录所有的sql指令,你应该使用general
query log。
只要在启动mysqld时加上--log-bin[=file_name]选项就能改用。 binary update log。
binary update log的副档名命名方式和update log一样,附档名递增的时机也和update
log相同。或是当纪录档大小达到max_binlog_size上限时, mysqld会自动产生一个新的纪录档。你可以透过reset
master这个sql指令删除所有目前未被开启的binary update log files。 (只保留目前使用中的纪录档)
mysqld有两个选项跟binary update log有关:
1. binlog-do-db=database_name:只纪录某个资料库的更动资料
2. binlog-ignore-db=database_name:不纪录某个资料库的更动资料
为了要知道曾经产生过哪些binary update log files, mysqld会产生一个binary log
index档,里面包含所有使用过的binary update log的档名。 binary log
index档的档名预设和binary update log相同,不过副档名则改为index。
你可以用mysqlbinlog指令来检视binary update log档的内容。例如你可以执行下列指令以binary update
log的内容更新某个mysql server。
shell> mysqlbinlog log-file | mysql -h server_name
你也可以用mysqlbinlog读取远端mysql server的binary update log。执行mysqlbinlog
--help会让你更了解如何使用这个程式。
binary update log写入的时机和update log相同。以确保能正确地纪录每个指令执行的顺序。
mysql提供几种不同功用的纪录档,以便于让你了解mysqld发生了什么问题。
1. The error log:纪录所有mysqld启动,执行和结束时发生的错误讯息。
2. The isam log:纪录所有更动ISAM资料表的动作。
3. The query log:纪录所有的连线资料以及执行的查询语法。
4. The update log:储存所有更动资料的指令。
5. The binary log: Stores all statements that changes something.
Used also for replication
6. The slow log:纪录所有查询时间超过long_query_time或不使用索引的查询动作。
你可以在mysqld的资料目录中找到所有的纪录档。
4.9.2 The General Query Log
如果想知道mysqld里面发生了什么事的话,你就应该在启动mysqld时加上--log[=file]这个选项。这样一来,所有的连线及查询动作都会被写入纪录档中。
(预设档名为'hostname'.log)这个在网路程式的除错方面很有帮助。
纪录档中每笔资料写入的时机是当mysqld接收到该指令的时候,这有可能会跟sql指令执行的顺序不同。因此,本纪录档的写入时机和update
log与binary log不同。
4.9.3 The Update Log
当你在执行mysqld时,如果有加上--log-update[=file_name]选项的话,
mysqld会将所有关于更新资料的SQL
commands写入纪录档中。在没有指定file_name的情况下,预设会用主机名称当作纪录档的档案名称。如果你指定的档案名称不包含完整路径的话,纪录档会放置在资料目录中。如果档案名称没有指定副档名的话,
mysqld会以"file_name.###"作为纪录档的档名,其中###是阿拉伯数字,每当下列状况发生时,这个数字就会加一。
1.执行mysqladmin refresh
2.执行mysqladmin flush-logs
3.执行FLUSH LOGS sql指令
4.重新启动mysqld
update
logging还有一项特点就是它只会纪录"真正"改变资料的动作。因此,带有where选项的updata或delete指令如果没有更动任何资料的话,这个动作就不会被写入纪录档。甚至在updata指令没有变更栏位值的情况下,该指令也不会被纪录下来。
update
logging执行的时机是介于sql指令结束以及lock解开以前。这样可以确保所有的变动纪录是依照实际执行的顺序写入纪录档中。
你可以执行下列指令来用update log file更新资料库。 (假设你的update log
files的档名格式为file_name.###)
shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
ls这个指令加上-1 -t -r三个选项后,便能按时间顺序排列所有的纪录档。
4.9.4 Binary Update Log
以后binary update log将会用来取代update log,因此希望你能尽快改用binary update
log。
binary update log档案以更有效率的格式纪录update
log里面的资讯。此外,里面还纪录每个更新资料库的指令耗费多少时间。没有更动资料库的指令不会被写入纪录档中。如果想要纪录所有的sql指令,你应该使用general
query log。
只要在启动mysqld时加上--log-bin[=file_name]选项就能改用。 binary update log。
binary update log的副档名命名方式和update log一样,附档名递增的时机也和update
log相同。或是当纪录档大小达到max_binlog_size上限时, mysqld会自动产生一个新的纪录档。你可以透过reset
master这个sql指令删除所有目前未被开启的binary update log files。 (只保留目前使用中的纪录档)
mysqld有两个选项跟binary update log有关:
1. binlog-do-db=database_name:只纪录某个资料库的更动资料
2. binlog-ignore-db=database_name:不纪录某个资料库的更动资料
为了要知道曾经产生过哪些binary update log files, mysqld会产生一个binary log
index档,里面包含所有使用过的binary update log的档名。 binary log
index档的档名预设和binary update log相同,不过副档名则改为index。
你可以用mysqlbinlog指令来检视binary update log档的内容。例如你可以执行下列指令以binary update
log的内容更新某个mysql server。
shell> mysqlbinlog log-file | mysql -h server_name
你也可以用mysqlbinlog读取远端mysql server的binary update log。执行mysqlbinlog
--help会让你更了解如何使用这个程式。
binary update log写入的时机和update log相同。以确保能正确地纪录每个指令执行的顺序。
2014-07-13 16:29:14